AWS::CloudFormation::Init 它是如何工作的?

Posted

技术标签:

【中文标题】AWS::CloudFormation::Init 它是如何工作的?【英文标题】:AWS::CloudFormation::Init how does it work? 【发布时间】: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": 
      :
    
  

【问题讨论】:

【参考方案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/…

以上是关于AWS::CloudFormation::Init 它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?