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 和元数据?