bootstrap cloudformation com servidor fantoche e ubuntu

2

Eu examinei o Modelo de Cloudformação do Puppet Master e entendi que ele está usando o CloudInit integrado ao Amazon Linux AMI. No entanto, gostaria de usar uma imagem existente do servidor Ubuntu 11.10 e ainda inicializar o servidor como um Puppet Master. Lendo pela documentação do CloudFormation e BootStrapping, parece que isso é possível, mas não são gerados registros adequados no servidor ou quando a pilha é criada. Além de criar uma AMI personalizada, há uma maneira de fazer isso com uma AMI existente?

    
por upbeat.linux 06.11.2011 / 00:07

1 resposta

4

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.

    
por 06.11.2011 / 22:08