在我的模板中,我正在配置一个使用EC2 Launch template
的ASG在UserData
部分中,我做了cfn-init
来提供实例,效果很好。
但是,当我执行cfn-signal
命令时,该命令成功(退出代码为0),但是Cloudformation堆栈从未收到该命令,并且堆栈创建/更新失败,并显示Failed to receive 1 resource signal(s) for the current batch. Each resource signal timeout is counted as a FAILURE.
当我检查Cloudtrail时,我发现SignalResource
API调用已完成,并用SUCCESS
发出了正确的堆栈和资源信号(但responseElements
中null
)
我的Cloudformation模板摘录:
Resources:
MyLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Metadata:
'AWS::CloudFormation::Init':
configSets:
# lots-o-stuff to be done by cfn-init
Properties:
LaunchTemplateData:
# Remove other attributes for brevity
UserData:
Fn::Base64:
!Sub |
#!/bin/bash -x
yum update -y
# gather ENI
/opt/aws/bin/cfn-init -c install \
--stack ${AWS::StackName} \
--resource MyLaunchTemplate \
--region ${AWS::Region}
/opt/aws/bin/cfn-signal -e $? \
--stack ${AWS::StackName} \
--resource MyAsg \
--region ${AWS::Region}
echo $?
LaunchTemplateName: my-launch-template
MyAsg:
Type: AWS::AutoScaling::AutoScalingGroup
CreationPolicy:
AutoScalingCreationPolicy:
MinSuccessfulInstancesPercent: 100
ResourceSignal:
Count: 1
Timeout: PT10M
UpdatePolicy:
AutoScalingReplacingUpdate:
WillReplace: true
Properties:
# Remove other attributes for brevity
LaunchTemplate:
LaunchTemplateId: !Ref MyLaunchTemplate
Version: !GetAtt MyLaunchTemplate.LatestVersionNumber
知道我在这里缺少什么吗?
答案 0 :(得分:0)
似乎Amazon Linux AMI版本不是最新版本,并且实例上未安装iOS
脚本。使用aws-cfn-bootstrap软件包引导EC2实例。
在deep link URL
部分中添加cfn-signal
。
另一个可能的原因可能是CreationPolicy属性的yum install -y aws-cfn-bootstrap
属性的值太低。在UserData
脚本向AWS CloudFormation资源发送信号之前,请确保该值足够高以使任务能够运行。
如果仍然无法正常运行,请检查AWS Troubleshooting Guide来解决此问题。
答案 1 :(得分:0)
我最近也遇到了类似的问题。由于某种原因,cfn-signals 似乎不适用于启动模板。出于测试目的,我将启动模板更改为启动配置,并且 cfn 信号完全正常。 AWS 不支持启动模板的原因很奇怪。