25

我们可以使用AWS::CloudFormation::Init在启动实例后执行命令和上传文件。但是有人知道这个操作的内部结构是什么吗(从亚马逊方面)?

当我们传入一个模板时,文件或命令是在什么时候传输到 VM 的?这是 Xen 功能(通过特殊管道)还是通过网络?

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

1 回答 1

41

创建 AWS::CloudFormation::Init 资源作为 EC2 实例的元数据不会导致实例自行执行任何操作。

要使实例实际执行该资源中指定的所有操作,它必须运行cfn-init命令行工具。在 Amazon EC2 AMI 上,该命令已安装在/opt/aws/bin/cfn-init. 该命令有几个选项,包括 AWS::CloudFormation::Init 资源的名称、EC2 服务器资源的名称以及您正在运行的区域。您还需要提供 AWS 安全凭证。

如果您希望在创建新实例时自动运行(我确实这样做了),您必须使用 EC2 实例的 UserData 创建一个 shell 脚本,该实例将在第一次启动时运行,并将cfn-init命令放入其中.

我最近在我的博客中写了关于这个特定问题的文章。

于 2013-01-22T13:02:30.487 回答