
В этой статье я расскажу об основах CloudFormation, а затем продемонстрирую все его преимущества на примере.
Статья состоит из следующих основных разделов:
Что такое AWS CloudFormation?
AWS CloudFormation — это сервис, который помогает вам моделировать и настраивать ресурсы Amazon Web Services, чтобы вы могли тратить меньше времени на управление ими и больше времени уделять приложениям, которые работают в AWS. Вы создаете шаблон, описывающий все необходимые вам ресурсы AWS (например, экземпляры (инстансы) Amazon EC2 или Amazon RDS DB), а AWS CloudFormation позаботится о предоставлении и настройке данных ресурсов за вас.
Преимущества AWS CloudFormation:
-
Упрощение управления инфраструктурой.
-
Быстрая репликация вашей инфраструктуры.
-
Легко контролировать и отслеживать изменения в вашей инфраструктуре.
Основы AWS CloudFormation
В CloudFormation вы работаете с шаблонами и стеками.
Шаблон: Текстовый файл в формате JSON или YAML, который представляет собой описание ваших ресурсов AWS.
Стек: В CloudFormation вы управляете ресурсами как единым блоком, называемым стеком. Все ресурсы в стеке определяются его шаблоном.
Таким образом, рабочий процесс AWS CloudFormation можно кратко описать с помощью приведенного здесь изображения.
1. Создайте или используйте существующий шаблон
2. Сохраните локально или в S3-бакете
3. Используйте AWS CloudFormation для создания стека на основе вашего шаблона. Он выстроит и сконфигурирует ваши ресурсы стека.Документация Amazon CloudFormation: docs.aws.amazon.com
Шаблон:
Шаблон — это текстовый файл в формате JSON или YAML, который описывает, какие ресурсы содержатся в стеке. Он содержит информацию о каждом ресурсе, его конфигурации и о том, как он может быть связан или зависеть от других ресурсов.
Шаблон может быть разработан двумя методами:
1. UI Designer (дизайнер интерфейсов): Вы можете создать схему ресурсов шаблона с помощью интерфейса drag-and-drop (перетаскивания), а затем отредактировать их детально с помощью встроенного редактора JSON/YAML.
2. Скрипт (Сценарий): Непосредственное создание сценария шаблона в формате JSON или YAML.
Как показано на скриншоте ниже, дизайнер и редактор расположены рядом, бок о бок на консоли, и поэтому вы можете визуализировать свои изменения/обновления по мере их внесения.
Ниже перечислены основные компоненты шаблона:
-
Описание: Позволяет включить произвольные комментарии о вашем шаблоне. (Опционально).
-
Параметры: Параметры позволяют вводить пользовательские значения в шаблон каждый раз при создании или обновлении стека (Опционально).
-
Маппинги (Сопоставления): Коллекция пар «ключ-значение», которые можно использовать для задания значений. (Опционально).
-
Ресурсы: Объявляет ресурсы AWS, которые вы хотите включить в стек.
-
Результаты: Объявляет выходные значения, которые можно импортировать в другие стеки, возвращать в ответ или просматривать на консоли AWS CloudFormation (Опционально).
Пример AWS CloudFormation
AWS CloudFormation можно использовать для быстрой настройки и развертывания очень сложных стеков, что сэкономит вам часы работы вручную и обеспечит возможность повторного использования. В этом разделе я сделаю простой инстанс EC2 и группу безопасности, которую затем назначу инстансу. Образец шаблона по созданию подобной конфигурации (также показан на рисунке ниже) выложен по адресу aws-cloudformation-basic-example.template.
Как только стек будет развернут, ему будут предоставлены все ресурсы. Вы можете получить доступ к инстансу через SSH и выполнить дальнейшую настройку. В качестве опции вы также можете установить приложения, создать файлы и т.д. и выполнить любую пользовательскую настройку инстансов EC2 с помощью шаблона CloudFormation, как описано в разделах ниже:
Конфигурирование ваших инстансов:
CloudFormation также можно использовать для автоматической настройки инстансов после их деплоя в стеке. Можно запускать скрипты, загружать и устанавливать приложения, создавать файлы и т.д.
Чтобы продемонстрировать это, здесь я привожу пример установки и запуска httpd-сервера на инстансе EC2, развернутом в предыдущем примере.
Чтобы настроить инстанс EC2, вы можете ввести команды, которые нужно выполнить при запуске, в разделе UserData свойств ресурса, как показано ниже. Полный шаблон для этого примера — aws-cloudformation-http-install-userdata-only.template.
"Resources" : { "WebServerInstance": { "Type" : "AWS::EC2::Instance", "Properties": { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : ["AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash\n", "yum update -y\n", "mkdir /tmp\n", "mkdir /tmp/amol\n", "yum install httpd php php-mysql stress -y\n", "echo '<html><title>Hello Amol Title</title><body><h1>header H1</h1></body></html>' > /var/www/html/index.html\n", "echo 'i am healthy' > /var/www/html/healthy.html\n", "service httpd start\n", "chkconfig httpd on\n" ]]}} } } }
Лучшим и рекомендуемым способом достижения вышеуказанной функциональности является создание и использование наборов конфигурации (Config Sets). Вы можете создать набор конфигурации для каждой операции, которую собираетесь выполнить над инстансом. Преимущество такого подхода заключается в том, что информация о наборе конфигурации сохраняется в метаданных стека, и доступ к ней можно получить даже после того, как стек будет создан. Вы можете создать столько наборов конфигурации, сколько захотите, и можете не использовать их при запуске инстанса.
Например, можно иметь наборы конфигурации для установки/удаления WordPress, скажем: install_wordpress, uninstall_wordpress:
-
Вы можете вызвать
install_wordpressтолько при запуске инстанса, чтобы настроить и установить WordPress, когда он будет инициализирован в стеке.
-
Если вы хотите повторно инсталлировать WordPress на этот инстанс, то можете обратиться к наборам конфигурации
uninstall_wordpress,install_wordpress(с помощью скрипта cfn-init, описанного позже), чтобы выполнить чистую установку после того, как инстанс уже запущен.
Набор конфигурации может содержать несколько конфигов, и вы можете вызывать их в любом порядке, используя различные комплекты. Допустим, у вас есть конфигурации под названиями «install», «configure», «deploy», «teardown». Тогда вы можете использовать несколько наборов конфигурации для достижения определенных целей, как показано ниже:
"SetupConfigSet" : [ "install", "configure" ], "InitialDeployConfigSet" : [ "install", "configure", "deploy" ], "DeployOnlyConfigSet" : [ "deploy" ], "TeardownConfigSet" : ["teardown"],
В целях демонстрации, в приведенном здесь примере я создам два набора конфигурации с одним конфигом в каждом. Полный шаблон для этого примера находится по адресу aws-cloudformation-httpd-install-using-configset.template.
Здесь я создал два набора конфигурации для нашего инстанса, а именно ‘InstallHttpd’ и ‘UninstallHttpd’, как показано ниже:
Прежде всего, в разделе AWS::CloudFormation::Init определите наборы конфигурации. В каждом наборе InstallHttpd и UninstallHttpd содержится по одному конфигу.
"configSets" : { "InstallHttpd" : [ "install_httpd" ], "UninstallHttpd" : [ "uninstall_httpd" ] }
Теперь определите конфигурацию install_httpd, как показано ниже. В этом конфиге есть шаги по установке httpd-сервера на компьютер. Он также создает основной HTML-файл и обеспечивает запуск httpd-сервера при включении компьютера.
"install_httpd" : { "packages" : { "yum" : { "httpd" : [], "php" : [], "php-mysql" : [], "stress" : [] } }, "files" : { "/var/www/html/healthy.html" : { "content" : "I am healthy" }, "/var/www/html/index.html" : { "content" : "<html><title>Hello Amol Title</title><body><h1>header H1</h1></body></html>" } }, "commands" : { "httpd" : { "command" : "chkconfig httpd on", "ignoreErrors" : "false" } }, "services" : { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } }
Затем определите набор конфигурации uninstall_httpd, как показано ниже. Эта конфигурация состоит из последовательных действий по удалению сервера httpd.
"uninstall_httpd" : { "commands" : { "httpd" : { "command" : "rm -rf /var/www/html", "ignoreErrors" : "false" } } }
После того, как конфиги и наборы конфигурации определены, при запуске инстанса нам необходимо выполнить скрипт cfn-init для вызова набора конфигурации InstallHttpd, который инсталлирует и настроит httpd-сервер на инстансе. Скрипт cfn-init можно использовать для выполнения любого из наборов конфигурации во время или после запуска инстанса.
"UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "yum update aws-cfn-bootstrap\n", "# Install the files and packages from the metadata\n", "/opt/aws/bin/cfn-init ", " –stack", {"Ref":"AWS::StackName" }, " –resource WebServerInstance ", " –configsets InstallHttpd ", " –region", {"Ref":"AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " –stack", {"Ref":"AWS::StackName" }, " –resource WebServerInstance ", " –region", {"Ref":"AWS::Region" }, "\n" ] ] } }
Полный шаблон для этого примера — aws-cloudformation-httpd-install-using-configset.template.
После развертывания стека ваша консоль будет выглядеть так, как показано на скриншоте ниже. Как видите, у вас есть все события, входные параметры, предоставленные при создании стека, ресурсы, а также сценарий шаблона. В выводах я добавил ссылку на веб-страницу, размещенную на сервере, поэтому если вы перейдете по ней (или, в данном случае, кликните на сгенерированный URL), то попадете на HTML-страницу.

