DynamoDB strumieni z Lambda

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

Oczywiście możesz również użyć strumieni DynamoDB, aby uruchomić dalsze procesy i funkcje AWS Lambda. Lambda z definicji to usługa obliczeniowa bez serwera, która uruchamia Twój kod w odpowiedzi na zdarzenia i automatycznie zarządza zasobami obliczeniowymi dla Ciebie.

Możesz użyć Lambda do napisania kodu w węźle.JS, Python, Java lub C# w celu przetwarzania rekordów strumienia i podejmowania odpowiednich działań. Główną zaletą integracji strumieni DynamoDB z Lambda jest to, że Lambda umożliwia uruchamianie wspieranych usług lub kodów aplikacji bez potrzeby administracji.

Jak używać strumieni AWS DynamoDB z Lambda

Chociaż możliwe jest utworzenie funkcji Lambda, która zużywa zdarzenia i zdarzenia ze strumienia DynamODB, proces może być dość zadanie, szczególnie przy pierwszej próbie. Poniższe kroki pomogą:

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

Ta procedura odniesie sukces tylko wtedy, gdy znasz podstawowe operacje i procesy Lambda. Dlatego powinno to być pierwsze, aby zapewnić, że twoje zrozumienie Lambda jest powyżej średniej.

Drugim warunkiem wstępnym, który warto rozważyć, jest potwierdzenie wersji AWS twojego systemu. Możesz użyć następującego polecenia:

AWS -IVERSION

Wynik dla dostarczonego polecenia powinien wyglądać tak:

AWS-CLI/2.X.x Python/3.X.x Linux/4.X.X-XXX-STD BOTOCORE/2.X.X

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

Dlatego skończysz na czymś takim:

Krok 2: Utwórz rolę wykonania

Następnym krokiem jest utworzenie roli wykonania w AWS CLI. Rola wykonania to rola AWS tożsamość i zarządzanie dostępem (IAM) przyjęta przez usługę AWS w celu wykonywania zadań w Twoim imieniu. Daje dostęp do zasobów AWS, których będziesz potrzebować po drodze.

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

AWS IAM Create-Role \
--Role-nazwa LambdadynamodbexecutionRole \
--Załóż plik-role-policy-dokument: // Załóż, że-role-polityka.JSON \
--Opis „AwsLambdadynamodbexecutionRole” \
--Nazwa usługi Lambda.Amazonaws.com

Poprzednie polecenie jest polecenie AWS CLI, aby stworzyć rolę. Możesz także użyć konsoli zarządzania Amazon, aby stworzyć rolę. Gdy znajdziesz się w konsoli IAM, otwórz Role Strona i kliknij Stwórz rolę przycisk.

Przejdź do następujących:

  • Zaufany podmiot: Lambda
  • Nazwa roli: Lambda-Dynamodb-Role
  • Uprawnienia: awslambdadynamodbexecutionRole

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

PIP Instaluj boto3

Krok 3: Włącz strumienie DynamoDB na stole

Musisz włączyć strumienie DynamoDB na stole. Do tej ilustracji używamy Boto3, AWS SDK dla Pythona. Następujące polecenie pomoże:

Import Boto3
# Połącz się z usługą DynamODB
DynamODB = Boto3.Klient („DynamODB”)
# Włącz strumienie DynamoDB w tabeli „My-Table”
Odpowiedź = DynamODB.Update_Table (
TableName = „MyTable”,
Streamspecification =
„Streamenabled”: prawda,
„StreamViewType”: „NEW_AND_OLD_IMAGES”

)
# Sprawdź odpowiedź, aby upewnić się, że strumień został pomyślnie włączony
Jeśli odpowiedź ['Streamspecification'] ['streamenabled']:
print („DynamoDB Stream włączony”)
w przeciwnym razie:
print („Błąd włączający strumień dynamoDB”)

Ten kod umożliwia strumień DynamoDB w tabeli „MyTable”, która przesyła strumieniowo zarówno nowe, jak i stare obrazy elementów, gdy tylko pojawią się jakiekolwiek zmiany. Możesz wybrać strumieniowo nowe obrazy, gdy tylko StreamViewType do „New_image”.

W szczególności uruchomienie tego kodu może włączyć strumienie na tabelach. Zamiast tego proces może zająć trochę czasu. Możesz użyć metody opisu_tabla, aby sprawdzić status strumienia.

