Wraz ze wzrastającą ilością zasobów, które utrzymujemy w ramach Amazon AWS pojawia się problem zarządzania nimi i utrzymywania w dobrym stanie. Konsola AWS dostępna przez przeglądarkę oferuje niezłą funkcjonalność, choć bywa mało intuicyjna, jednak nie jest to rozwiązanie, w szczególności gdy planujemy zautomatyzować naszą pracę w tym zakresie, na przykład wykorzystując systemy CI / CD. Wtedy pozostaje nam zastosować AWS API i implementacja zadań w wybranym języku programowania. Jako alternatywę można wykorzystać inną usługę AWS - Cloudformation, gdzie w sposób deklaratywny, przy pomocy szablonów zarządza się zasobami i definiuje ich właściwości. W tym artykule poruszę podstawowe zagadnienia związane z Cloudformation, które będą następnie podstawą do dyskusji innych funkcjonalności
Najważniejsze pojęcia
Szablon (Template)
Plik tekstowy zapisany w formacie JSON albo YAML używany przez Cloudformation do utworzenia zasobów w ramach dostępnych usług. Na przykład przy pomocy szablonu można zdefiniować kubełek S3 wraz z funkcją Lambda, która będzie odczytywała jego zawartość.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "SNS Topc",
"Resources" : {
"ReportEmailTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"TopicName": "Powiadomienia",
"Subscription": [
{
"Endpoint": "kontakt@example.com",
"Protocol": "email"
}
]
}
}
}
}
Powyższy przykład przedstawia konfigurację topicu SNS z subskrypcją, która powoduje, że każda przychodząca wiadomość zostaje wysłana na adres kontakt@example.com
.
Struktura szablonu Cloudformation w najprostszej wersji jest następująca
- AWSTemplateFormatVersion (opcjonalny) - wersja szablonu Cloudformation, do której nawiązuje. Wersja określa możliwości szablonu. Jedyną dozwoloną obecnie wartością jest
2010-09-09
. - Opis (opcjonalny) - opis szablonu,
- Resources - obiekt JSON określający wszystkie zasoby, które są tworzone danym szablonem. Każdy zasób posiada niepowtarzalny identyfikator (klucz), typ zasobu i zbiór właściwości. Każdy z zasobów, które można utworzyć z pomocą Cloudformation posiada ściśle określny zbiór właściwości, które można zdefiniować.
Pełna struktura szablonu Cloudformation jest opisana w dokumentacji AWS.
Stos (Stack)
Każdemu szablonowi, który tworzy powiązane zasoby odpowiada stos widoczny w serwisie Cloudformation. Stosami można zarządzać - tworzyć nowe, aktualizować albo usuwać.
Zbiór zmian (Changeset)
W celu lepszego zarządzania zasobami przy pomocy Cloudformation i uniknięcia nieprzyjemnych niespodzianek (na przykład usunięcia bazy danych podczas aktualizacji stosu) można wykorzystać zbiór zmian, który generuje Cloudformation w momencie, gdy podajemy nową wersję szablonu.
Cloudformation budzi różne emocje, ale z doświadczenia mogę napisać, że ludzie podchodzą do niego bez entuzjazmu. Osobiście preferuję format JSON, innych przekonuje bardziej YAML, ale nie zmienia to faktu, że definiowanie zasobów wymaga pewne biegłości w posługiwaniu się dokumentacją. Tym bardziej, że bywa ona miejscami oszczędna w szczegółach ;).