【问题标题】:AWS SAM template validation error detected during SAM Deploy. Pseudo-param ${AWS::AccountId} not accepted在 SAM 部署期间检测到 AWS SAM 模板验证错误。不接受伪参数 ${AWS::AccountId}
【发布时间】:2021-05-10 17:33:06
【问题描述】:

在尝试 SAM Deploy 时,我收到以下拒绝:

1 validation error detected: Value 'arn:aws:iam::${AWS::AccountId}:role/Lambda-Exec-And-CloudWatch' at 'role' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+ (Service:AWSLambdaInternal; Status Code: 400; Error Code: ValidationException;

当我将 Lambda 函数的 arn 角色构造中的账户 ID 替换为伪参数时会发生这种情况:${AWS::AccountId}

这是发生这种情况的 YAML 模板中 Function 的 Role 属性:

Role:
        arn:aws:iam::${AWS::AccountId}:role/Lambda-Exec-And-CloudWatch

预期的正则表达式似乎只接受硬编码的帐户 ID。

如果有帮助,我将使用 Cloud9 作为我的 IDE。

我错过了什么?

谢谢!

【问题讨论】:

  • 我们可能需要 !Sub 内部函数来替换 accountId!类似Role: !Sub arn:aws:iam::${AWS::AccountId}:role/Lambda-Exec-And-CloudWatch 同样如果角色在同一个模板中创建,我们可以很容易地引用资源而不是构建Arn。

标签: amazon-web-services amazon-cloudformation aws-sam


【解决方案1】:

我们需要使用内部函数 !Sub ,Here 是几个例子

  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Role: !Sub arn:aws:iam::${AWS::AccountId}:role/my-lambda-role

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 2022-01-14
    • 2020-10-21
    • 2020-03-19
    • 1970-01-01
    • 2021-11-03
    • 2021-06-05
    • 2019-04-24
    • 2019-02-04
    相关资源
    最近更新 更多