是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?
Posted
技术标签:
【中文标题】是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?【英文标题】:Is it possible to use AWS::CloudFormation::Init and metadata in AWS::OpsWorks::Instance resource? 【发布时间】:2017-04-24 17:46:30 【问题描述】:我想通过 opsworks 创建一个堆栈,并且我想在我的堆栈实例中配置用户数据。我不需要 Auto Scaling 组,因此可以像在 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":
[...]
【问题讨论】:
【参考方案1】:TLDR:使用 Chef 食谱和食谱来配置 AWS::OpsWorks::Instance
,而不是 cfn-init
。
在内部,OpsWorks 使用 cloud-init
在实例上安装 AWS OpsWorks Stacks 代理(请参阅 Using Custom AMIs: Startup Behavior)。大概出于这个原因,OpsWorks 实例不支持设置自定义用户数据脚本,因此您无法像在常规 AWS::EC2::Instance
资源上一样在启动时运行 cfn-init
。
对于解决方法,您可以为您的实例使用 use a custom AMI,并将 AMI 配置为在启动时调用 cfn-init
。
但是,强烈建议不要使用这样的解决方法 - 您真的不应该一开始就需要在 OpsWorks 堆栈中使用 cfn-init
(或其对应的 AWS::CloudFormation::Init
元数据)。 cfn-init
与 OpsWorks 提供的更强大的基于 Chef 的配置管理完全正交,这可能是您首先使用 OpsWorks 的原因。好好利用它!使用 Chef 食谱和说明书来配置您的实例。
如果您确实需要使用 cfn-init
和自定义用户数据(例如,以支持遗留代码),那么我建议您坚持使用标准 EC2 实例,直到您可以将应用程序逻辑移植到自定义 Chef 说明书。
【讨论】:
这个逻辑的问题在于 Chef 依赖于签入存储库的代码。如果您正在执行自定义配方并需要用户数据来配置您的实例以访问存储库,您会遇到第 22 条问题。以上是关于是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以判断一个对象是否在不同的 AppDomain 中运行?
是否可以使用 JavaScript 确定 GeoJSON 点是否在 GeoJSON 多边形内?