使用厨师自动部署

Jee*_*gre 1 ruby ubuntu amazon-web-services chef-infra

我在生产中运行几个ec2实例的rails电子商务应用程序上运行我的ruby.我没有启用自动扩展,因为我们进行持续集成,我们在需要时进行部署.我使用厨师的所有原因.我试图找出如何使用厨师自动和自动干预多个ec2实例的代码.我试着在最初的ec2实例中部署代码工作正常.但我的问题是如何在自动缩放模式下执行此操作,以便实例从github或bit bucket中提取最新代码,并在bundle更新后部署itseld.

sla*_*fer 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
Run Code Online (Sandbox Code Playgroud)

现在,您已在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
Run Code Online (Sandbox Code Playgroud)

基本上,我正在创建一个.json文件,我将在其中指定我想要运行的配方/角色/ run_list.一旦提供了用户数据,它将在第一次启动时执行,而chef-client将与run_list一起运行.

我想这就是你要找的东西.总结一下:

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

这对我来说非常适合.如果这个设置给你带来任何麻烦,请告诉我.我已经用了很长时间了.

因此,当我使用autscaling启动我的实例时,它会自动获得chef-bootstrapped以及我选择的食谱.

假设:在执行此操作之前,您已在chef-server上创建了所有配方/角色.否则引导程序最终会失败.

  • 我不明白为什么要预先安装厨师创建AMI ..."knife bootstrap"命令将安装chef并自动配置/ etc/chef目录.更好的是你可以使用刀的ec2插件并另外旋转VM. (2认同)
  • 当你通过AWS自动调节来启动实例时,@ gun O'Connor,`knife bootstrap`或`knife ec2`插件没有任何帮助. (2认同)