我正在处理多个实例(10个及更多),我想配置它们而不访问每个实例。目前我通过Puppet看,它似乎是我需要的。我已经尝试了两个实例,但没关系,但是我在两个实例中手动安装了puppet,还通过puppet agent
手动从代理发送了证书。有没有办法自动安装puppet并为每个节点发送证书,而不是访问它们?
答案 0 :(得分:1)
您可以使用UserData中的脚本通过安装puppet,配置并运行它来自动配置您的实例(请参阅Running Commands on Your Linux Instance at Launch)。请记住,UserData通常限制为16kb,并且其中的数据存储为base-64编码。
您还可以使用在引导时运行的配置脚本构建自己的AMI,然后使用它从中央服务器下载配置,或者从用户数据中读取(例如curl http://169.254.169.254/latest/user-data | bash -s
)。
例如,我们的Cloudformation模板中已经在我们的主机上安装了配置服务。
"UserData": { "Fn::Base64" : { "Fn::Join" : [ "\n", [
"#!/bin/sh",
"curl -k -u username:password -f -s -o /etc/init.d/ec2 https://scriptserver.example.com/scripts/ec2",
"chmod a+x /etc/init.d/ec2",
"/etc/init.d/ec2 start"] ] } }
理想情况下,'scriptserver'位于同一个VPC中,因为用户名和密码不是非常安全(它们在计算机,脚本服务器以及Cloudformation和EC2服务中未加密存储)。
使用userdata引导所有内容而不是构建AMI的优点是灵活性。您可以更新引导脚本,生成新实例,然后就完成了。缺点是速度,因为每次实例启动时都要等待一切安装和配置(注意Cloudformation超时)和稳定性,因为如果你的脚本从公共存储库安装包(例如apt-get install mysql),那么包可以随时更新,可能会将未经测试的软件引入您的环境。后者的解决方法是从您控制的位置安装软件。