Pourquoi la formation cloud aws n'installe-t-elle pas les packages que je spécifie?

14

Je suis très nouveau dans les services AWS. J'essaie d'utiliser la formation cloud AWS et j'ai créé un modèle. Le modèle est sans erreur et je peux créer des machines en utilisant cela.

Mais j'ai ajouté une configuration dans le modèle de sorte qu'il installe tomcat, git et d'autres choses au démarrage. Mais cela ne m'arrive pas.

Voici une partie du code que j'ai utilisé pour installer tomcat:

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

Mais lorsque je me connecte à la machine, tomcatni gitje n'ai été installé!

Merci d'avance.

homme chauve-souris
la source
Je suppose d'après vos balises qu'il s'agit d'une AMI Ubuntu?
mattdm
Avez-vous essayé de supprimer le "," après "git": []? Ce n'est pas syntaxiquement correct.
Edwin

Réponses:

23

Je crois que votre problème ici est la confusion autour du fait que cloud-init n'est pas le même que cfn-init.

  • cloud-init est l'outil qui a démarré dans le cadre des AMI Ubuntu AWS qui permettent d'interpréter le composant de données utilisateur EC2 des métadonnées d'instance. Amazon Linux a également adopté cet outil et l'a intégré à son AMI.

  • cfn-init fait partie d'un ensemble d'outils différent appelé CloudFormation Helper Scripts créé par AWS pour Amazon Linux qui peut lire une section supplémentaire nommée Metadatadans votre modèle CloudFormation.

Ainsi, Ubuntu et Amazon Linux AMI ont tous deux les outils cloud-init préinstallés pour accéder aux données utilisateur, mais seul Amazon Linux a les scripts d'aide CloudFormation préinstallés, par exemple cfn-init pour accéder aux métadonnées CloudFormation.

Cependant, AWS distribue des packages que vous pouvez utiliser pour lire les métadonnées CloudFormation. Plus précisément, consultez ce modèle pour savoir comment utiliser un script de données utilisateur cloud-init pour installer python-setuptools, télécharger les scripts d'assistance CloudFormation, les installer à l'aide d'easy_install, puis appeler cfn-init.

Remarque: Il existe d'autres distributions ou AMI qui pourraient prendre en charge cloud-init ou cfn-init, mais je ne couvre que les cas généraux ici.

dialt0ne
la source
12

Vous devez appeler cfn-init ( http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html ) dans la propriété UserData de l'instance:

{
    "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 propriété UserData est codée en Base64 et vous permet de spécifier un script à exécuter au lancement de l'instance. Ici, vous pouvez appeler cfn-init qui lira les métadonnées CloudFormation :: Init et configurera tout ce qui y est spécifié.

De plus, lors de la création de la pile CF, vous souhaiterez peut-être accéder aux paramètres avancés sur la deuxième page (après avoir donné les paramètres) et vous assurer que la restauration en cas d'erreur est définie sur "Non". De cette façon, si le script cfn-init échoue pour une raison quelconque, vous pouvez ssh sur l'instance et vérifier le fichier /var/log/cfn-init.log pour plus d'informations.

Andrei Fierbinteanu
la source
Je pense que celui-ci devrait être la réponse acceptée.
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",
Nic
la source
4
Je ne comprends pas ...
Pierre.Vriens