Po wakacyjnej przerwie wracamy do tematu deployowania aplikacji na platformie AWS. Przy okazji przygotowywania szablonu funkcji Lambda w języku Typescript wypróbowałem stosunkowo nowe narzędzie - AWS CDK (Cloud Development Kit), który stanowi “proceduralną” alternatywę dla szablonów CloudFormation. <!–more>
Co to jest AWS CDK
Zapewne każdy, kto miał do czynienia z szablonami CloudFormation potwierdzi, że praca z nimi jest daleka od przyjemności i nie należy do najłatwiejszej. Po pierwsze stosowany formaty - JSON albo YAML są przyjazne dla komputera, ale na pewno nie dla człowieka vel programisty. Osiągnięcie pożądanego efektu jest szczególnie wtedy, gdy zależy nam na uniwersalnych szablonach, które można zastosować w różnych scenariuszach, albo na różnych etapach Continous integration. Tworzenie zaawansowanej logiki przy pomocy wewnętrznych funkcji nie jest intuicyjne i dodatkowo utrudnia zrozumienie szablonu.
AWS CDK jest próbą odpowiedzi na te bolączki, gdyż umożliwia definiowanie konfiguracji aplikacji w ulubionym języku programowania. Stosując paradygmat programowania obiektowego konstruuje się aplikację, która może się składać z wielu stosów (odpowiedników stosu CF), a z kolei każdy z nich z wielu zasobów, na przykład funkcji Lambad, roli IAM, kubełka S3, itd. tworząd zwyczajny program gotowy do uruchomienia. AWS CDK interpretuje program w ten sposób, że generuje na jego podstawie szablon(y) CloudFormation, a następnie używa go do skonfigurowania aplikacji.
Jak działa AWS CDK
Metodologia pracy z AWS CDK wygląda następująco:
1. Inicjalizacja projektu poleceniem cdk init app --language=typescript, pamiejąc, że w parametrze --language można też podać inne języki programowania. To polecenie wygeneruje bardzo prosty schemat aplikacji CDK z programem języka Typescript, który następnie możemy uzupełnić o zasoby, które powinny być skonfigurowane. Wygenerowany program reprezentuje aplikację i stosy, które AWS stworzy przy pomocy Cloudformation. Dodatkowo podacza inicjalizacji jest tworzony plik cdk.json, w którym znajduje się referncja do programu tworzącego aplikację.
Zdefiniowanie stosów aplikacji. Zgodnie z konwencją Cloudformation, zasoby w poszczególnych serwisach AWS grupuje się w tak zwane stosy. W CDK stos definiuje się rozszerzając klasę
Stacka następnie definiując w jej konstruktorze poszczególne zasoby. Rzeczywisty program tworzący stos funkcji lambda.Bootstrap projektu poleceniem
cdk bootstrap --profile $PROFIL. CDK w porównaniu do standardowego używania Clodformation, wprowadza pewne uproszczenia. Na przykład przed utworzeniem albo aktualizacją funkcji lambda szablonem CF nową wersję należy wgrać do kubełka S3, który jest wskazany w szablonie. CDK wykonuje ten krok za nas - jeżeli w konfiguracji zasobu wskażemy archiwum ZIP zawierającym handler funkcji to automatycznie wyśle go do kubełka utworzonego w fazie bootstrap. Zasoby tworzone na tym etapie znajdują sie w stosieCDKToolkit.Utworzenie aplikacji poleceniem
cdk deploy --profile $PROFIL. AWS CDK interpretuje program wskazany w plikucdk.jsonw celu wygenerowania szblonu Cloudformation, który jest wysyłany do serwisu AWS. Utworzenie aplikacji sie nie powiedzie, jeżeli użytkownik nie ma wystarczających uprawnień.Usunięcie aplikacji poleceniem
cdk destroy --profile $PROFIL.
Plusy dodatnie, plusy ujemne
AWS CDK stanowi pewne nowum w stosunku do standdardowej metody deployowania aplikacji przy pomocy Cloudformation. Tworzenie konfiguracji jako programu na pierwszy rzut oka wygląda obiecująco. Stosując język programowania i edytor z opcją podpowiedzi składni możemy uniknąć wiele pułapek towarzyszących definiowaniu szablonów jako JSON albo YAML. Z drugiej strony proceduralne definiowanie konfiguracji zachęca do używania zaawansowanej logiki, co może w dłuższej perspektywie utrudniać zrozumienie skryptu.