无服务器部署资源不支持Fn :: GetAtt

时间:2020-04-01 22:28:40

标签: amazon-cloudformation serverless

Error: The CloudFormation template is invalid: Template error: resource <Policy in serverless.yml> does not support attribute type Arn in Fn::GetAtt

在部署项目时,出现上述错误。似乎Fn:GetAttr会在转换为CloudFormation时发生,因为我尚未明确定义该函数的任何用法

functions:
  myfn:
    handler: lambda/handler.my
    role: DataIamPolicy
    environment:
      DynamoTableName: "my-data"

我之前已将表定义为MyData。我的政策资源如下:

DataIamPolicy: 
  Type: AWS::IAM::Policy
  DependsOn: MyData
  Properties:
    PolicyName: "my-data-dynamodb-policy"
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: "Allow"
          Action:
            - "dynamodb:DescribeTable"
            - "dynamodb:GetItem"
          Resource:
            Fn::Join:
              - ""
              - - "arn:aws:dynamodb:::"
                - "Ref" : "MyData"

我认为这可能是政策中的资源,但是改变它似乎无济于事。

1 个答案:

答案 0 :(得分:1)

因此,问题在于为您的功能定义特定角色。默认情况下,无服务器将角色和策略应用于所有功能。

我应用了:

role: DataIamPolicy

这不起作用,因为它在后台获取策略的arn,而不是我们尚未创建的角色。

您需要使用自定义策略设置角色才能使此方法起作用。即:

role: DataIamRole