我们可以在启动实例后使用AWS::CloudFormation::Init执行命令并上传文件。但是有人知道这次行动的内部是什么(来自亚马逊方面)?
当我们传入模板时,文件或命令在什么时候传输到VM?这是Xen功能(通过特殊管道),还是通过网络?
"Resources": {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
"packages" : {
:
},
"sources" : {
:
},
"commands" : {
:
},
"files" : {
:
},
"services" : {
:
},
"users" : {
:
},
"groups" : {
:
}
}
}
},
"Properties": {
:
}
}
}
答案 0 :(得分:31)
创建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。