Рубрики
Uncategorized

Краткое введение в AWS Cloumbation

AWS CloudFormation Первоначально опубликовано на HTTPS: //milapneupane.com.np.ru/2019/10/07/a-bref-intRoducki … Помечено с AWS, CloudFation, Iac, Devops.

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.

Это имеет много преимуществ, таких как:

  1. Автоматизация создания ресурсов AWS
  2. Аварийное восстановление
  3. Копирование ресурса из одного места в другое
  4. Код обзора инфраструктуры и многое другое.

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:

  1. Ресурс
  2. Параметр
  3. Выход

Ресурс

В приведенном выше примере ресурс 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

Это вернет массив событий во время создания стека. Стек может иметь различные состояния. Ниже приведено возможное состояние во время создания

  1. Create_in_progress.
  2. Create_complete.
  3. 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»