Wprowadzenie
Zanim przejdziemy do właściwych przykładów spojrzymy jeszcze na testowanie naszych funkcji. Sam przykład nie będzie idealny ponieważ będzie opierał się o Node.js. Dlaczego? Ponieważ w momencie przygotowania wpisu konsola AWS nie wspiera środowiska uruchomieniowego dla .NET Core - spokojnie, chodzi tylko o podgląd kodu funkcji z poziomu widoku danej Lambdy:
Kod, który przygotujemy w ramach tego wpisu będzie podstawowy i napisanie odpowiednika w C# nie stanowi problemu - chodzi jedynie o wygodę i podgląd kodu z poziomu konsoli AWS.
Proces wywoływania (testowania) naszej funkcji może odbywać się na dwa sposoby:
- z poziomu konsoli AWS;
- przy wykorzystaniu AWS CLI.
Co rozumiem przez powyższy proces? Zdarzenia, o których zaraz będzie mowa, mogą być generowane przez aplikacji użytkowników a nasza funkcja będzie na nie reagowała - zaraz zobaczycie co dokładnie mam na myśli.
Konsola AWS
W pierwszym kroku przygotowujemy funkcję w oparciu o Node.js (w celu edycji kodu z poziomu konsoli) a następnie dodamy najprostsze możliwe logowanie przekazanych parametrów oraz zwrócimy wiadomość powitalną:
exports.handler = async (event) => {
// TODO implement
console.log("Witaj => "+ event.name);
console.log("Kraj => "+ event.country);
const response = {
statusCode: 200,
body: JSON.stringify("Witaj " + event.name + " Miło, że dołączyłeś z " + event.country),
};
return response;
};
W kolejnym kroku dodajemy nowe zdarzenie, gdzie zdefiniujemy pola, które zostaną dodane w trakcie zdarzenia testowego:
Zanim przetestujemy nasze zmiany musimy pamiętać o kliknięciu przycisku Deploy - jeżeli tego nie zrobimy zostanie zwrócony wynik działania kodu poprzedniej wersji naszej funkcji. Klikamy przycisk Test w celu sprawdzenia poprawności działania naszej funkcji:
AWS CLI
A teraz coś dla fanów CLI (do poprawnego działania wymagana jest konfiguracja, którą omówiłem dwa wpisy temu: AWS Lambda - AWS CLI)
Powyższą funkcję możemy również wywołać przy pomocy poniższego polecenia:
aws lambda invoke --function-name lambdaEventTests --log-type Tail --output text --payload file://C:\aws\input.txt C:\aws\output.txt
Zwróćcie uwagę, że podaliśmy ścieżki do dwóch plików, tj. wejścia i wyjścia. Sam plik przyjmie identyczną formę jak nasze zdarzenie testowe z powyższej części, tj. JSON:
{
"name":"Paweł",
"country":"Poland"
}
Po poprawnym wywołaniu polecenia powinniście zobaczyć status 200 mówiący o pomyślnym wywołaniu funkcji:
Dodatkowo w pliku wyjściowym, który zdefiniowaliście, powinniście zobaczyć szczegóły całego zdarzenia:
Tutaj oczywiście nie jesteśmy ograniczeni jedynie do funkcji Lambda. Jeżeli np. chcielibyście wykorzystać AWS CLI do dodania nowych obiektów do bazy danych możecie posłużyć się oficjalną dokumentacją (https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-services.html) w celu sprawdzenia jak powinien wyglądać poprawny payload dla wybranej usługi (formatowanie pod lepszą czytelność):
aws dynamodb put-item \
--table-name Cars \
--item
'{
"car_id":{"N": "8"},
"Brand":{"S": "Pagani"},
"Model":{"S": "Zonda F Roadster"}
}' \
-- return-consumed-capacity TOTAL
Możemy oczywiście poprawić czytelność całego polecenia. Rekordy, które chcemy dodać, zapisujemy w pliku *.json:
{
"car_id":{"N": "8"},
"Brand":{"S": "Pagani"},
"Model":{"S": "Zonda F Roadster"}
}
Z kolei polecenie modyfikujemy w poniższy sposób:
aws dynamodb put-item --table-name Cars --item file://C:\aws\dynamo.json --return-consumed-capacity TOTAL --return-item-collection-metrics SIZE --output text
Wywołanie z poziomu konsoli spowoduje zwrócenie interesujących nas informacji:
Z kolei w bazie danych zobaczymy nowy rekord: