Przejdź do treści

Jak przekazać zmienną do funkcji Lambda za pomocą CloudWatch event w AWS

How to pass a variable to AWS Lambda via CloudWatch event 2023

Artykuł o tym, jak przekazać zmienną do funkcji AWS Lambda za pomocą zdarzenia CloudWatch event. Za pomocą CloudWatch event możesz przekazywać różne zmienne i uruchamiać różny kod. Możesz mięć tylko jedną funkcję Lambda i używając innej wartości zmiennej wywołać zupełnie inne zachowanie.

Co możesz z tym zrobić? Możesz np. przekazać wartość, która co jakiś czas rozgrzeje funkcję AWS lambda i zapobiegnie zimnemu startowi. Więcej na ten temat w innym artykule.

Jedna funkcja lambda może odpowiadać za uruchamianie i zatrzymywanie maszyn ec2, w zależności od tego, jaką wartość zmiennej przekażesz, to funkcja lambda wykona stop lub start maszyn ec2. Nie martw się, wkrótce nagram film i o tym.

How to pass variable from CloudWatch event to AWS Lambda function | Tutorial with demo 2023

Rola IAM

Ja do roli IAM dodam tylko uprawnienia dotyczące logów, Ty możesz pozwolić swojej funkcji na dużo więcej 😉

lambda basic execution role IAM

Funkcja Lambda

Zazwyczaj tworzę funkcje Lambda, używając najnowszej wersji python, aktualnie jest to python 3.11. Wybieram także rolę IAM, którą utworzyłem wcześniej.

lambda function cloud watch event 2023

Kod jest bardzo prosty. Jeśli zmienna cloudwatch przekazana przez CloudWatch event ma wartość option_1, to wykona się pierwsza część kodu. Jeśli zmienna będzie miała wartość option_2, to druga część, a jeśli option_3, to trzecia część.

Dodatkowo, jeśli funkcja zostanie uruchomiona ręcznie i nie zostanie przekazana żadna zmienna, albo zmienna będzie miała inną wartość, to wykona się kod z bloku else.

Poniżej kod funkcji lambda::

import json

def lambda_handler(event, context):
    variable_from_cloudwatch_event = event.get('cloudwatch')
    
    if variable_from_cloudwatch_event == "option_1":
        print("You chose option 1, execute code 1...")
        
    if variable_from_cloudwatch_event == "option_2":
        print("You chose option 2, execute code 2...")
        
    if variable_from_cloudwatch_event == "option_3":
        print("You chose option 3, execute code 3...")
        
    else:
        print("Function triggered manually, or variable not read from Cloudwatch event, execute code...")

CloudWatch event

Teraz najważniejsze, czyli dodanie triggera EventBridge (CloudWatch event). Możesz to zrobić z poziomu lambdy albo Amazon EventBridge. Jeśli robisz to z poziomu lambdy, to musisz pamiętać o konieczności jego późniejszej konfiguracji.

aws eventBridge cloudwatch event new rule

W tym celu należy przejść do Amazon EventBridge wybrać utworzony wcześniej trigger i go edytować. W kroku trzecim przy wybranym celu należy wejść w dodatkowe ustawienia wybrać constant (JSON text) i wpisać co potrzeba. Ja wybrałem nazwę zmiennej cloudwatch o wartości option_2:

cloudwatch event variable constant JSON text

Kod dodany do constant (JSON text):

{
	"cloudwatch":"option_2"
}

Zachęcam do obejrzenia filmu i sprawdzenia jak to działa w praktyce How to pass variable from CloudWatch event to AWS Lambda function | Tutorial with demo 2023 – YouTube.

Podsumowanie

Jak widzisz, uruchamianie funkcji lambda z różnymi wartościami zmiennej nie jest takie trudne. Zachęcam do eksperymentowania i tworzenia bardziej złożonych rozwiązań. Nie warto kopiować całego kodu i tworzyć kolejnych funkcji, gdy chce się zmienić tylko drobną rzecz w działaniu funkcji.

Zachęcam do zajrzenia na mój kanał YouTube Wojciech Lepczyński – YouTube, zdobywania nowej wiedzy i rozwijania się, to może pozytywnie wpłynąć na Twoje życie i finanse.

Jak odczytać i zapisać plik na S3 używając funkcji lambda i boto3
Cross-account IAM – Jak używać roli IAM z innego konta AWS