我想通过opsworks创建一个堆栈,我想在我的堆栈实例中配置用户数据。我不需要自动扩展组,因此可以像我们在AWS :: EC2 :: Instance中那样在AWS :: OpsWorks :: Instance资源中使用元数据和AWS :: CloudFormation :: Init启动配置?
"Resources": {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
"packages" : {},
"groups" : {},
"users" : {},
"sources" : {},
"files" : {},
"commands" : {},
"services" : {}
}
}
},
"Properties": {
[...]
}
}
}
答案 0 :(得分:0)
TLDR:使用Chef食谱和食谱来配置AWS::OpsWorks::Instance
,而不是cfn-init
。
在内部,OpsWorks使用cloud-init
在实例上安装AWS OpsWorks Stacks代理(请参阅Using Custom AMIs: Startup Behavior)。可能由于这个原因,OpsWorks实例不支持设置自定义用户数据脚本,因此无法在启动时运行cfn-init
,就像在常规AWS::EC2::Instance
资源上一样。
要获得解决方法,您可以为您的实例use a custom AMI配置AMI以在启动时调用cfn-init
。
但是,强烈建议不要这样的解决方法 - 您真的不需要在OpsWorks堆栈中使用cfn-init
(或其相应的AWS::CloudFormation::Init
元数据)。 cfn-init
与OpsWorks提供的更强大的基于Chef的配置管理完全正交,这可能是您首先使用OpsWorks的原因。利用它!使用Chef配方和cookbook来配置您的实例。
如果您确实需要使用cfn-init
和自定义用户数据(例如,支持遗留代码),那么我建议您坚持使用标准EC2实例,直到您可以将应用程序逻辑移植到自定义Chef食谱。