1

我正在运行我的 ruby​​ on rails 电子商务应用程序,该应用程序在生产中的几个 ec2 实例上运行。自从我们进行持续集成以来,我还没有启用自动缩放,我们会在需要时进行部署。我出于所有原因使用厨师。我试图弄清楚如何使用 chef 自动和手动干预将代码部署到多个 ec2 实例。我尝试在初始 ec2 实例期间部署代码工作正常。但我的问题是如何在自动缩放模式下执行此操作,以便实例从 github 或位存储桶中提取最新代码,并在捆绑更新等之后部署它。

4

1 回答 1

6

很公平。这就是我所做的,它工作正常:

我创建了一个具有以下设置的 AMI:

  1. 安装厨师客户端

  2. 创建/etc/chef目录

  3. 从厨师工作站复制your_company-validator.pem到 AMI /etc/chef/validation.pem
  4. 创建/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 将在其中运行 chef-client 的位置。我提供以下用户数据:

#!/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 文件,我将在其中指定我想要运行的 recipe/role/run_list。提供用户数据后,它将在第一次启动时执行,并且 chef-client 将与 run_list 一起运行。

我想这就是你要找的。总结一下:

  1. 创建预安装的 AMIchef-client, client.rb and validation.pem
  2. 然后user-data在实例启动时提供。

这对我来说非常有效。如果此设置给您带来任何麻烦,请告诉我。我已经使用这个很长一段时间了。

因此,当我使用 autscaling 启动我的实例时,它会自动与我选择的食谱一起进行厨师引导。

假设:在执行此操作之前,您已在厨师服务器上创建了所有食谱/角色。否则引导程序最终将失败。

于 2013-10-07T11:41:13.407 回答