Paweł Łukasiewicz
2022-03-20
Paweł Łukasiewicz
2022-03-20
Udostępnij Udostępnij Kontakt
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: AWS: testowanie 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: AWS: testowanie - nowe zdarzenie

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: testowanie funkcji Lambda

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: AWS: testowanie - status testu

Dodatkowo w pliku wyjściowym, który zdefiniowaliście, powinniście zobaczyć szczegóły całego zdarzenia: AWS: testowanie - plik wyjściowy

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: AWS: testowanie - podsumowanie Z kolei w bazie danych zobaczymy nowy rekord: AWS: testowanie - nowy rekord