【问题标题】:Stack creation gives error with Multiple layers reference with FindInMap使用 FindInMap 进行多层引用时,堆栈创建会出错
【发布时间】:2022-01-18 07:09:14
【问题描述】:

我的 lambda 函数有多个层。当我尝试创建云形成堆栈时,出现以下错误。

#/Layers/0:预期类型:String,找到:JSONObject #/Layers/1:预期类型:String,找到:JSONObject

我的云形成模板如下所示

Mappings:
 LayersInfo:
    dev:
      mylayer: 
        -  !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:my-utils:1"
        -  !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:my-db-layer:10"

MyLambda:
    Type: AWS::Lambda::Function
    DependsOn: LambdaPolicy
    Properties:
      Description: xxxxx
      FunctionName: mylambda
      Handler: index.lambda_handler
      Layers: !FindInMap [LayersInfo, !Ref Region, mylayer]

看起来它无法将列表转换为字符串。

【问题讨论】:

  • 进展如何?仍然不清楚你能做什么?

标签: amazon-web-services yaml amazon-cloudformation aws-cloudformation-custom-resource


【解决方案1】:

您不能在Mappings 中使用Sub。映射中的值必须是显式字符串或列表。所以你必须在你的层中硬编码AWS::RegionAWS::AccountId

另一种方法是创建您自己的macro 来替换区域和帐户ID 的实际值。

【讨论】:

  • 感谢您告诉 Sub 在 Mapping 中的局限性。请参阅下面的工作解决方案。
【解决方案2】:

这是可行的解决方案

Mappings:
 LayersInfo:
  dev:
    mylayer1: "my-utils:1"
    mylayer2: "my-db-layer:10"

MyLambda:
 Type: AWS::Lambda::Function
 DependsOn: LambdaPolicy
 Properties:
  Description: xxxxx
  FunctionName: mylambda
  Handler: index.lambda_handler
  Layers: 
     -!Sub
      - arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:${Layer1}
      - Layer1: FindInMap [LayersInfo, !Ref Region, mylayer1]
     -!Sub
      - arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:${Layer2}
      - Layer2: FindInMap [LayersInfo, !Ref Region, mylayer2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2018-10-10
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2020-08-26
    • 2020-07-26
    相关资源
    最近更新 更多