Основы AWS CloudFormation
Если вы используете данный шаблон, то он инсталлирует httpd и настроит ваш веб-сервер при запуске, как только стек будет создан.
Теперь, если вы хотите удалить httpd, вы можете подключиться к инстансу по SSH и выполнить команду (с root-правами):
/opt/aws/bin/cfn-init --stack [stack name/id] --resource WebServerInstance --configsets UninstallHttpd --region [region where stack is deployed]
Чтобы снова установить и настроить httpd с той же конфигурацией при запуске, выполните команду:
/opt/aws/bin/cfn-init --stack [stack name/id] --resource WebServerInstance --configsets InstallHttpd--region [region where stack is deployed]
Вы можете увидеть то, что происходит, ниже:
На этом пока все. Надеюсь, вам понравился этот пост, и он был полезен для вас! 🙂
В завершение хочу порекомендовать бесплатный вебинар: «Mock интервью со студентом на позицию cloud solution architect». На вебинаре обсудим:
-
Страшное слово интервью и как переставить его бояться :).
-
Карьерные путь SA, CSA, teamlead, engineering manager, director of engineering.
-
Из каких этапов состоит интервью.
-
Какие методики используются для ответа на вопросы.
-
Обсудим что такое Soft skills и Hard skills.
-
Проведем симуляцию интервью.
ссылка на оригинал статьи https://habr.com/ru/articles/734496/
Добавить комментарий