无法在 {tableName} 查询 Dynamo

Unable to query Dynamo at {tableName}

因此,当 lambda 函数尝试从 dynamo table 读取时,我在 lambda 函数中收到以下错误,其中查询使用 table 上的 GSI 之一:

Unable to query Dynamo at XXXTable

现在我在 cloudformation 文件中定义了 lambda 和 dynamo table。

这是授予 lambda 访问 dynamo 权限的策略 table。

LambdaPolicy:
Type: AWS::IAM::Policy
Properties:
  Roles:
    - !Ref LambdaRole
  PolicyName: LambdaPolicy
  PolicyDocument:
    Version: 2012-10-17
    Statement:
      - Effect: Allow
        Action:
          - "logs:*"
        Resource: "arn:aws:logs:*:*:*"
      - Effect: Allow
        Action:
          - "dynamodb:BatchGetItem"
          - "dynamodb:BatchWriteItem"
          - "dynamodb:DescribeTable"
          - "dynamodb:GetItem"
          - "dynamodb:PutItem"
          - "dynamodb:UpdateItem"
          - "dynamodb:DeleteItem"
          - "dynamodb:Query"
          - "dynamodb:Scan"
        Resource:
          - !GetAtt XXXTable.Arn

其中 XXXTable 是在同一 cloudformation 文件中定义的 Dynamo table。 现在我知道我可以通过控制台手动解决这个问题,方法是编辑 lambda 策略并将此行添加到资源中:

- "arn:aws:dynamodb:eu-west-1:accountNubmer:table/XXXTable/index/*"

但问题是,如何将其添加到 cloudformation 文件中? 类似于:

!GetAtt XXXTable.Arn + "/index/* 

任何帮助都会很棒。

我认为您只是缺少将它们组合在一起的 !Sub 函数。尝试:

- !Sub "${XXXTable.Arn}/index/*"