Strumienie DynamoDB za pomocą Lambdy

Strumienie Dynamodb Za Pomoca Lambdy



Strumienie DynamoDB to funkcja w Amazon DynamoDB, która pozwala uzyskać strumień zmian lub zmian danych w czasie rzeczywistym, które są wprowadzane w tabelach DynamoDB. Możesz użyć tej funkcji do zbudowania aplikacji, które reagują na zmiany danych w tabelach DynamoDB, takie jak aktualizacja pamięci podręcznych i wysyłanie powiadomień.

Oczywiście możesz także użyć DynamoDB Streams do wyzwalania procesów downstream i funkcji AWS Lambda. Lambda z definicji jest bezserwerową usługą obliczeniową, która uruchamia Twój kod w odpowiedzi na zdarzenia i automatycznie zarządza zasobami obliczeniowymi za Ciebie.

Możesz użyć Lambda do napisania kodu w Node.js, Pythonie, Javie lub C# w celu przetworzenia rekordów strumienia i podjęcia odpowiednich działań. Główną zaletą integracji strumieni DynamoDB z Lambdą jest to, że Lambda umożliwia uruchamianie wspieranych usług lub kodów aplikacji bez potrzeby administrowania.







Jak używać strumieni AWS DynamoDB z Lambdą

Chociaż możliwe jest utworzenie funkcji Lambda, która wykorzystuje zdarzenia i wystąpienia ze strumienia DynamoDB, proces ten może być dość wymagający, szczególnie przy pierwszej próbie. Poniższe kroki pomogą:



Krok 1: Upewnij się, że Twój system spełnia wymagania wstępne

Ta procedura zakończy się sukcesem tylko wtedy, gdy znasz podstawowe operacje i procesy Lambdy. Tak więc powinno to być twoje pierwsze, aby upewnić się, że twoje zrozumienie Lambdy jest powyżej średniej.



Drugim warunkiem, który warto wziąć pod uwagę, jest potwierdzenie wersji systemu AWS. Możesz użyć następującego polecenia:





aws – wersja

Wynik podanego polecenia powinien wyglądać następująco:

aws-cli/ 2 .x.x Python/ 3 xx Linux/ 4 .x.x-xxx-std botocore/ 2 xx

Podana przykładowa odpowiedź zawiera zainstalowaną wersję AWS CLI ( aws-cli/2.x.x ), wersja Pythona ( Python/3.x.x ) i system operacyjny ( Linux/4.x.x-xxx-std ). Ostatnia część odpowiedzi definiuje wersję biblioteki Botocore, na której działa interfejs AWS CLI ( botocore/2.x.x ).



Skończysz więc z czymś takim:

Krok 2: Utwórz rolę wykonawczą

Kolejnym krokiem jest utworzenie roli wykonawczej w AWS CLI. Rola wykonawcza to rola AWS Identity and Access Management (IAM) przyjmowana przez usługę AWS do wykonywania zadań w Twoim imieniu. Zapewnia dostęp do zasobów AWS, których będziesz potrzebować po drodze.

Możesz utworzyć rolę za pomocą następującego polecenia:

aws tworzę rolę \

--role-name LambdaDynamoDBExecutionRole \

--assume-role-policy-document file://assume-role-policy.json \

--opis „Rola wykonania AWSLambdaDynamoDB” \

--nazwa-usługi lambda.amazonaws.com

Poprzednie polecenie jest poleceniem AWS CLI służącym do tworzenia roli. Możesz także użyć Amazon Management Console, aby utworzyć rolę. Gdy znajdziesz się w konsoli IAM, otwórz plik Role stronę i kliknij Utwórz rolę przycisk.

Kontynuuj, aby wprowadzić następujące informacje:

  • Zaufany podmiot: Lambda
  • Nazwa roli: lambda-dynamodb-role
  • Uprawnienia: AWSLambdaDynamoDBExecutionRole

Możesz także użyć Pythona, najpierw instalując AWS SDK dla Pythona:

pip zainstaluj boto3

Krok 3: Włącz strumienie DynamoDB na swoim stole

Musisz włączyć strumienie DynamoDB na swoim stole. W tej ilustracji używamy Boto3, AWS SDK dla Pythona. Poniższe polecenie pomoże:

zaimportuj boto3

# Połącz się z usługą DynamoDB
dynamodb = boto3.klient( 'dynamodb' )

# Włącz strumienie DynamoDB w tabeli „my-table”.
odpowiedź = dynamodb.update_table(
NazwaTabeli= 'mój stół' ,
specyfikacja strumienia = {
„Strumień włączony” : Prawdziwe,
„Typ widoku strumienia” : „NEW_AND_OLD_IMAGES”
}
)

# Sprawdź odpowiedź, aby upewnić się, że strumień został pomyślnie włączony
jeśli odpowiedź[ „Specyfikacja strumienia” ][ „Strumień włączony” ]:
wydrukować( „Pomyślnie włączono strumień DynamoDB” )
w przeciwnym razie:
wydrukować( „Błąd podczas włączania strumienia DynamoDB” )

Ten kod włącza strumień DynamoDB w tabeli „mytable”, który przesyła strumieniowo zarówno nowe, jak i stare obrazy elementów, gdy tylko wystąpią jakiekolwiek zmiany. Możesz wybrać przesyłanie strumieniowe tylko nowych obrazów, gdy tylko StreamViewType zmieni się na „NEW_IMAGE”.

Warto zauważyć, że uruchomienie tego kodu może włączyć strumienie na twoich stołach dopiero po pewnym czasie. Zamiast tego proces może zająć trochę czasu. Do sprawdzenia stanu strumienia można użyć metody opisz_tabelę.

Krok 4: Utwórz funkcję Lambda

