Warum installiert die aws-Wolkenformation die von mir angegebenen Pakete nicht?


14

Ich bin sehr neu in den AWS-Diensten. Ich versuche, die AWS-Wolkenformation zu verwenden, und habe eine Vorlage erstellt. Die Vorlage ist fehlerfrei und ich kann damit Maschinen erstellen.

Ich habe der Vorlage jedoch eine Konfiguration hinzugefügt, mit der Tomcat, Git und andere Dinge während des Startvorgangs installiert werden. Das passiert mir aber nicht.

Hier ist ein Teil des Codes, den ich für die Installation von Tomcat verwendet habe:

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

Aber wenn ich mich in die Maschine einlogge tomcatnoch gitinstalliert habe!

Danke im Voraus.


Ich gehe davon aus, dass dies ein Ubuntu AMI ist.
Mattdm

Haben Sie versucht, das "," nach "git" zu entfernen: []? Es ist syntaktisch nicht korrekt.
Edwin

Antworten:


23

Ich glaube, Ihr Problem hier ist die Verwirrung darüber, dass Cloud-Init nicht mit CFN-Init identisch ist.

  • cloud-init ist das Tool, das im Rahmen der Ubuntu AWS-AMIs gestartet wurde und die Interpretation der EC2-Benutzerdatenkomponente der Instanz-Metadaten ermöglicht. Amazon Linux hat dieses Tool ebenfalls übernommen und in sein AMI integriert.

  • cfn-init ist Teil eines anderen Toolsets namens CloudFormation-Hilfsskripts, das von AWS für Amazon Linux erstellt wurde und einen zusätzlichen Abschnitt Metadatain Ihrer CloudFormation-Vorlage lesen kann .

Daher sind auf Ubuntu- und Amazon Linux-AMIs die Cloud-Init-Tools für den Zugriff auf die Benutzerdaten vorinstalliert, aber nur auf Amazon Linux sind die CloudFormation-Hilfsskripts vorinstalliert, z. B. cfn-init, um auf die CloudFormation-Metadaten zuzugreifen.

AWS verteilt jedoch Pakete , mit denen Sie die CloudFormation-Metadaten lesen können. In dieser Vorlage erfahren Sie insbesondere, wie Sie mithilfe eines Cloud-Init-Benutzerdatenskripts Python-Setuptools installieren, die CloudFormation-Hilfsskripts herunterladen, mit easy_install installieren und dann cfn-init aufrufen können.

Hinweis: Es gibt andere Distributionen oder AMIs, die möglicherweise cloud-init oder cfn-init unterstützen, aber ich beschreibe hier nur die allgemeinen Fälle.


12

Sie müssen cfn-init ( http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html ) in der UserData-Eigenschaft der Instanz aufrufen:

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

Die UserData-Eigenschaft ist Base64-codiert und ermöglicht die Angabe eines Skripts, das beim Start der Instanz ausgeführt werden soll. Hier können Sie cfn-init aufrufen, das die CloudFormation :: Init-Metadaten liest und alle dort angegebenen Einstellungen vornimmt.

Wenn Sie den CF-Stack erstellen, möchten Sie möglicherweise auf der zweiten Seite (nach Angabe der Parameter) die erweiterten Einstellungen aufrufen und sicherstellen, dass Rollback on error auf "No" gesetzt ist. Wenn das Skript cfn-init aus irgendeinem Grund fehlschlägt, können Sie ssh auf die Instanz ausführen und in der Datei /var/log/cfn-init.log nach weiteren Informationen suchen.


Ich denke, das sollte die akzeptierte Antwort sein.
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
Ich verstehe nicht ...
Pierre.Vriens
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.