在不使用第三方云configuration服务的情况下,使用EC2进行configurationpipe理的主题是什么常见的模式/策略或白皮书? 具体来说就是如何在启动时configuration和configuration新的实例,代码部署策略等等。
我从几十篇博文中捆绑了我们引导EC2的方法。 尽pipe如此,我们还是使用cloud-init连接实例到我们的Puppet master,Puppet将所有的软件包configuration为这个实例的angular色,而Webistrano (一个Capistrano的GUI)把我们的代码部署到服务器上。
如果你build立自己的机器镜像,你几乎可以build立任何你想要的系统,但是我们想要使用没有安assembly置pipe理软件的官方Ubuntu镜像。
所以,我们使用cloud-init来引导一个实例。 Cloud-init是Ubuntu和Amazon Linux AMI上的一个软件包。 它允许通过EC2的“用户数据”元数据选项将各种数据传递到创build的实例。 通过用户数据传入的数据由cloud-init在实例启动时执行,并且可以采用多种forms,例如shell脚本,cloud-config yaml等。
这篇文章展示了一个使用cloud-init的例子,类似于我们这样做: http : //www.atlanticdynamic.com/you-should-be-using-cloud-init/
这是我们的版本:
#cloud-config apt_update: true apt_upgrade: true packages: - puppet puppet: conf: agent: server: "puppet.example.com" certname: "%i.web.cluster1.eu-west-1.ec2"
一旦实例启动,它将安装Puppet并将其连接到我们的Puppet主控。 一旦你允许它连接到主(签名证书),实例将自动开始configuration自己。 主节点将在nodes.pp文件中使用正则expression式来匹配实例的certname,从而为其分配一个angular色。 主人然后能够发送目录到木偶代理,木偶代理使用它来configuration自己。
开机几分钟后,实例就可以使用了。 如果我们需要将任何代码部署到节点,我们不使用Puppet,而是使用Webistrano。 目前我们手动将节点添加到Webistrano的configuration中,但是我们打算使用MCollective根据节点元数据自动完成。
博托和织物是伟大的这一点。 这里有一篇关于SeoMoz的文章 。 我目前的策略是相似的,但是使用Fabric来在本地运行Amazon shell命令。
EC2实例还能够查询部署期间分配给它们的元数据,这些元数据与自定义AMI结合起来可以非常强大。
(我可以发布的链接数量有限; Boto足够简单到谷歌)