每当我更新我的 CFN 堆栈时运行自定义资源

Pri*_*ate 9 aws-cloudformation aws-lambda

我有一个自定义资源,用于从 API 网关获取 API 密钥并将其作为标头发送到 Cloudfront。当我创建一个堆栈时,我custom:resource正在触发,因为它是第一次创建逻辑 ID。但是,当我更新堆栈(即更改 API 密钥名称)时,类型的 API 密钥资源AWS::ApiGateway::ApiKey将创建一个新的逻辑 ID,同时又创建一个新的 API 密钥,此时我custom:resource没有调用,因为它具有相同的逻辑 ID因此,我的 Cloudfront 拥有旧的 API 密钥而不是新的。

custom:resource每次我的堆栈发生更新时,有没有办法调用我的?作为一种解决方法,每当我更新堆栈中的资源时,我都会更改Logical Idofcustom:resource以触​​发它。但这并不困难,因为 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
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

谢谢任何帮助表示赞赏

小智 4

在堆栈更新时让自定义资源执行 lambda 的一种技巧是将自定义资源配置为将所有堆栈参数传递给 lambda 函数。如果堆栈更新时任何参数发生变化,自定义资源将发生变化并触发 lambda。只需忽略 lambda 事件数据中不需要的键即可。当仅更新模板时,这对场景没有任何作用。