gpt4 book ai didi

amazon-web-services - Cloudformation 模板在 UserData 完成之前完成部署

转载 作者:行者123 更新时间:2023-12-03 16:36:45 26 4
gpt4 key购买 nike

在我正在部署的 CloudFormation 模板中,我正在 UserData block 中运行长时间运行的操作。

它看起来如下:

"UserData": {
"Fn::Base64" : {
"Fn::Join" : [
"",
[
"/usr/local/bin/mylongrunningscript.sh"
]
]
}
}

脚本的内容是:

echo "UserData starting!" > /var/log/mycustomlog.log
sleep 300
echo "UserData finished!" >> /var/log/mycustomlog.log

我看到的问题是,我相信 CloudFormation 模板正在 UserData 脚本完成运行之前完成其部署。我相信情况确实如此,因为如果我足够快并通过 ssh 进入实例,我将看到如下内容:

$ cat /var/log/mycustomlog.log
UserData starting

这表明 UserData 尚未完成运行


如何确保在堆栈处于“CreateComplete”状态之前 UserData 代码执行完成?

最佳答案

要确保 CloudFormation 模板等待 UserData 脚本完成,您必须执行以下两件事:

  1. 添加CreationPolicy到您要定位的资源(在我的例子中是虚拟机)。

  2. 在脚本中添加逻辑以表明其完成。此自定义逻辑使用 cfn-signal实用程序,您可能必须在实例中安装该实用程序。


模板现在的外观如下:

"UserData": {
"Fn::Base64" : {
"Fn::Join" : [
"",
[
"/usr/local/bin/mylongrunningscript.sh"
]
]
}
},
"CreationPolicy": {
"ResourceSignal" : {
"Count": "1",
"Timeout": "PT10M"
}
}

cfn-signal实用程序用于发出脚本终止的信号:

"/home/ubuntu/aws-cfn-bootstrap-*/bin/cfn-signal -e $? ",
" --stack ", { "Ref": "AWS::StackName" },
" --resource MyInstance" ,
" --region ", { "Ref" : "AWS::Region" }, "\n"

参见here以 Windows 为例。

关于amazon-web-services - Cloudformation 模板在 UserData 完成之前完成部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60381063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com