Ron*_*ane 7 amazon-s3 amazon-web-services aws-lambda serverless-framework
我想在现有存储桶上的Lambda函数上添加触发事件,为此我使用以下配置:
events:
- s3:
bucket: serverlesstest
event: s3:ObjectCreated:*
rules:
- prefix: uploads/
- suffix: .pdf
Run Code Online (Sandbox Code Playgroud)
存储桶serverlesstest已存在于S3上.
这种配置引发了错误:
配置堆栈时发生错误:S3BucketServerlesstest - serverlesstest已存在.
如何使用无服务器框架解决此错误?
小智 9
由于CloudFormation行为,目前在核心框架中无法实现.也许.
但是你可以使用这个插件.
https://github.com/matt-filion/serverless-external-s3-event
安装serverless-plugin-existing-s3之后npm install serverless-plugin-existing-s3.
并将插件添加到serverless.yml
plugins:
serverless-plugin-existing-s3
Run Code Online (Sandbox Code Playgroud)
授予您部署访问存储区的权限.
provider:
name: aws
runtime: nodejs4.3
iamRoleStatements:
...
- Effect: "Allow"
Action:
- "s3:PutBucketNotification"
Resource:
Fn::Join:
- ""
- - "arn:aws:s3:::BUCKET_NAME or *"
Run Code Online (Sandbox Code Playgroud)
并且使用existingS3事件,它不仅仅是s3.
functions:
someFunction:
handler: index.handler
events:
- existingS3:
bucket: BUCKET_NAME
events:
- s3:ObjectCreated:*
rules:
- prefix: images/
- suffix: .jpg
Run Code Online (Sandbox Code Playgroud)
在sls deploy命令之后,您可以使用sls s3deploy命令附加事件.
它将来会在某一天被添加.
https://github.com/serverless/serverless/issues/4241
遗憾的是,您无法指定现有 S3 存储桶来触发 Lambda 函数,因为无服务器框架*无法使用 Cloud Formation 更改现有基础设施。此配置要求您创建一个新存储桶。
您可以在 GitHub 上打开的以下问题中阅读更多信息:
* 我会尝试使用 AWS 控制台或 SDK 而不是 Serverelss 框架来配置此触发器。
从无服务器版本 v1.47.0 开始,通过将existing: true标志添加到您的事件配置中,这是可能的:https : //serverless.com/framework/docs/providers/aws/events/s3/
来源示例:
functions:
users:
handler: users.handler
events:
- s3:
bucket: legacy-photos
event: s3:ObjectCreated:*
rules:
- prefix: uploads/
- suffix: .jpg
existing: true # <- this makes it work with existing objects
Run Code Online (Sandbox Code Playgroud)
来源提供了以下警告:
重要提示:每个函数只能附加 1 个现有的 S3 存储桶。
注意:使用现有配置将向您的堆栈添加额外的 Lambda 函数和 IAM 角色。Lambda 函数备份用于支持现有 S3 存储桶的自定义 S3 资源。
小智 3
如果存储桶是在堆栈中的其他位置使用无服务器创建的,那么您可以使用
- s3:
Bucket: { Ref: serverlesstest }
否则您必须自己构建名称或 ARN。
| 归档时间: |
|
| 查看次数: |
6613 次 |
| 最近记录: |