Podstawy AWS Cloudformation


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

  1. 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.
  2. Opis (opcjonalny) - opis szablonu,
  3. 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 ;).

Zobacz też