Amazon s3 CloudFormation S3通知配置到SQS
我是CloudFormation的新手,目前正在尝试将S3:ObjectCreated发送到特定的SQS队列 设置在无服务器框架中,资源在CloudFormation中定义。问题在于NotificationConfiguration带有QueueConfigurations的队列配置,它在出错后不断给出错误 在线查看CloudFormation Designer时,下面的语法似乎是正确的: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
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差异是否有一个常规云形成所没有的问题。有什么想法吗?