Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 CloudFormation S3通知配置到SQS_Amazon S3_Aws Lambda_Amazon Cloudformation_Amazon Sqs_Serverless Framework - Fatal编程技术网

Amazon s3 CloudFormation S3通知配置到SQS

Amazon s3 CloudFormation S3通知配置到SQS,amazon-s3,aws-lambda,amazon-cloudformation,amazon-sqs,serverless-framework,Amazon S3,Aws Lambda,Amazon Cloudformation,Amazon Sqs,Serverless Framework,我是CloudFormation的新手,目前正在尝试将S3:ObjectCreated发送到特定的SQS队列 设置在无服务器框架中,资源在CloudFormation中定义。问题在于NotificationConfiguration带有QueueConfigurations的队列配置,它在出错后不断给出错误 在线查看CloudFormation Designer时,下面的语法似乎是正确的: iamRoleStatements: - Effect: Allow Action

我是CloudFormation的新手,目前正在尝试将S3:ObjectCreated发送到特定的SQS队列

设置在无服务器框架中,资源在CloudFormation中定义。问题在于NotificationConfiguration带有QueueConfigurations队列配置,它在出错后不断给出错误

在线查看CloudFormation Designer时,下面的语法似乎是正确的:

  iamRoleStatements:
    - Effect: Allow
      Action:
        - s3:ListBucket
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: LabelBucket

    - Effect: Allow
      Action:
        - s3:GetObject
        - s3:PutObject
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: LabelBucket
            - "/*"

    - Effect: Allow
      Action:
        - SQS:SendMessage
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: LabelBucket

resources:
  Resources:
    LabelRequestQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: label-generate-request

    LabelResponseQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: label-generate-response

    LabelBucket:
      Type: AWS::S3::Bucket
      DependsOn:
          - LabelResponseQueue
      Properties:
        BucketName: generation-bucket
        NotificationConfiguration:
          QueueConfigurations:
            - Event: 's3:ObjectCreated:Put'
              Queue: 'arn:aws:sqs:eu-west-1:539106611526:label-generate-response'
此资源的确切错误为:

An error occurred: CarrierLabelBucket - Unable to validate the following destination configurations (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: 12A3D93761EFFEAD; S3 Extended Request ID: Zfk2XKEKHhqtafaiFvrcpzyO8nHB6qOJs4gqJXpkOyhxSMgDTsUzZ0lQnYIrTEr2SVHhgMHw0ds=).

您需要使用
s3:CreatedObject:
请参见我已经按照AWS文档中的说明在不同的部署中首先创建SNS主题。您可以在此处找到我的工作应用程序配置:

1.SNS部署

2.应用程序部署(S3通知)


如果您使用的是无服务器框架,那么您还可以使用插件,通过简化的配置隐藏所有必要的配置,如

。在添加S3 SQS事件之前,您需要向队列中添加SQS策略


尼克最后的回答实际上是正确的

如果您在何时设置资源S3 Bucket+SQS队列+策略,它将起作用

我是这样做的:

resources:
  Resources:
    MyBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.settings.s3_bucket}
        NotificationConfiguration:
          QueueConfigurations:
            - Event: s3:ObjectCreated:Put
              Queue: "arn:aws:sqs:#{AWS::Region}:#{AWS::AccountId}:${self:custom.settings.transmit_queue}"
      DependsOn : SQSQueuePolicy

    TransmitQueue:
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: ${self:custom.settings.transmit_queue}

    SQSQueuePolicy:
      Type: AWS::SQS::QueuePolicy
      Properties:
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                AWS: "*"
              Action: SQS:SendMessage
              Resource: "*"
              Condition:
                ArnLike:
                  aws:SourceArn: "arn:aws:s3:::${self:custom.settings.s3_bucket}"
        Queues:
          - Ref: TransmitQueue

 
找到这个可能需要一些时间。
问我怎么知道。

这是我今天早上添加的步骤之一,但直接在Put上,但仍然不起作用。我添加了更多的Serverless.yml文件和更新的错误。这个错误似乎指向:但我还没有得到前两个建议。不幸的是,自从第一次提到这个问题以来,差不多5年(至少5年),这个错误仍然存在。在我的例子中,我甚至不能在创建了一个bucket之后添加通知—即使使用AWS控制台—我在控制台UI中仍然会遇到相同的错误。我已经尝试了一个T的这种方法。“我有一个策略、一个SQS队列和一个bucket,其中bucket依赖于策略,所有这些都作为SAM部署的一部分进行部署—没有骰子。我开始怀疑SAM差异是否有一个常规云形成所没有的问题。有什么想法吗?