我查看了Puppet Master CloudForms模板,了解到它正在使用CloudInit烘焙到Amazon Linux AMI中。 但是,我想要使用现有的Ubuntu 11.10服务器映像,并将服务器作为Puppet Master引导。 通过CloudFormation和BootStrapping文档阅读,似乎这是可能的,但没有足够的日志生成在服务器上或堆栈创build时。 创build一个自定义的AMI是否有办法用现有的AMI来做到这一点?
我决定去自定义脚本路由,因为我无法获得元数据资源来安装和configuration包与apt(请参阅: https : //s3.amazonaws.com/cloudformation-examples/BoostrappingApplicationsWithAWSCloudFormation.pdf )。
自定义bash脚本执行安装工作来引导puppet主实例。 我需要它在JSON格式,所以我用这个方便的Ruby脚本从http://allanfeid.com/content/using-amazons-cloudformation-cloud-init-chef-and-fog-automate-infrastructure :
#!/usr/bin/ruby require 'rubygems' require 'json' if ARGV.size != 1 puts "Usage: #{$0} <file>" exit 1 end def escape(string) parse = JSON.parse({ 'json' => string }.to_json) parse['json'] end data = '' File.open(ARGV[0]) {|f| data << f.read} p escape(data) # ./json_encode.rb combined-userdata.txt
这应该现在工作,但最好能够按照cfn-init元数据和apt来pipe理bootstrap处理。 例如,这对我来说依然不起作用:
"Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "sources" : { : }, "packages" : { : } "files" : { : } "services" : { : } } } }, "Properties": { : } } }
UPDATE
一个更简单的解决scheme是也使用Ubuntu CloudInit( https://help.ubuntu.com/community/CloudInit )并让它为您安装软件包。 现在我的EC2 Puppet Client实例的模板如下所示:
"webserver" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "InstanceType": { "Ref" : "InstanceType" }, "SecurityGroups" : [ { "Ref" : "PuppetGroup" }, { "Ref" : "WebServerGroup" } ], "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#cloud-config","\n", "packages:","\n", "- ruby","\n", "- ruby-dev","\n", "- rubygems","\n", "- puppet","\n", "- vim-puppet","\n", "- puppet-el","\n", "puppet:","\n", "conf:","\n", "agent:","\n", "server: ",,"\n", "runcmd:","\n" ]]}} } }
这基本上是CloudConfig引导过程减去运行的魔术,使它的工作。 我仍然在试图弄清楚如何将我的木偶清单下载到puppet master并分配给节点,但是这应该有助于任何使用Ubuntu UEC AMI的人。