Moduły CloudFormation

Moduły CloudFormation

Jak co roku, przed re:Inventem AWS prezentuje sporo nowości. Jedną z nich jest możliwość zdefiniowania i używania częściej niż raz zasobów jako moduły CloudFormation. Na taką możliwość czekałem od dawna.

Przykładowe moduły AWS prezentuje w repozytorium na GitHubie. Nie mogłem sobie jednak darować i spróbowałem napisać bardzo prosty moduł samemu.

Jak to działa?

Potrzebne będzie cli do CloudFormation. Istalacja jest bardzo prosta:

pip install --upgrade cloudformation-cli

Pierwszym krokiem jest inicjalizacja

cfn init

Wybieramy tworzenie modułu, podajemy jego nazwę. W utworzonym katalogu fragments dostajemy przykładowy plik. Ja go usunąłem i utworzyłem własny, prosty szablon z bucketem S3.

AWSTemplateFormatVersion: 2010-09-09
Description: My first CloudFormation module
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      PublicAccessBlockConfiguration:
          BlockPublicAcls: True
          BlockPublicPolicy: True
          IgnorePublicAcls: True
          RestrictPublicBuckets: True
Zanim doczytałem, że na chwilę obecną moduły wspierają tylko jsona utworzyłem zasoby w yamlu. Działa. Może jednak w przypadku wykorzystania produkcyjnego lepiej pozostać przy jsonie.
Można go oczywiście przetestować za pomocą cfn-lint, a jeżeli wszystko jest w porządku wrzucamy nasz moduł do repozytorium

cfn submit

Po dłuższej chwili cli informauje nas o rejestracji modułu

Successfully submitted type. Waiting for registration with token '4980a78b-9d58-4a8f-a988-24cbe045cce8' to complete.
Registration complete.
{'ProgressStatus': 'COMPLETE', 'Description': 'Deployment is currently in DEPLOY_STAGE of status COMPLETED; ', 'TypeArn': 'arn:aws:cloudformation:eu-west-1:xxxxxxxxxxxx:type/module/PrzemekMalak-S3-MyBucket-MODULE', 'TypeVersionArn': 'arn:aws:cloudformation:eu-west-1:xxxxxxxxxxxx:type/module/PrzemekMalak-S3-MyBucket-MODULE/00000001', 'ResponseMetadata': {'RequestId': '471c7767-7006-411e-accf-428ead438f67', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '471c7767-7006-411e-accf-428ead438f67', 'content-type': 'text/xml', 'content-length': '697', 'date': 'Wed, 25 Nov 2020 08:26:49 GMT'}, 'RetryAttempts': 0}}

i jest on widoczny w naszym rejestrze jako prywatny.

Od tej chwili możemy już go użyć w swoich szablonach. Prosty przykład
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Bucket:
    Type: PrzemekMalak::S3::MyBucket::MODULE
Po utworzeniu stacka można podejrzeć między innymi szablon, który był przetwarzany przez CloudFormation
i gotowe.
Comments are closed.