Amazon cloudformation AWS云信息配置S3事件至sqs

Amazon cloudformation AWS云信息配置S3事件至sqs,amazon-cloudformation,serverless,Amazon Cloudformation,Serverless,我正在尝试创建一个简单的基于AWS的体系结构,将一些数据从AWSS3传输到SQS,然后触发lambda。我使用的是无服务器框架,但最终在部署时会出现此错误 发生错误:PostsRawBucket-无法验证以下目标配置(服务:Amazon S3;状态代码:400;错误代码:InvalidArgument;请求ID:…;S3扩展请求ID:…) 编辑1:解决方案(至少对我来说)-我必须添加AWS::SQS::QueuePolicy QueuePolicy: Type: AWS::SQS::

我正在尝试创建一个简单的基于AWS的体系结构,将一些数据从AWSS3传输到SQS,然后触发lambda。我使用的是无服务器框架,但最终在部署时会出现此错误

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

编辑1:解决方案(至少对我来说)-我必须添加AWS::SQS::QueuePolicy

QueuePolicy:
      Type: AWS::SQS::QueuePolicy
      DependsOn:
        - PostsTransferQueue
      Properties:
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                AWS: '*'
              Action:
                - SQS:SendMessage
              # Target a wildcard resource name based on the same format as QueueName
              Resource: !Join [ "", [ "arn:aws:sqs:*:*:", !Join [ "-", [ posts, transfer ] ], "*" ] ]
              Condition:
                ArnLike:
                  # Static BucketName used to avoid circular dependency with S3 bucket
                  aws:SourceArn: !Join [ "", ["arn:aws:s3:*:*:", !Join [ "-", [ posts, raw, v2] ] ] ]
        Queues:
          - !Ref PostsTransferQueue
然后您必须更新S3以依赖于队列策略

PostsRawBucket:
      Type: AWS::S3::Bucket
      DependsOn:
        - PostsTransferQueue
        - QueuePolicy
      ...
我还将S3 bucket和队列的名称更改为

BucketName:!加入[“-”,[posts,raw,v2]


QueueName:!加入[“-”,[posts,transfer,v2]

您的云信息看起来是正确的。您可以尝试注释掉其中的部分内容,然后尝试部署,以查看哪些行应该是导致错误的相关原因。或者,如果您更详细地描述一下您的用例,我们可能会以其他方式帮助您解决这个问题。我对AWS Lambda、SQS和S3的组合做了一些类似的事情,但我根本没有使用NotificationConfiguration或QueueConfiguration,所以也许你也可以不用它们……所以基本上,我尝试在S3 bucket中加入一些JSON,然后我不想将S3链接到SQS,这会触发Lambda来完成某些工作。[S3->SQS->Lambda]。问题出在S3 Bucket->Properties->NotificationConfiguration->QueueConfiguration->。。。当我评论这一部分时,它工作正常(没有链接它们),但是让Lambda直接监听S3 bucket会工作吗?为什么不呢?这样,您就不需要中间的队列,只需让Lambda侦听
事件:s3:ObjectCreated::
是,但我需要队列来存储元数据长达14天,并作为一种后备机制工作(例如,如果lambda由于某种原因失败,它将不会从队列中删除该项,最终另一个lambda将尝试处理数据)顺便说一句,我找到了我必须添加AWS::SQS::QueuePolicy的解决方案
PostsRawBucket:
      Type: AWS::S3::Bucket
      DependsOn:
        - PostsTransferQueue
        - QueuePolicy
      ...