Eu decidi usar a rota de script personalizada, pois não consegui obter o recurso MetaData para instalar e configurar pacotes com o apt (consulte: link ).
O script bash personalizado faz a instalação funcionar para inicializar a instância do mestre de marionetes. Eu precisava que ele estivesse no formato JSON, então usei este prático script Ruby de link :
#!/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
Isso deve funcionar por enquanto, mas seria bom eventualmente gerenciar os processos de bootstrap como pretendido com o MetaData cfn-init e o apt. Por exemplo, isso ainda não funciona para mim com o apt:
"Resources": {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
"sources" : {
:
},
"packages" : {
:
}
"files" : {
:
}
"services" : {
:
}
}
}
},
"Properties": {
:
}
}
}
UPDATE
Uma solução mais fácil é também usar o Ubuntu CloudInit ( link ) e instalá-lo para você. Meu modelo para instâncias do EC2 Puppet Client é semelhante agora:
"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"
]]}}
}
}
Isso é basicamente o processo de cinta de inicialização do CloudConfig menos a magia runcmd que faz o trabalho funcionar. Eu ainda estou tentando descobrir como obter meus manifestos de marionetes para o mestre de marionetes e atribuído a nós, mas isso deve ajudar qualquer um que esteja usando um Ubuntu UEC AMI.