2013-01-22 13 views
12

Wir können AWS::CloudFormation::Init verwenden, um Befehle auszuführen und Dateien nach dem Starten einer Instanz hochzuladen. Aber weiß jemand, was sind die Interna dieser Operation (von Amazon Seite)?AWS :: CloudFormation :: Init wie funktioniert es?

Wenn wir eine Vorlage übergeben, an welchem ​​Punkt werden die Dateien oder Befehle an die VM übertragen? Ist das eine Xen-Funktion (über spezielle Pipe) oder über das Netzwerk?

"Resources": { 
    "MyInstance": { 
    "Type": "AWS::EC2::Instance", 
    "Metadata" : { 
     "AWS::CloudFormation::Init" : { 
     "config" : { 
      "packages" : { 
      : 
      }, 
      "sources" : { 
      : 
      }, 
      "commands" : { 
      : 
      }, 
      "files" : { 
      : 
      }, 
      "services" : { 
      : 
      }, 
      "users" : { 
      : 
      }, 
      "groups" : { 
      : 
      } 
     } 
     } 
    }, 
    "Properties": { 
     : 
    } 
    } 
} 

Antwort

26

Erstellen einer AWS :: Cloudformation :: Init Ressource als Metadaten zu einer EC2-Instanz verursacht nicht die Instanz alles selbst zu tun.

Damit die Instanz tatsächlich alle in dieser Ressource angegebenen Operationen ausführt, muss das Befehlszeilentool cfn-init ausgeführt werden. Auf Amazon EC2 AMIs ist dieser Befehl bereits unter installiert. Der Befehl enthält mehrere Optionen, einschließlich des Namens der AWS :: CloudFormation :: Init-Ressource, des Namens der EC2-Serverressource und der Region, in der Sie ausgeführt werden. Außerdem müssen Sie AWS-Sicherheitsberechtigungsnachweise angeben.

Wenn Sie möchten, dass dies automatisch ausgeführt wird, wenn Sie eine neue Instanz erstellen (das habe ich getan), müssen Sie die UserData der EC2-Instanz verwenden, um ein Shell-Skript zu erstellen, das die Instanz beim ersten Booten ausführt der cfn-init Befehl darin.

Ich habe written about this specific issue in meinem Blog vor kurzem.

+1

Vielen Dank, es ist wirklich sehr nützliche Informationen. Aber ich möchte immer noch wissen, wie es hinter dem cfn-init funktioniert (wie diese Befehle und Dateien an die VM über das Netzwerk oder andere virtuelle Geräte übertragen werden?) – SoYoung

+1

cfn-init macht eine HTTP-Anfrage an eine Amazon-Adresse, um die Daten in der Ressource. Es führt dann die in der Vorlage angegebenen Aktionen aus. Wo ist die Vorlage? Irgendwo auf einem von Amazon kontrollierten Server. –

+0

Also alle diese Aktionen basieren auf Netzwerk? Es klingt vernünftig, aber immer noch eine unbequeme Situation. Wenn ich die SecurityGroup nicht aus Sicherheitsgründen (nur Port 22) öffnen möchte, kann es zu Problemen bei der automatischen Bereitstellung meiner Anwendung kommen. Um ehrlich zu sein, hoffe ich, dass sie durch spezielle Rohre oder Geräte (in Xen) übertragen werden. Irgendwie, danke für deine Hilfe! – SoYoung