我想通过 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": {
[...]
}
}
}
最佳答案
TLDR:使用 Chef 配方和说明书来配置 AWS::OpsWorks::Instance
,而不是 cfn-init
。
在内部,OpsWorks 使用 cloud-init
在实例上安装 AWS OpsWorks Stacks 代理(请参阅 Using Custom AMIs: Startup Behavior )。大概出于这个原因,OpsWorks 实例不支持设置自定义用户数据脚本,因此您无法像在常规 AWS: 上那样在启动时运行
资源。cfn-init
: EC2::Instance
要解决此问题,您可以 use a custom AMI并配置 AMI 以在启动时调用 cfn-init
。
但是,强烈建议不要使用这样的解决方法 - 您实际上不需要使用 cfn-init
(或其相应的 AWS::CloudFormation::Init
首先,OpsWorks 堆栈中的元数据)。 cfn-init
与 OpsWorks 提供的更强大的基于 Chef 的配置管理完全正交,这可能是您首先使用 OpsWorks 的原因。充分利用它!使用 Chef 食谱和说明书来配置您的实例。
如果您确实需要使用 cfn-init 和自定义用户数据(例如,为了支持旧代码),那么我建议您坚持使用标准 EC2 实例,直到您可以移植您的应用程序逻辑转移到定制厨师食谱。
关于amazon-web-services - 是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41057173/