首页 > 解决方案 > 如何在无服务器框架 YAML 中使用 Fn::Join?

问题描述

我在 Serverless.yaml 文件中有一个策略,如下所述。

    AppSyncDynamoDBPolicy:
      Type: AWS::IAM::ManagedPolicy
      Properties:
        Description: 'Managed policy' 
        Path: /appsync/
        PolicyDocument:
          Version: 2012-10-17
          Statement:
            - Effect: Allow
              Action: 
                - dynamodb:GetItem
                - dynamodb:PutItem
                - dynamodb:DeleteItem
                - dynamodb:UpdateItem
                - dynamodb:Query
                - dynamodb:Scan
                - dynamodb:BatchGetItem
                - dynamodb:BatchWriteItem
              Resource: 
                Fn::Join: 
                  - ""
                  - - Fn::GetAtt: [dslvehicleState, Arn]
                    - "*"

当 sls deploy 完成时,它会引发如下所述的错误。

发生错误:AppSyncDynamoDBPolicy - 策略中的语法错误。(服务:AmazonIdentityManagement;状态代码:400;错误代码:MalformedPolicyDocument;请求 ID:166ba0b3-cc67-11e8-8f74-3339d857f829)。

我在这里想念什么?

标签: amazon-web-servicesamazon-cloudformationamazon-iamserverless-framework

解决方案


试试这个,使用Ref方法:

AppSyncDynamoDBPolicy:
  Type: AWS::IAM::ManagedPolicy
  Properties:
    Description: 'Managed policy' 
    Path: /appsync/
    PolicyDocument:
      Version: 2012-10-17
      Statement:
        - Effect: Allow
          Action: 
            - dynamodb:GetItem
            - dynamodb:PutItem
            - dynamodb:DeleteItem
            - dynamodb:UpdateItem
            - dynamodb:Query
            - dynamodb:Scan
            - dynamodb:BatchGetItem
            - dynamodb:BatchWriteItem
          Resource: 
            Fn::Join: 
              - ""
              - - "Ref": "dslvehicleState"
                - "*"

推荐阅读