AWS CloudFormation
Первоначально опубликовано на https://milapneupane.com.np.ru/2019/10/07/a-bref-introduction-to-aws-cloudformation.
AWS CloudFation — это инструмент для записи инфраструктуры в качестве кода (IAC). Любые виды ресурсов AWS, такие как VPCS, EC2, S3, RDS или любой другой вид ресурсов, могут быть созданы с помощью AWS CloudFation.
Это имеет много преимуществ, таких как:
- Автоматизация создания ресурсов AWS
- Аварийное восстановление
- Копирование ресурса из одного места в другое
- Код обзора инфраструктуры и многое другое.
AWS CloudFormation шаблон
Облачная информация использует стеки для создания ресурсов. Стек может содержать один или несколько ресурсов. Давайте посмотрим в простое создание DynamOdb с шаблоном CAVS CloudFormation:
// dynamodb-cloudformation.yaml AWSTemplateFormatVersion: "2010-09-09" Resources: userDynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: "Id" AttributeType: "S" KeySchema: - AttributeName: "Id" KeyType: "HASH" ProvisionedThroughput: ReadCapacityUnits: "5" WriteCapacityUnits: "5" TableName: "users"
Вышеуказанный шаблон используется для создания таблицы dynamodb. Он содержит ключ awstemplateFormatVersion, который используется для описания версии шаблона CloudFation. Это просто для идентификации версии шаблона облачности. Не пишите случайную дату там. Это предопределенная версия облачности. AWS CloudFormation написан в Ямл формат. Он имеет три важных ключей верхнего уровня рядом с awstemplateFormatVersion:
- Ресурс
- Параметр
- Выход
Ресурс
В приведенном выше примере ресурс Dynamodb определяется внутри клавиши ресурса. Ресурс всегда имеет две клавиши:
Тип: Тип ресурса. В нашем случае это динамодб Итак, мы поддерживаем ценность как AWS:: Dynamodb:: Table.
Свойства: Свойства определяют конфигурацию и варианты для ресурса. Такие как прочитанная емкость, первичный ключ, имя таблицы и т. Д.
Теперь давайте создадим стек CloudFormation AWS с вышеупомянутым шаблоном, используя следующую команду:
> aws cloudformation create-stack \ --template-body file://dynamodb-cloudformation.yaml \ --stack-name dynamodb-table
Это начнет процесс создания стека. Это займет некоторое время до завершения. Вы можете проверить прогресс создания стека, используя следующую команду:
> aws cloudformation describe-stack-events \ --stack-name dynamodb-table
Это вернет массив событий во время создания стека. Стек может иметь различные состояния. Ниже приведено возможное состояние во время создания
- Create_in_progress.
- Create_complete.
- Create_failed.
Вы можете сохранить опрос, используя Explay-Stack-Events, чтобы увидеть, будет ли создание стека завершено или вы можете использовать команду ждать, которая будет дождаться до тех пор, пока стек не будет завершен или не удален:
> aws cloudformation wait stack-create-complete \ --stack-name dynamodb-table
Если вам не нравится использование команд CLI, вы можете просто перейти к консоли AWS в своем браузере, перейдите к службе CloudFation и проверьте состояние стопки облака оттуда.
Параметры
Параметры в шаблоне делают стек настраиваемый. С параметрами вы можете предоставить вход и использовать тот же шаблон для обеспечения различных конфигураций для создания стека. Давайте будем использовать вышеупомянутый шаблон и сделать его настраиваемым и создавать два разных таблицы динамодб, используя один и тот же шаблон:
// dynamodb-cloudformation.yaml AWSTemplateFormatVersion: "2010-09-09" Parameters: TableName: Description: Name of the table Type: String Resources: userDynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: "Id" AttributeType: "S" KeySchema: - AttributeName: "Id" KeyType: "HASH" ProvisionedThroughput: ReadCapacityUnits: "5" WriteCapacityUnits: "5" TableName: !Ref TableName
В приведенном выше примере таблицы могут быть предоставлены путем передачи его в качестве параметра со следующей командой:
> aws cloudformation create-stack \ --template-body file://dynamodb-cloudformation.yaml \ --stack-name dynamodb-table \ --parameters ParameterKey=TableName,ParameterValue=users
Вы можете использовать Действительно Ref Ключевое слово для ссылки Параметр, переданный для имени таблицы или любых других параметров.
Давайте добавим еще несколько параметров здесь:
// dynamodb-cloudformation.yaml AWSTemplateFormatVersion: "2010-09-09" Parameters: ReadCapacityUnits: Description: Name of the table Type: String Default: '5' MinValue: '1' MaxValue: '20' ConstraintDescription: must be between MinValue and MaxValue WriteCapacityUnits: Description: Name of the table Type: String Default: '5' MinValue: '1' MaxValue: '20' ConstraintDescription: must be between MinValue and MaxValue TableName: Description: Name of the table Type: String Resources: .....
Параметры в ограничениях поддержки шаблонов и значений по умолчанию. Ограничение в ограничениях минимального значения и максимальное значение для емкости до 1 — 20. Если параметр не прилагается к нему не использует 5 по умолчанию.
Мы можем создать стек еще несколькими параметрами:
> aws cloudformation create-stack \ --template-body file://dynamodb-cloudformation.yaml \ --stack-name dynamodb-table \ --parameters ParameterKey=TableName,ParameterValue=users \ ParameterKey=WriteCapacityUnits,ParameterValue=20 \ ParameterKey=ReadCapacityUnits,ParameterValue=10 \
С более и более параметром команда для создания стека становится больше. Мы можем перемещать параметры в файл также.
Создайте файл параметра:
// paramters.json [ { "ParameterKey": "TableName", "ParameterValue": "users" }, { "ParameterKey": "WriteCapacityUnits", "ParameterValue": "20" }, { "ParameterKey": "ReadCapacityUnits", "ParameterValue": "10" } ]
Теперь используйте файл для создания стека:
> aws cloudformation create-stack \ --template-body file://dynamodb-cloudformation.yaml \ --stack-name dynamodb-table \ --parameters file:///parameters.json
Выходы
Третья часть облачноформации AWS — это выходной раздел. Этот раздел содержит значение, которое вы можете экспортировать и можно использовать другой шаблоном облака, импортируя его.
Вы можете экспортировать ARN Dynamodb, образующую этот шаблон и использовать его в другом шаблоне. Давайте экспортируем Dynamodb ARN и импортируйте его в другой шаблон:
// dynamodb-cloudformation.yaml AWSTemplateFormatVersion: "2010-09-09" Resources: userDynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: "Id" AttributeType: "S" KeySchema: - AttributeName: "Id" KeyType: "HASH" ProvisionedThroughput: ReadCapacityUnits: "5" WriteCapacityUnits: "5" TableName: "users" Outputs: DynamoDbArn: Value: !GetAtt userDynamoDBTable.Arn Description: Arn of the user dynamodb Export: Name: DynamoDBArn
Теперь мы можем импортировать вывод в другой шаблон облака, используя значение экспорта с помощью внутренней функции FN:: ImportValue.
Fn::ImportValue: DynamoDBArn
Внутренние функции
Шаблон области облака поддерживает различные типы внутренние функции Отказ В приведенных выше примерах мы использовали Действительно Ref обратиться к параметру. ! Ref является одной из внутренних функций. Есть несколько видов внутренних функций. Давайте посмотрим на пару из них:
Fn:: Присоединяйтесь
Он присоединяется к набору значений, разделенных указанным разделителем:
TableName: Fn::Join: [ :, [ !Ref TableName, "table"] ]
Название таблицы теперь будет пользователем: таблица.
FN:: GetATT.
Эта функция может использоваться для получения определенных атрибутов ресурса. Если вы хотите, чтобы Arn из недавно созданного Dynamodb вы можете использовать эту функцию:
Fn::GetAtt: [ userDynamoDBTable, Arn ]
Обновление/удаление стека
Вы можете удалить ресурсы, созданные стеком облака, используя следующую команду:
> aws cloudformation delete-stack \ --stack-name dynamodb-table
Это удалит ресурсы, присутствующие в стеке облачного формата AWS
Если вы хотите обновить ресурсы, просто измените шаблон и вызовите команду Stack Update:
> aws cloudformation update-stack \ --template-body file://dynamodb-cloudformation.yaml \ --stack-name dynamodb-table --parameters file:///parameters.json
Пользовательская облачность
AWS CloudFormation поддерживает большую часть создания ресурсов AWS. В некоторых случаях, когда введен новый сервис или когда у нас есть какая-то пользовательская облачность, возможно, не имеет поддержки для него. Для таких случаев мы можем создавать пользовательскую облачность AWS.
Пользовательская облачность может быть создана с помощью AWS Lambda. Лямбда нужно обрабатывать создание ресурсов, удаление и обновление. Мы узнаем больше о пользовательской облачности в моем следующем блоге:
A guide to AWS Custom Cloudformation resource
AWS CloudFormation — это мощный инструмент для предоставления ресурсов AWS с инфраструктурой в качестве кода. Использование AWS CloudFormation помогает построить крупные приложения с хорошим аварийным восстановлением на месте.
Заинтересованы в изучении развертывания AWS ECS, используя облачность? Узнайте больше об этом подробно здесь:
How to deploy a docker container with AWS ECS using cloudformation
Оригинал: «https://dev.to/milapneupane/a-brief-introduction-to-aws-cloudformation-25pm»