首页 > 解决方案 > 无法验证以下目标配置(S3 到 SQS)

问题描述

我正在尝试使用无服务器设置一个工作流,该工作流创建一个新的 S3 存储桶、一个新的 SQS 队列,当在 S3 存储桶中创建一个对象时,将一条消息放入队列并在有足够消息时启动一个 lambda队列。我的资源块中有以下内容:

resources:
  Resources:
    AnalyticsQueue:
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: "my-queue"
    S3EventQueuePolicy:
      Type: AWS::SQS::QueuePolicy
      DependsOn: AnalyticsQueue
      Properties:
        PolicyDocument:
          Id: SQSPolicy
          Statement:
            - Effect: Allow
              Action: sqs:SendMessage:*
              Resource: !Ref AnalyticsQueue
        Queues:
          - !GetAtt AnalyticsQueue.Arn
    AnalyticsBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: "my-bucket"
        NotificationConfiguration:
          QueueConfigurations:
            - Event: s3:ObjectCreated:*
              Queue: !GetAtt AnalyticsQueue.Arn

当我尝试部署它时,我收到以下错误:

发生错误:AnalyticsBucket - 无法验证以下目标配置(服务:Amazon S3;状态代码:400;错误代码:InvalidArgument;请求 ID:E2A1F8BD6BEE6EF4;)。

一些谷歌搜索,我发现问题出NotificationConfigurationAnalyticsBucket. 如果我删除整个子块,它部署得很好,但是当对象被创建时显然不会在队列上生成消息。

正在寻找解决此问题的方法。

标签: amazon-s3amazon-cloudformationamazon-sqsserverless-framework

解决方案


许多 AWS 配置允许您连接服务,如果它们没有权限,它们会在运行时失败,但是 S3 通知配置确实会检查一些目标以进行访问。

在这种情况下,您不允许 S3 向 SQS 发送消息。

它应该是这样的:

  PolicyDocument:
    Id: SQSPolicy
    Statement:
    - Sid: SQSEventPolicy
      Effect: Allow
      Principal: "*"
      Action: SQS:*
      Resource: "*"
      Condition:
        ArnLike:
          aws:SourceArn: arn:aws:s3:::*

推荐阅读