Perché la formazione di cloud aws non installa i pacchetti specificati?


14

Sono molto nuovo con i servizi AWS. Sto cercando di utilizzare la formazione cloud AWS e ho creato un modello. Il modello è privo di errori e sono in grado di creare macchine utilizzando quello.

Ma ho aggiunto alcune configurazioni nel modello in modo tale da installare tomcat, git e altre cose durante l'avvio. Ma questo non succede per me.

Ecco una parte del codice che ho usato per l'installazione di Tomcat:

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

Ma quando accedo al computer, tomcatgitsono stati installati!

Grazie in anticipo.


Presumo dai tuoi tag che si tratti di un'AMI Ubuntu?
Mattdm,

Hai provato a rimuovere "," dopo "git": []? Non è sintatticamente corretto.
Edwin,

Risposte:


23

Credo che il tuo problema qui sia la confusione attorno al fatto che cloud-init non è lo stesso di cfn-init.

  • cloud-init è lo strumento avviato nell'ambito delle AMI AWS di Ubuntu che consente l'interpretazione del componente dati utente EC2 dei metadati dell'istanza. Amazon Linux ha adottato anche questo strumento e lo ha incorporato nella sua AMI.

  • cfn-init fa parte di un diverso set di strumenti chiamato CloudFormation Helper Scripts creato da AWS per Amazon Linux in grado di leggere una sezione aggiuntiva denominata Metadatanel modello CloudFormation.

Pertanto, le AMI Ubuntu e Amazon Linux hanno entrambi gli strumenti cloud-init preinstallati per accedere ai dati utente, ma solo Amazon Linux ha gli script di supporto CloudFormation preinstallati, ad esempio cfn-init, per accedere ai metadati CloudFormation.

Tuttavia, AWS distribuisce pacchetti che è possibile utilizzare per leggere i metadati di CloudFormation. In particolare, guarda questo modello per sapere come utilizzare uno script di dati utente cloud-init per installare python-setuptools, scaricare gli script Helper di CloudFormation, installarli usando easy_install e quindi invocare cfn-init.

Nota: ci sono altre distribuzioni o AMI che potrebbero supportare cloud-init o cfn-init, ma sto solo coprendo i casi generali qui.


12

È necessario chiamare cfn-init ( http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html ) all'interno della proprietà UserData dell'istanza:

{
    "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"
                        ]]
                    }
                }
            }
        }
    }
}

La proprietà UserData è codificata Base64 e consente di specificare uno script che deve essere eseguito all'avvio dell'istanza. Qui puoi chiamare cfn-init che leggerà i metadati di CloudFormation :: Init e installerà tutto ciò che è specificato lì.

Inoltre, quando si crea lo stack CF, è possibile che si desideri accedere alle impostazioni avanzate nella seconda pagina (dopo aver fornito i parametri) e assicurarsi che il rollback in caso di errore sia impostato su "No". In questo modo se lo script cfn-init ha esito negativo per qualsiasi motivo, è possibile eseguire l'shsh sull'istanza e controllare il file /var/log/cfn-init.log per ulteriori informazioni.


Penso che questa dovrebbe essere la risposta accettata.
Erik van Brakel,


-3
    "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",

4
Non capisco ...
Pierre.Vriens,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.