【问题标题】:AWS::CloudFormation::Init how does it work?AWS::CloudFormation::Init 它是如何工作的?
【发布时间】:2013-01-05 10:52:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: amazon-web-services xen amazon-cloudformation


    【解决方案1】:

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

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

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

    我最近在我的博客中written about this specific issue

    【讨论】:

    • 谢谢,这是非常有用的信息。但我还是想知道,cfn-init 后面是如何工作的(那些命令和文件是如何通过网络或其他虚拟设备传输到 VM 的?)
    • cfn-init 向 Amazon 地址发出 HTTP 请求以获取资源中的数据。然后它执行模板中指定的操作。模板在哪里?在亚马逊控制的服务器上的某个地方。
    • 那么,所有这些动作都是基于网络的吗?这听起来有道理,但还是有一些不便的情况。如果出于安全原因(仅 22 端口)我不想打开 SecurityGroup,那么自动部署我的应用程序将是一个问题。老实说,我希望它们是通过特殊的管道或设备(在 xen 中)传输的。无论如何,感谢您的帮助!
    • 我认为这里还有一种从模板运行命令的方法?docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
    猜你喜欢
    • 2019-12-30
    • 2020-08-29
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2019-06-13
    • 2023-03-20
    • 2022-01-21
    • 2020-07-10
    相关资源
    最近更新 更多