AWS CDK+Launch Template环境下cfn-hup的正确资源路径及替代方案
问题描述
所有示例都是将LaunchConfiguration与cfn-hup配合使用,但需要采用以下架构:
- 使用LaunchTemplate
- 搭配AutoScalingGroup
- 为AutoScalingGroup应用CloudFormationInit
- 配置CapacityProvider
之前使用的cfn-hup路径path=Resources.ECSLaunchConfiguration.Metadata.AWS::CloudFormation::Init不再适用,尝试的路径均失败,需要知道该场景下正确的路径,以及cfn-hup的替代方案。
正确的cfn-hup路径
当使用LaunchTemplate时,CloudFormation Init的元数据是附加在LaunchTemplate资源下的,因此正确的路径格式为:
path=Resources.YourLaunchTemplateResourceName.Metadata.AWS::CloudFormation::Init
请将YourLaunchTemplateResourceName替换为你CloudFormation模板中LaunchTemplate对应的资源名称(比如如果你的LaunchTemplate资源叫ECSLaunchTemplate,路径就是path=Resources.ECSLaunchTemplate.Metadata.AWS::CloudFormation::Init)。
需要注意:必须确保LaunchTemplate的UserData中包含cfn-init的执行命令,示例如下:
/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource YourLaunchTemplateResourceName --region ${AWS::Region}
cfn-hup的替代方案
1. AWS Systems Manager Run Command
可以直接通过Run Command触发实例上的配置更新操作,无需依赖cfn-hup的轮询机制,适合按需执行配置变更,比如更新实例上的软件包、调整配置文件等。
2. AWS Systems Manager State Manager
实现配置的持续合规,自动保持实例配置与预期状态一致,替代cfn-hup的周期性检查功能。可以通过定义关联文档,让State Manager定期检查并修复实例配置。
3. AutoScalingGroup滚动更新
如果你的业务允许替换实例,当更新LaunchTemplate的配置(包括CloudFormation Init元数据)后,可以配置AutoScalingGroup执行滚动更新,替换掉旧的实例。新启动的实例会自动应用最新的CloudFormation Init配置,这种方式无需额外监控进程,适合无状态服务场景。
内容的提问来源于stack exchange,提问作者Zu Jiry

