无服务器框架:带有资源桶的 S3 Lambda 触发器
Serverless Framework: S3 Lambda Trigger with bucket from resources
我想创建一个 Lambda 函数,该函数从在同一 CloudFormation 堆栈中创建的 S3 存储桶触发,但语法不正确。
仅当将对象上传到 /uploads
时才应触发该事件。我还需要指定一些存储桶属性 (CORS)。
资源中的 S3 存储桶定义
resources:
Resources:
myBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-bucket
# CORS properties...
函数定义中的事件:
events:
- s3:
bucket: myBucket
event: s3:ObjectCreated:Put
rules:
- prefix: uploads/
我不想使用 existing: true
,因为它会为这个简单的任务创建一些辅助对象。我找不到适合我的情况的任何文档或示例。
existing:true
标志仅与在您的无服务器项目之外创建的 S3 存储桶相关,对于已经存在的存储桶,此处并非如此。
您面临的情况是您无法使用典型的无服务器框架在 Lambda 事件触发器中定义存储桶的便利性,如下所示:
functions:
users:
handler: users.handler
events:
- s3:
bucket: photos
event: s3:ObjectRemoved:*
您不能使用该方法的原因是它会创建 photos
存储桶并且不允许您提供额外的存储桶配置,例如CORS 或存储桶策略。
此问题的解决方案是在 S3 提供程序配置中使用 CORS 策略创建 S3 存储桶,然后从您的 Lambda 函数事件配置中引用该存储桶。例如:
provider:
s3:
photosBucket:
name: photos
versioningConfiguration:
Status: Enabled
corsConfiguration:
CorsRules
- rule1 here
我想创建一个 Lambda 函数,该函数从在同一 CloudFormation 堆栈中创建的 S3 存储桶触发,但语法不正确。
仅当将对象上传到 /uploads
时才应触发该事件。我还需要指定一些存储桶属性 (CORS)。
资源中的 S3 存储桶定义
resources:
Resources:
myBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-bucket
# CORS properties...
函数定义中的事件:
events:
- s3:
bucket: myBucket
event: s3:ObjectCreated:Put
rules:
- prefix: uploads/
我不想使用 existing: true
,因为它会为这个简单的任务创建一些辅助对象。我找不到适合我的情况的任何文档或示例。
existing:true
标志仅与在您的无服务器项目之外创建的 S3 存储桶相关,对于已经存在的存储桶,此处并非如此。
您面临的情况是您无法使用典型的无服务器框架在 Lambda 事件触发器中定义存储桶的便利性,如下所示:
functions:
users:
handler: users.handler
events:
- s3:
bucket: photos
event: s3:ObjectRemoved:*
您不能使用该方法的原因是它会创建 photos
存储桶并且不允许您提供额外的存储桶配置,例如CORS 或存储桶策略。
此问题的解决方案是在 S3 提供程序配置中使用 CORS 策略创建 S3 存储桶,然后从您的 Lambda 函数事件配置中引用该存储桶。例如:
provider:
s3:
photosBucket:
name: photos
versioningConfiguration:
Status: Enabled
corsConfiguration:
CorsRules
- rule1 here