AWS CDK - Cloudformation inaczej


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ę.

  1. 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ę Stack a następnie definiując w jej konstruktorze poszczególne zasoby. Rzeczywisty program tworzący stos funkcji lambda.

  2. 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 stosie CDKToolkit.

  3. Utworzenie aplikacji poleceniem cdk deploy --profile $PROFIL. AWS CDK interpretuje program wskazany w pliku cdk.json w 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ń.

  4. 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.

Zobacz też