Por que a formação da nuvem aws não instala os pacotes que eu especifico?

13

Sou muito novo nos serviços da AWS. Estou tentando usar a formação em nuvem da AWS e criei um modelo. O modelo é livre de erros e eu posso criar máquinas usando isso.

Mas eu adicionei algumas configurações no template de tal forma que ele instala o tomcat, git e outras coisas durante a inicialização. Mas isso não acontece comigo.

Aqui está uma parte do código que usei para instalar o tomcat:

"Resources": {
    "Tomcat": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "AWS::CloudFormation::Init": {
                "config": {
                    "packages": {
                        "apt": {
                            "tomcat6": [],
                            "git": [],
                        }
                    }
                }
            }
        },

Mas quando eu entro na máquina, nem tomcat nem git foram instalados!

Obrigado antecipadamente.

    
por batman 03.01.2013 / 09:17

4 respostas

22

Eu acredito que o seu problema aqui é a confusão em torno de que o cloud-init não é o mesmo que o cfn-init.

  • cloud-init é a ferramenta que começou como parte das AMIs do Ubuntu AWS que permitem a interpretação do usuário do EC2 -dados de dados dos metadados da instância. O Amazon Linux também adotou essa ferramenta e a incorporou à sua AMI.

  • cfn-init faz parte de um conjunto de ferramentas diferente chamado Scripts auxiliares do CloudFormation criados pela AWS para Amazon Linux que podem ler uma seção adicional chamada Metadata no seu modelo do CloudFormation.

Assim, as AMIs do Ubuntu e do Amazon Linux têm as ferramentas cloud-init pré-instaladas para acessar os dados do usuário, mas somente o Amazon Linux tem o Scripts auxiliares do CloudFormation pré-instalados, por exemplo cfn-init para acessar os metadados do CloudFormation.

No entanto, a AWS distribui pacotes que você pode use para ler os metadados do CloudFormation. Especificamente, veja este modelo para saber como você pode use um script de dados do usuário cloud-init para instalar o python-setuptools, faça o download dos Scripts Auxiliares do CloudFormation, instale-os usando easy_install e invoque o cfn-init.

Nota: Existem outras distribuições ou AMIs que podem suportar cloud-init ou cfn-init, mas estou apenas cobrindo os casos gerais aqui.

    
por 29.07.2013 / 16:57
11

Você precisa chamar o cfn-init ( link ) dentro do UserData propriedade da instância:

"Resources": {
    "Tomcat": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "AWS::CloudFormation::Init": {
                "config": {
                    "packages": {
                        "apt": {
                            "tomcat6": [],
                            "git": [],
                        }
                    }
                }
            }
        },
        "Properties": {
            "UserData": {"Fn::Base64": {"Fn::Join": ["", [
                 "#!/bin/bash\n"
                 "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" },
                 "    -r Tomcat",
                 "    --region ", { "Ref" : "AWS::Region" }, "\n",
            ]]}}
        }

A propriedade UserData é codificada em Base64 e permite especificar um script que deve ser executado no lançamento da instância. Aqui você pode chamar o cfn-init, que lerá o CloudFormation :: Init Metadata e configurará tudo que estiver especificado lá.

Além disso, ao criar a pilha CF, você pode querer entrar em configurações avançadas na segunda página (depois de fornecer os parâmetros) e certificar-se de que Rollback on error esteja definido como "No". Dessa forma, se o script cfn-init falhar por alguma razão, você pode usar ssh na instância e verificar o arquivo /var/log/cfn-init.log para mais informações.

    
por 01.02.2014 / 10:55
1

A resposta acima está correta. Mas você também deve certificar-se de ter instalado com êxito os scripts auxiliares do CloudFormation. Por favor, siga para link para detalhes de instalação.

    
por 05.09.2014 / 13:56
-2
    "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
      "#!/bin/bash\n",
      "export DEBIAN_FRONTEND=noninteractive\n",
      "apt-get update && apt-get upgrade -y\n",
      "apt-get -y install python-setuptools\n",
      "easy_install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n",
      "/usr/local/bin/cfn-init --stack ", { "Ref":"AWS::StackName" }, " --resource <REPLACE_WITH_RESOURCENAME>", " --region ", { "Ref": "AWS::Region" }, "\n",
    
por 14.06.2016 / 10:18