Kolejnym krokiem jest utworzenie funkcji Lambda, która uruchamia strumień DynamoDB. Poniższe kroki powinny pomóc:

  • Otwórz konsolę AWS Lambda i kliknij zakładkę „Utwórz funkcję”. Na stronie „Utwórz funkcję” wybierz „Autor od podstaw” i wprowadź nazwę swojej funkcji. W tym momencie musisz również wprowadzić czas działania. Do tej ilustracji wybraliśmy Pythona.
  • W sekcji „Wybierz lub utwórz rolę wykonawczą” wybierz „Utwórz nową rolę z podstawowymi uprawnieniami Lambda”, aby utworzyć rolę IAM z niezbędnymi uprawnieniami dla Twojej funkcji Lambda.
  • Kliknij przycisk „Utwórz funkcję”, aby utworzyć funkcję Lambda.
  • Na stronie „Konfiguracja” swojej funkcji przewiń w dół do sekcji „Projektant” i kliknij kartę „Dodaj wyzwalacz”.
  • W wyświetlonym oknie „Konfiguracja wyzwalacza” wybierz „DynamoDB” z menu rozwijanego „Wyzwalacz”.
  • Wybierz tabelę DynamoDB, której chcesz użyć do uruchomienia funkcji. Po zakończeniu wybierz, czy funkcja ma być uruchamiana przy wszystkich aktualizacjach tabeli, czy tylko przy określonych aktualizacjach (takich jak aktualizacje określonych kolumn).
  • Kliknij przycisk „Dodaj”, aby utworzyć wyzwalacz.
  • W edytorze „Kod funkcji” napisz kod Pythona dla swojej funkcji. Możesz użyć obiektu zdarzenia, który jest przekazywany do twojej funkcji, aby uzyskać dostęp do danych, które wyzwalają funkcję.
  • Kliknij przycisk „Zapisz”, aby zapisać funkcję.

To wszystko, co dzieje się podczas tworzenia funkcji Lambda! Twoja funkcja jest teraz uruchamiana za każdym razem, gdy pojawiają się aktualizacje określonej tabeli DynamoDB.

Oto przykład prostej funkcji Pythona, którą może wywołać strumień DynamoDB:

def lambda_handler(zdarzenie, kontekst):

do rekordu w przypadku [ 'Dokumentacja' ]:

drukuj(nagraj[ 'dynamodb' ][ 'Nowy wygląd' ])

Ta funkcja przegląda rekordy w obiekcie zdarzenia i drukuje nowy obraz elementu w tabeli DynamoDB, który uruchamia tę funkcję.

Krok 5: Przetestuj funkcję Lambda

Aby przetestować funkcję Lambda, którą może wyzwolić strumień DynamoDB, możesz użyć metody boto3 biblioteka, aby uzyskać dostęp do interfejsu API DynamoDB i odwołać się metoda tzw lambda klienta, aby uruchomić funkcję.

Oto przykład, jak to zrobić:

zaimportuj boto3

# Połącz się z usługą DynamoDB
dynamodb = boto3.klient( 'dynamodb' )

# Połącz się z usługą Lambda
klient_lambda = boto3.klient( 'lambda' )

# Wstaw element do tabeli „my-table”.
odpowiedź = dynamodb.put_item(
NazwaTabeli= 'mój stół' ,
pozycja={
'ID' :{ 'N' : „123” },
'imię' :{ 'S' : 'Joel Austin},
'
wiek ':{' N ':' 3. 4 '}
}
)

# Sprawdź odpowiedź, aby upewnić się, że element został pomyślnie wstawiony
jeśli odpowiedź['
Metadane odpowiedzi '][' Kod stanu HTTP '] == 200:
print('Przedmiot wstawiony pomyślnie')
w przeciwnym razie:
print('Błąd podczas wstawiania elementu')

# Wywołaj funkcję Lambda, która jest subskrybowana do „
mój stół ' stół
odpowiedź = lambda_client.invoke(
NazwaFunkcji='
mojafunkcja ',
InvocationType='
Wydarzenie ',
LogType='
Ogon ',
Ładunek='
{ 'Dokumentacja' :[{ 'dynamodb' :{ 'Nowy wygląd' :{ 'ID' :{ 'N' : '123' }, 'imię' :{ 'S' : „Joel Austin” }, 'wiek' :{ 'N' : „3. 4” }}}}]} '
)

# Sprawdź odpowiedź, aby upewnić się, że funkcja została pomyślnie uruchomiona
jeśli odpowiedź['
Kod statusu '] == 202:
print('Funkcja Lambda uruchomiona pomyślnie')
w przeciwnym razie:
print('Błąd podczas uruchamiania funkcji Lambda')

Ten kod najpierw wstawia element do pliku mój stół table, a następnie wyzwala mojafunkcja Lambda, wysyłając przykładowy ładunek zdarzenia do funkcji za pomocą odwołać się metoda. Ładunek zdarzenia symuluje zdarzenie strumienia DynamoDB, które zawiera nowy obraz właśnie wstawionego elementu.

Następnie możesz sprawdzić dzienniki funkcji Lambda, aby zobaczyć, czy pomyślnie wyzwoliła i przetworzyła dane zdarzenia.

Wniosek

Należy pamiętać, że można wielokrotnie wywoływać ten sam rekord strumienia, który strumień DynamoDB może wyzwalać funkcję Lambda. Głównym powodem tego jest to, że rekordy strumieniowe są ostatecznie spójne i możliwe jest wielokrotne przetwarzanie tego samego rekordu za pomocą funkcji Lambda. Kluczowe znaczenie ma zaprojektowanie funkcji Lambda, aby poprawnie obsłużyć ten przypadek.