AWS CloudFormation предоставляет разработчикам и системным администраторам простой способ создания и управления наборам ресурсов AWS.
Для CloudFormation можно использовать наборы готовых шаблонов, создать свои вручную или с помощью визуализации в CloudFormation Designer, либо использовать утилиты типа CloudFormer для создания шаблона из уже готовой инфрастуктуры.
Вам так же не придется беспокоится по поводу порядка выполнения создания сервисов AWS или вникать в тонкости зависимостей различных частей вашего проекта.
После того, как проект уже развернут — вы с легкостью можете модифицировать каждую службу и даже использовать контроль версий, как это происходит с кодом приложений.
Вы можете деплоить и обновлять ваш шаблон и связанные с ним коллекции (или «stack«) используя AWS Management Console, AWS Command Line Interface или API. Привсе этом вы оплачиваете только стоимость ресурсов — использование самого CloudFormation бесплатно.
Содержание
Шаблоны CloudFormation
Мы поднимем простой стек ресурсов для WordPress используя готовый шаблон от AWS, который создаст EC2 инстанс для самого блога и MySQL базу данных для него, используя сервис AWSRDS.
Кроме того — будет создана Security Group для управления доступом к этим ресурсам.
Каждый шаблон представляет собой JSON-файл, в котором описываются все ресурсы, необходимые для создания стека в AWS. В шаблоне WordPress в него входят:
Description — комментарии или описание шаблона (опционально);
Parameters — для создания и передачи переменных при создании стека из шаблона (опционально);
Mappings — для создания наборов key { name: value }, которые будут использоваться для определения параметров стека(опционально);
Resources — наиболее важная секция шаблона, описывающая собственно входящие в стек ресурсы AWS (обязательно);
Outputs — содержит заданные значения для использования в консоли AWS или возвращаемые стеком.
Каждый ресурс в шаблоне описывается отдельным блоком (секцией). Для примера возьмем описание ресурса AWS RDS, который будет использоваться далее при создании стека под WordPress:
А для передачи параметров этого ресурса — их можно описать в секции Parameters. Тут можно указать имя пользователя, пароли, URL-ы и другие специфичные для каждого ресурса или стека настройки. Например, для ресурсаAWS RDS блок его параметров выглядит так:
"Parameters" : {
...
"DBClass" : {
"Default" : "db.t1.micro",
"Description" : "Database instance class",
"Type" : "String",
"AllowedValues" : [ "db.t1.micro", "db.t2.micro", "db.t2.small", "db.t2.medium", "db.m3.medium", "db.m3.large", "db.m3.xlarge", "db.m3.2xlarge" ],
"ConstraintDescription" : "must select a valid database instance type."
},
"DBName" : {
"Default": "wordpress",
"Description" : "The WordPress database name",
"Type": "String",
"MinLength": "1",
"MaxLength": "64",
"AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*",
"ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters."
},
"DBUsername" : {
"Default": "admin",
"NoEcho": "true",
"Description" : "The WordPress database admin account username",
"Type": "String",
"MinLength": "1",
"MaxLength": "16",
"AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*",
"ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters."
},
"DBPassword" : {
"Default": "password",
"NoEcho": "true",
"Description" : "The WordPress database admin account password",
"Type": "String",
"MinLength": "8",
"MaxLength": "41",
"AllowedPattern" : "[a-zA-Z0-9]*",
"ConstraintDescription" : "must contain only alphanumeric characters."
},
В описании ресурсаRDS имеется запись, содержащая ссылку на этот параметр:
...
"DBName" : { "Ref" : "DBName" },
...
В результате вызова функциии Ref — из секции Parameters будет вызван блок, в котором указывается имя базы:
...
"DBName" : {
"Default": "wordpress",
...
Создание стека
Для авторизации на сервисах — CloudFormation использует поле KeyName из секции Resources, которое должно содержать имя ключа по которому имеется доступ к реусрсам для их создания.
Создаем ключ:
Переходим в панель управления AWS > CloudFormation и жмем Create New Stack:
Указываем URL к файлу шаблона:
Можно просмотреть создаваемую инфраструктуру в CloudFormation Designer:
Нажимаем Next, и следующим шагом проверяем и при необходимости изменяем поля шаблона из секции Parameters:
Далее можно добавить теги и уведомления:
Проверяем все настройки:
Тут же можно посмотреть примерную стоимость стека, нажав на Cost:
Если все ОК — жмем Create:
Ожидаем CREATE_COMPLETE для всех задач. Создание стека для WordPress заняло около 20 минут:
Переходим в Outputs, и находим URL нашего блога:
Переходим по нему, и продолжаем установку WP как обычно:
Описание всех команд для CloudFormation в AWS CLI можно найти тут>>>.