每当我更新我的 CFN 堆栈时运行自定义资源
Posted
技术标签:
【中文标题】每当我更新我的 CFN 堆栈时运行自定义资源【英文标题】:Run Custom resource whenever i update my CFN Stack 【发布时间】:2019-04-17 10:41:58 【问题描述】:我有一个自定义资源,用于从 API 网关获取 API 密钥并将其作为标头发送到 Cloudfront。当我创建堆栈时,我的custom:resource
正在触发,因为它是第一次创建逻辑 ID。但是当我更新堆栈时(即更改 API KEY 名称)然后AWS::ApiGateway::ApiKey
类型的 API 密钥资源将创建一个新的逻辑 ID,同时又创建一个新的 API 密钥,此时我的 custom:resource
没有调用,因为它具有相同的逻辑 ID,因为我的云端有旧的 API 密钥而不是新的。
每次我的堆栈发生更新时,有没有办法调用我的custom:resource
?
作为一种解决方法,我将更改custom:resource
的Logical Id
以在我更新堆栈中的资源时触发它。但这并不难,因为logicalId 被共享为对许多资源的引用。
顺便说一句,我的自定义资源附加到 lambda 函数。我什至尝试更改 Version
字段并尝试向属性字段添加值(即堆栈名称、参数等),但它仍然没有调用。
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources" :
"MyFrontEndTest" :
"Type": "Custom::PingTester",
"Version" : "1.0", -->Even changed the version to 2.0
"Properties" :
"ServiceToken": "arn:aws:lambda:us-east-1:*****",
"InputparameterName" : "MYvalue" -->Added this field
谢谢 任何帮助表示赞赏
【问题讨论】:
这里是一些用于构建自定义资源的出色示例代码:GitHub - stelligent/cloudformation-custom-resources 它展示了如何处理更新,这可能会对您有所帮助。 我可以在***.com/questions/41452274/…的帮助下解决问题 @Private 您采用了哪种方法?我陷入了类似的境地。你是如何让自定义资源每次都创建/更新的?提前致谢? @Developer 只需点击我在上述评论中提到的链接即可。正是它帮助我解决了这个问题。 我尝试遵循 wjordan 的回答,但是因为我的模板文件是从 CodePipeline 部署的,所以我无法将随机字符串/数字作为参数传递给我的 cloudformation 模板。每次运行代码管道时都会部署模板。但我不确定如何将参数从代码管道传递给模板文件 【参考方案1】:让自定义资源在堆栈更新时执行 lambda 的一个技巧是配置自定义资源以将所有堆栈参数传递给 lambda 函数。如果堆栈更新时任何参数发生更改,自定义资源将更改并触发 lambda。只需忽略 lambda 事件数据中不需要的键。当仅更新模板时,这不会对场景做任何事情。
【讨论】:
以上是关于每当我更新我的 CFN 堆栈时运行自定义资源的主要内容,如果未能解决你的问题,请参考以下文章
为啥 AWS Lambda CFN S3 响应在删除事件时返回 403?