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

от автора

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

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

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


Чтобы получить инстанс с установленным 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:

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

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

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

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

ссылка на оригинал статьи http://habrahabr.ru/post/155655/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *