gpt4 book ai didi

amazon-web-services - 使用 cloudformation/serverless 从现有存储桶 S3 创建事件创建 SNS 消息

转载 作者:行者123 更新时间:2023-12-05 07:08:15 24 4
gpt4 key购买 nike

我有一个现有的 s3 存储桶,不是由 serverless/cloudformation 堆栈创建的。我还有一个无服务器堆栈,其中包含一堆 lambda,这些 lambda 是由具有不同前缀的 s3 创建事件触发的。我需要通过 SNS 发送一些 s3 创建事件,以便它可以在另一个系统中使用。

在我的 serverless.yaml 中,我有一个资源部分,可以在其中创建 SNS 主题和策略。这似乎工作正常:

resources:
Resources:
# Create a topic for the created s3 documents to be published on.
MyS3ToSnsTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: 'Topic to notify new s3-to-sns s3 document was created'
TopicName: s3-to-sns
# Policy for Bucket to publish sns messages to `s3-to-sns` topic
MyS3ToSnsTopicPolicy:
Type: AWS::SNS::TopicPolicy
Properties:
PolicyDocument:
Id: MyS3ToSnsTopicPolicy
Version: '2012-10-17'
Statement:
- Sid: s3-to-sns-id
Effect: Allow
Principal:
AWS: "*"
Action: sns:Publish
Resource: !Join [':', ['arn:aws:sns:us-west-2', Ref: 'AWS::AccountId', 's3-to-sns']]
Condition:
ArnLike:
"aws:SourceArn": "arn:aws:s3:*:*:${self:custom.bucketName.${self:provider.stage}}"
Topics:
- !Ref MyS3ToSnsTopic

当我转到存储桶 -> 属性 -> 事件时,我可以手动添加一个监听前缀/后缀的事件,并可以发布到该主题。所以最后一步是使用 cloudformation 创建事件,而不是手动执行。

当我使用无服务器方式根据创建事件创建 lambda 触发器时,它会生成以下内容:

SomeFunctionNameCustomS31:
Type: Custom::S3
Version: 1
DependsOn:
- SomeFunctionNameLambdaFunction
- CustomDashresourceDashexistingDashs3LambdaFunction
Properties:
ServiceToken:
Fn::GetAtt:
- CustomDashresourceDashexistingDashs3LambdaFunction
- Arn
FunctionName: some-function-name
BucketName: some-bucket-name
BucketConfigs:
- Event: s3:ObjectCreated:*
Rules:
- Prefix: metrics/
- Suffix: ".json"

有没有办法为 SNS 做类似的事情,但不使用 FunctionName 而使用 TopicName 之类的东西?还需要添加或更改哪些其他属性?当您使用堆栈创建存储桶时,我看到了有关 NotificationConfiguration 的建议,但我的存储桶不是使用堆栈创建的。

最佳答案

该框架允许您自定义它创建的资源,并且您始终可以通过 Resources block 配置手动创建的任何资源。两者都允许您设置允许 SNS 订阅的 NotificationConfiguration

resources:
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.bucketName}
NotificationConfiguration:
TopicConfigurations:
- Event: s3:ObjectCreated:*
Topic:
Ref: MySnsTopic

documentation还详细介绍了如何自定义框架创建的 S3 存储桶。

关于amazon-web-services - 使用 cloudformation/serverless 从现有存储桶 S3 创建事件创建 SNS 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61918130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com