Tworzenie
Kod Lambdy może być napisany w jednym z wielu języków. W tym przypadku wykorzystamy język node.js, aby nadmiernie nie komplikować jednego z pierwszych wpisów (chodzi o brak wsparcia dla języka C# z poziomu edytora kodu konsoli AWS).
Jednocześnie, kod funkcji możemy pisać wykorzystując konsolę AWS, AWS CLI, Eclipse czy Visual Studio. W kolejnych wpisach będziemy posługiwać się głównie ostatnim środowiskiem.
Lambda: główne koncepcje
Przystępując do pisania funkcji Lambda należy poznać główne koncepcje, których musimy przestrzegać.
Handler
Handler to nazwa funkcji Lambda, od której rozpoczyna się wykonywanie. Nazwa ta pojawia się w konsoli AWS:
Handler jest naszym entry-pointem - jeżeli zmienicie nazwę pamiętajcie, żeby tą samą zmianę dokonać w kodzie i kliknąć przycisk Deploy. W przeciwnym razie zobaczycie poniższy komunikat:
Parametry przekazywane do handler’a
W przypadku kodu udostępnionego przez AWS możecie zobaczyć, że do metody zostało przekazane zdarzenie (event) oraz kontekst (context):
Event zawiera wszystkie szczegóły dotyczące użytego wyzwalacza. Context przenosi informacje związane ze środowiskiem uruchomieniowym dla funkcji Lambda. Zaliczamy do nich parametry takie jak nazwa funkcji, nazwy grup CloudWatch (do monitrowania funkcji), szczegóły arn (Amazon Resource Names) czy timeout określający maksymalny czas wykonywania funkcji.
Spójrzmy jednak jak wygląda analiza kodu w praktyce. Dokonamy drobnych zmian w celu podejrzenia log’a:
console.log('Loading function');
exports.handler_check = async (event, context) => {
console.log('Zdarzenie:', JSON.stringify(event, null, 2));
console.log('Kontekst:', JSON.stringify(context, null, 2));
return event.key1; // Echo back the first key value
// throw new Error('Something went wrong');
};
Po wykonaniu powyższego kodu możemy podejrzeć efekt jego działania:
Na ten moment dla nas najważniejsze są parametry o których wspomniałem powyżej, tj. nazwa funkcji, nazwa dziennika zdarzeń czy awsRequestId - z tych parametrów będziemy korzystali niejednokrotnie na kolejnych etapach.
Logi
Logi dodane wewnątrz funkcji Lambda wyświetlane są w AWS CloudWatch, gdy dana funkcja jest wykonywana. Składnia logów będzie się różnić w zależności od wybranego języka. Dla node.js używanego w ramach przykładu będzie to console.log. Przejdźmy zatem do danej grupy logów w CloudWatch w celu podejrzenia dziennika zdarzeń:
Obsługa błędów
Funkcja Lambda używa funkcji wywołania zwrotnego (callback), która jest używana do powiadomienia funkcji Lambda o wystąpieniu błędu lub pomyślnym wykonaniu kodu. Podobnie jak w przypadku logowania, obsługa błędów, będzie się różniła w zależności od wybranego języka. Spójrzmy na poniższy przykład w celu lepszego zrozumienia mechanizmu:
console.log('Loading function');
exports.handler_check = async (event, context, callback) => {
// console.log('Zdarzenie:', JSON.stringify(event, null, 2));
// console.log('Kontekst:', JSON.stringify(context, null, 2));
var error = new Error("Cos poszlo nie tak");
callback(error);
return event.key1; // Echo back the first key value
// throw new Error('Something went wrong');
};
Wynikiem wykonania powyższego kodu będzie poniższy log:
Jesteśmy gotowi na kolejne kroki. Tym razem utworzymy swoją pierwszą funkcję Lambda wykorzystując język C#.