Автоконфигурация в облаке Amazon при помощи Chef-Solo

в 14:27, , рубрики: Amazon Web Services, AWS, chef, автоконфигурация, Облачные вычисления, метки: , ,

Здравствуйте!

В этой статье я хочу рассказать об автоконфигурации в облаке. Для примера запустим ec2-инстанс, на котором «приготовится» WordPress.

Под автоконфигурацией я понимаю автоматическую установку и настройку пакетов, разворачивание приложений. Процесс настройки должен проходить без логина по ssh на конфигурируемый инстанс, буквально одной командой.

Автоконфигурация в облаке Amazon при помощи Chef Solo


Чтобы получить инстанс с установленным WordPress, нам понадобятся Amazon EC2 API Tools и Chef-Solo, а также cookbook-и для него.
Cookbook — это сборник рецептов, по которым Chef-Solo будет “готовить” сервер (конфигурировать его). Нам понадобится несколько таких «поваренных книг», а именно:

Все, кроме wp, — это cookbook-и из комьюнити-репозитория. wp — это простой cookbook, состоящий из одного рецепта, с помощью которого Chef-Solo скачает последнюю версию WordPress из svn, создаст базу данных и установит его. Все нужные cookbook-и я собрал в репозитории на git.
Для запуска Chef-Solo необходимы два конфигурационных файла solo.rb и node.json.

solo.rb:

file_cache_path "/var/chef-solo"
cookbook_path "/var/chef-solo/cookbooks"

Здесь задаётся путь к cookbook-ам.

node.json:

{
  "run_list": [
    "recipe[php::package]",
    "recipe[php::module_mysql]",
    "recipe[apache2]",
    "recipe[apache2::mod_php5]",
    "recipe[subversion]",
    "recipe[mysql::server]",
    "recipe[wp]"
  ],
  "php"    : { "conf_dir" : "/etc/" },
  "mysql"  : { "server_root_password" : "xxxie0AiquaiX",
               "service_name" : "mysqld",
               "platform" : "amazon" }
}

В этом файле указываем какие рецепты запускать и задаем параметры.

Приготовления окончены, можно приступать. Все, что нам осталось, это поднять инстанс командой из набора Amazon EC2 API Tools:

ec2-run-instances {ami} -t {instance shape} -k {key_name},

скачать cookbook-и и конфиги, установить и запустить chef-solo.
Но! Мы договорились, что заходить по ssh на инстанс не будем. Как нам выполнить несколько команд не логинясь на инстанс? Нам поможет очень полезная функция AWS — user-data. Используя её, можно передавать любые данные на инстанс, в том числе и выполнять bash-скрипты.

chef-solo-inst.sh:

#!/bin/bash -x

#write logs
LOGS="/root/autoconf-log.$(date -I)"
exec > $LOGS 2>&1

SOLODIR="/var/chef-solo"
CFGDIR="$SOLODIR/wp-aws-chef-solo"

#install Chef 
rpm -ivh http://opscode-omnitruck-release.s3.amazonaws.com/el/6/x86_64/chef-10.14.4-2.el6.x86_64.rpm

#install git
yum -y install git

#create dir and download cookbooks
mkdir "$SOLODIR"
cd "$SOLODIR"
git clone https://github.com/morkot/wp-aws-chef-solo
git clone https://github.com/morkot/cookbooks

#run chef-solo
chef-solo -c "$CFGDIR"/solo.rb -j "$CFGDIR"/node.json

Теперь мы готовы поднять автоконфигурируемый инстанс:

ec2-run-instances ami-1624987f -t t1.micro -k {your_key_name} --user-data-file chef-solo-inst.sh

где --user-data-file chef-solo-inst.sh — это опция, которая говорит использовать в качестве user-data локально расположенный bash-скрипт.
Через несколько минут можно выполнить команду ec2-describe-instances, скопировать dns-имя поднятого инстанса и открыть в браузере http://{instance_dns_name}/wp, при этом должна открыться страница настройки WordPress:

Автоконфигурация в облаке Amazon при помощи Chef Solo

Если страница недоступна, то что-то пошло не так. Что именно, можно узнать, посмотрев log-файл autoconf-log.{date}, который будет лежать на инстансе в /root директории.

Таким образом, мы получили полностью настроенный и готовый к работе инстанс. Используя chef-рецепты в связке с user-data можно конфигурировать системы любой сложности. Причем, рецепты могут быть кросс-платформенными и с их помощью можно конфигурировать инстансы с разными ОС.

Самое интересное в таком подходе это то, что мы работаем с инфраструктурой, как с кодом (Infrastructure as a Code). Следовательно можно использовать те же методики, что и при разработке ПО (например TDD).

В этой статье показан один из простейших способов автоконфигурации, но можно пойти дальше: сделать образы с уже установленным chef-клиентом, чтобы инстанс, при запуске, настраивался chef-сервером в зависимости от роли. Но это уже тема для следующей статьи.

Автор: morkot

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js