2013-01-22 24 views
12

AWS::CloudFormation::Initを使用すると、インスタンスの起動後にコマンドを実行したり、ファイルをアップロードしたりすることができます。しかし、誰もがこの操作の内部(Amazonの側から)を知っていますか?AWS :: CloudFormation :: Initどのように動作しますか?

テンプレートを渡すとき、どの時点でVMに送信されるファイルまたはコマンドがありますか?これはXen機能(特殊パイプ経由)ですか、ネットワーク経由ですか?

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

答えて

26

EC2インスタンスへのメタデータとしてのAWS :: CloudFormation :: Initリソースの作成では、インスタンス自体が何も実行しません。

インスタンスがそのリソースで指定されたすべての操作を実際に実行するには、cfn-initコマンドラインツールを実行する必要があります。 Amazon EC2 AMIでは、そのコマンドはすでに/opt/aws/bin/cfn-initにインストールされています。このコマンドには、AWS :: CloudFormation :: Initリソースの名前、EC2サーバーリソースの名前、実行中のリージョンなど、いくつかのオプションがあります。AWSセキュリティ資格情報も提供する必要があります。

新しいインスタンスを作成するときにこれを自動的に実行したい場合(確かに)、EC2インスタンスのUserDataを使用して、最初の起動時にインスタンスが実行されるシェルスクリプトを作成し、その中にcfn-initコマンドがあります。

最近私のブログにはwritten about this specific issueがあります。

+1

ありがとう、本当に有用な情報です。しかし、私はまだcfn-initの背後でどのように動作しているのか(そのコマンドとファイルがVMやネットワークや他の仮想デバイスを介してどのように送信されるか)を知りたがります。 – SoYoung

+1

cfn-initはAmazonアドレスにHTTPリクエストを出してリソース内のデータ次に、テンプレートで指定されたアクションを実行します。テンプレートはどこですか? Amazonが管理するサーバー上のどこか。 –

+0

これらのアクションはすべてネットワークに基づいていますか?それは合理的だと思うが、まだいくつかの不便な状況がある。セキュリティー理由(22ポートのみ)からSecurityGroupを開けたくない場合、アプリケーションを自動的に配備することは問題になります。正直言って、私は彼らが特別なパイプや装置(xen)で伝えられることを願っています。いずれにしても、助けてくれてありがとう! – SoYoung

関連する問題