Krok 4: Utwórz funkcję Lambda

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

  • Otwórz konsolę AWS Lambda i kliknij kartę „Utwórz funkcję”. Na stronie „Utwórz funkcję” wybierz „Autor od zera” i wprowadź nazwę swojej funkcji. W tym momencie musisz również wprowadzić czas wykonawczy. Wybraliśmy Pythona do tej ilustracji.
  • W „Wybierz lub utwórz rolę wykonania”, wybierz „Utwórz nową rolę z podstawowymi uprawnieniami Lambda”, aby stworzyć rolę IAM z niezbędnymi uprawnieniami dla Twojej funkcji Lambda.
  • Kliknij przycisk „Utwórz funkcję”, aby utworzyć funkcję Lambda.
  • Na stronie „Konfiguracja” dla swojej funkcji przewiń w dół do sekcji „Projektant” i kliknij kartę „Dodaj wyzwalacz”.
  • W wyświetlonym polu „Konfiguracja wyzwalacza” wybierz „DynamoDB” z menu rozwijanego „Trigger”.
  • Wybierz tabelę DynamoDB, której chcesz użyć do wyzwolenia funkcji. Po zakończeniu wybierz, czy chcesz uruchomić funkcję we wszystkich aktualizacjach tabeli, czy tylko na określonych aktualizacjach (takich jak aktualizacje określonych kolumn).
  • Kliknij przycisk „Dodaj”, aby utworzyć spust.
  • W edytorze „kodu funkcji” napisz kod Python dla swojej funkcji. Możesz użyć obiektu zdarzenia przekazywanego do Twojej funkcji, aby uzyskać dostęp do danych, które wyzwalają funkcję.
  • Kliknij przycisk „Zapisz”, aby funkcja została zapisana.

To wszystko, co dzieje się podczas tworzenia funkcji Lambda! Twoja funkcja jest teraz wyzwalana, 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 (wydarzenie, kontekst):
Dla rekordów w wydarzeniu [„Records”]:
print (nagraj ['DynamOdB'] ['newimage'])

Ta funkcja iteruje rekordy w obiekcie zdarzenia i drukuje nowy obraz elementu w tabeli DynamoDB, która wyzwala funkcję.

Krok 5: Przetestuj funkcję Lambda

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

Oto przykład, jak to zrobić:

Import Boto3
# Połącz się z usługą DynamODB
DynamODB = Boto3.Klient („DynamODB”)
# Połącz się z usługą Lambda
lambda_client = boto3.Klient („Lambda”)
# Wstaw element do tabeli „My-Table”
Odpowiedź = DynamODB.put_item (
TableName = „MyTable”,
Pozycja =
„id”: 'n': '123',
„Nazwa”: 's': „Joel Austin,
„Age”: 'n': '34'

)
# Sprawdź odpowiedź, aby upewnić się, że element został pomyślnie wstawiony
Jeśli odpowiedź [„respessemetadata”] ['httpstatuscode'] == 200:
Drukuj („pozycja włożona pomyślnie”)
w przeciwnym razie:
Drukuj („element wstawiania błędu”)
# Wywołaj funkcję Lambda, która jest subskrybowana do tabeli „My-Table”
Odpowiedź = Lambda_Client.odwołać się(
FunkcjaName = „MyFunction”,
InvocationType = „zdarzenie”,
Logtype = „ogon”,
PAYLOAD = '"Records": ["dynamoDB": "newImage": "id": "n": "123", "name": "s": "joel austin", " wiek ": " n ":" 34 "] '
)
# Sprawdź odpowiedź, aby upewnić się, że funkcja została pomyślnie uruchomiona
Jeśli odpowiedź ['statusCode'] == 202:
Drukuj („Funkcja Lambda uruchomiła pomyślnie”)
w przeciwnym razie:
Drukuj („Błąd wyzwalający funkcję Lambda”)

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

Następnie możesz sprawdzić dzienniki funkcji Lambda, aby sprawdzić, czy z powodzeniem uruchomiła się i przetworzyła dane dotyczące zdarzenia.

Wniosek

Należy zauważyć, że możesz przywołać wiele razy w przypadku tego samego rekordu strumienia, że ​​strumień DynamoDB może wyzwolić funkcję Lambda. Głównym powodem tego jest to, że rekordy strumienia są ostatecznie spójne i możliwe jest przetwarzanie tego samego rekordu wielokrotnie przez funkcję Lambda. Ważne jest, aby zaprojektować swoją funkcję Lambda, aby poprawnie obsłużyć tę sprawę.