我有一个简单的模板测试与lambda的通信,称为自定义资源。类似的东西:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"test": {
"Type": "Custom::test",
"Properties": {
"ServiceToken": "arn:aws:lambda:xxxxx:mylambda",
"Input": "some input"
}
}
},
"Outputs": {
"debug": {
"Description": "debug ami id",
"Value": { "Fn::GetAtt": [ "test", "output" ]}
}
}
}
问题是,这个CFT有时工作正常,有时会在CREATE_IN_PROGRESS超时而没有达到"资源创建已启动"阶段(所以没有实际开始lambda)。有什么办法可以降低失败率吗?现在它接近50%:(
答案 0 :(得分:0)
它可能与实际的 Lambda 代码有关。实现适当的异常捕获机制非常重要。如果某些内容失败并且未将失败信号发送回 CloudFormation ,则堆栈将永远等待(或直到超时)。
值得注意的是,在过去的3年里,我一直在广泛使用自定义资源,我从来没有 Lambda 没有启动(至少在我使用的地区: us-east-1 , ca-central-1 , us-west-2 )。
答案 1 :(得分:0)
好吧,所以Laurent认为 是我的lambda函数的一个问题。有一个条件,它退出而没有将结果保存到S3(为什么h * cloudformation不能只读取lambda输出?)。并且"资源创建已启动"似乎是保存到S3的数据的指示器,而不是运行lambda。我纠正了退出条件,增加了超时,这个功能就像一个魅力。
你问的遗失日志条目怎么样?嗯,这只是我的错误。由于CloudWatch不允许将日志过滤器设置为将来,或者是动态"现在",在每次尝试之后我都需要单击过滤器并更改它以显示最新条目(aws可以改进的另一个点)用户体验)。我错过了那个细节,而cloudwatch根本没有向我展示最新的日志(愚蠢的我!对不起)