Я запускаю свое приложение электронной коммерции ruby on rails, работающее на нескольких экземплярах ec2 в производстве. Я не включил автоматическое масштабирование, так как мы делаем непрерывную интеграцию, мы делаем развертывание, когда это необходимо. Я использую шеф-повара по всем причинам. Я пытаюсь понять, как использовать шеф-повар для автоматического развертывания кода на нескольких экземплярах ec2 и ручного вмешательства. Я попытался развернуть код во время начального экземпляра ec2, он работает нормально. Но мой вопрос заключается в том, как мне сделать это в режиме автоматического масштабирования, чтобы экземпляр извлекал последний код либо из github, либо из битового ведра и развертывал себя после обновления пакета и всего остального.
автоматизированное развертывание с использованием шеф-повара
Ответы (1)
Справедливо. Это то, что я делаю, и это отлично работает:
Я создал AMI со следующими настройками:
установить клиент шеф-повара< /а>
Создать каталог
/etc/chef
- Скопируйте
your_company-validator.pem
с рабочей станции шеф-повара в AMI по адресу/etc/chef/validation.pem
. - Создайте
/etc/chef/client.rb
, как показано ниже.
Если вы используете chef-solo, внесите соответствующие изменения.
cat >> /etc/chef/client.rb <EF
log_level :auto
log_location STDOUT
chef_server_url "https://api.opscode.com/organizations/your_company"
validation_client_name "you_company-validator"
EF
Теперь у вас есть все вышеперечисленное, настроенное в AMI для начальной загрузки шеф-повара.
Когда вы запускаете AMI (используя автомасштабирование или любым другим способом), укажите user-data
где в нем будет запускаться шеф-клиент с выбранным вами run_list. Я предоставляю ниже пользовательские данные:
#!/bin/bash
cat > /etc/chef/firstboot.json << EOL
{"run_list": ["recipe[java::oracle]"]}
EOL
chef-client -j /etc/chef/firstboot.json > /tmp/initialize_client.log 2>&1
в основном, я создаю файл .json, в котором я указываю рецепт/роль/run_list, который я хочу запустить. Как только вы предоставите пользовательские данные, они будут выполнены при первой загрузке, и шеф-клиент будет запущен вместе с run_list.
Я думаю, это то, что вы ищете. так что резюмирую:
- Создайте AMI с предустановленным
chef-client, client.rb and validation.pem
- а затем предоставить
user-data
во время запуска экземпляра.
Это отлично работает для меня. Дайте мне знать, если эта настройка доставит вам какие-либо проблемы. Я использую это в течение достаточно долгого времени.
Поэтому, когда я запускаю свой экземпляр с помощью автомасштабирования, он автоматически загружается шеф-поваром вместе с рецептами по моему выбору.
ПРЕДПОЛОЖЕНИЕ: у вас есть все ваши рецепты/роли, созданные на шеф-сервере до того, как вы это сделаете. иначе начальная загрузка в конечном итоге потерпит неудачу.
knife bootstrap
или knife ec2
не поможет, когда вы запускаете экземпляры с помощью автоматического масштабирования AWS.
- person slayedbylucifer; 09.10.2013