CloudFormation part 1 Flashcards
Stack Policies
Зачем нужны?
В каком формате объявлены?
Чем отличаются от обычный resource-based policy?
Чтобы защитить некоторые ресурсы от недопустимого обновления
В формате JSON с точностью как обычные resource-based policy - только для CloudFormation Stack’а
Отличаются только тем, что пока их (Stack Policies) никто ещё НЕ объявил, то обновлять (модифицировать) стэк могут ВСЕ
+ когда создаётся Stack Policy по-умолчанию (“пустая”), то она наоборот ЗАПРЕЩАЕТ ВСЕМ модифицировать (нужно явно указать, что разрешено)
DeletionPolicy
Какие значения она может иметь?
Она относится к целому стэку?
Где она объявляется и в виде чего?
Что оно обозначает?
Какое значение имеет по-умолчанию?
Почему так легко забыть, что это такое?
Может иметь значения Delete / Retain / Snapshot
Относится к конкретному ресурсу с стэке (у каждого ресурса в стэке есть своя Deletion Policy)
Объявляется в yaml файле там же, где все поля ресурса в виде поля “DeletionPolicy”
Обозначает, будет ли ресурс удалён при удалении стэка (или останется или удалится с предварительным созданием snapshot’а)
По-умолчанию имеет значение “Delete”
Пока в yaml template’е явно НЕ указано другое значение, то будет по-умолчанию “Delete”
Поэтому легко забыть, что она вообще есть (по-умолчанию при удалении стэка все его ресурсы, имеющие поле Delete, будут удалены)
В чём особенность S3 bucket’ов в плане удаления через CloudFormation?
Как решить эту проблему?
Пока в бакете есть S3 objects, то он НЕ будет удалён (даже если DeletionPolicy: Delete)
- предварительно удалить все объекты в S3 bucket’е (опустошить бакет)
- создать Custom CloudFormation ресурс через Лямбду и использовать его вместо S3
Для каких ресурсов доступен DeletionPolicy: Snapshot?
Только для определённых
Базы данных, EBS volumes, ElastiCache, кластеры с данными
Что такое Termination Protection?
Чем она отличается от DeletionPolicy?
Чем она отличается от StackPolicy?
Termination Protection - это булевская property, которую можно активировать для защиты от случайного удаления стэка.
Тогда для удаления стэка нужно иметь права на
- отключение этой TerminationProtection
- удаление самого стэка
DeletionPolicy указывается для отдельных ресурсов, а НЕ для стэка целиком. И указывает, что произойдёт с ресурсом при удалении стэка. А НЕ препятствует удалению стэка.
StackPolicy указывает, кто может модифицировать стэк. А НЕ препятствует удалению стэка.
Service Role
Что это такое?
Как использовать в рамках работы с CloudFormation?
- сам user НЕ должен иметь право на создание AWS ресурсов (S3, EC2, etc)
- вместо этого, user должен создать специальную роль в сервисе
IAM
- и передать эту роль сервисуCloudFormation
Такая роль называется Service Role
Она создаётся для сервиса, НЕ для юзера.
А в данном случае - именно для сервиса CloudFormation
Эта Service Role содержит права на создание AWS ресурсов (S3, EC2, etc)
- user должен иметь ТОЛЬКО право передать эту роль (
iam:PassRole
) сервисуCloudFormation
- а сервис
CloudFormation
будет выполнять создание ресурсов согласно полученной роли
Capabilities CAPABILITY_NAMED_IAM
, CAPABILITY_IAM
, CAPABILITY_AUTO_EXPAND
Зачем они нужны в CloudFormation?
Зачем нужна каждая из них?
Что значит “InsufficientCapabilitiesException”?
Capability - птичка под пунктом “я понимаю, что делаю и к чему это может привести”
-
CAPABILITY_NAMED_IAM
иCAPABILITY_IAM
- значит CloudFormation при применении стэка внесёт изменения в IAM (roles, users, policies, groups, etc) -
CAPABILITY_AUTO_EXPAND
- значит CloudFormation перед применением будет ДИНАМИЧЕСКИ расширен (expanded) контентом используемого Nested Stack’а
“InsufficientCapabilitiesException” - этот exception происходит, когда CloudFormation НЕ передали нужную Capability для выполнения операции
Custom Resources
Для каких целей используются?
Как связано с S3 bucket?
Какой синтаксис объявления?
Через какие сервисы обычно реализуют Custom Resource?
Что за поле ServiceToken?
- объявить (те немногочисленные) AWS ресурсы, которые пока ещё НЕ поддерживает CloudFormation
- объявить НЕ AWS ресурсы (on-premises, 3-rd party)
- объявить кастомный скрипт (через Лямбду), который будет запущен во время создания / обновления / удаления
Use-case с Лямбдой и S3 bucket’ом
Например, кастомный скрипт (реализованный в виде Лямбды) очистит содержимое S3 bucket’а перед удалением этого S3 bucket’а
AWS::CloudFormation::CustomResource или Custom::MyCustomResourceTypeName
Через Lambda или (редко) через SNS
Поле ServiceToken содержит ARN Лямбды/Топика
Какие способы есть, чтобы задать порядок создания ресурсов?
А какие - удаления?
- DependsOn атрибут
- !Ref или !GetAtt intrinsic функции
Удаление соблюдает те же конструкции, что и создание, но в ОБРАТНОМ порядке
AppConfig
Что позволяет сделать?
В чём удобство использования?
Что может выступать в роли App?
Что включает в себя Config?
Где может храниться Config?
Как можно валидировать Config?
AWS AppConfig
позволяет содержать конфигурацию приложения в отдельном месте.
Валидировать и деплоить Dynamic Configurations
,
изменяя конфигурацию приложения БЕЗ рестарта приложения.
Приложением может выступать EC2, Lambda, ECS, EKS, etc
Config может включать фиче-флаги, block lists
Config может храниться в
- SSM Parameter Store
- SSM Documents
- S3 bucket
2 способа валидировать конфигурации в AppConfig
- Соответствие JSON schema
- Lambda функция проверит соответствие семантике (более гибко)