在 SAM 部署期间检测到 AWS SAM 模板验证错误。伪参数 ${AWS::AccountId} 不被接受

AWS SAM template validation error detected during SAM Deploy. Pseudo-param ${AWS::AccountId} not accepted

在尝试部署 SAM 时,我收到以下拒绝信息:

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 模板中函数的角色 属性:

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

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

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

我错过了什么?

谢谢!

我们需要使用内部函数 !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