【发布时间】: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 它展示了如何处理更新,这可能会对您有所帮助。
-
我可以在stackoverflow.com/questions/41452274/…的帮助下解决问题
-
@Private 您采用了哪种方法?我陷入了类似的境地。你是如何让自定义资源每次都创建/更新的?提前致谢?
-
@Developer 只需点击我在上述评论中提到的链接即可。正是它帮助我解决了这个问题。
-
我尝试遵循 wjordan 的回答,但是因为我的模板文件是从 CodePipeline 部署的,所以我无法将随机字符串/数字作为参数传递给我的 cloudformation 模板。每次运行代码管道时都会部署模板。但我不确定如何将参数从代码管道传递给模板文件
标签: aws-lambda amazon-cloudformation