В этой статье я хочу рассказать об автоконфигурации в облаке. Для примера запустим 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/
Добавить комментарий