![](/img/trans.png)
[英]Add trigger to AWS Lambda Function using Java SDK for s3
[英]How to add S3 trigger event on AWS Lambda function using Serverless framework?
我想在現有存儲桶上的 Lambda 函數上添加觸發事件,為此我使用以下配置:
events:
- s3:
bucket: serverlesstest
event: s3:ObjectCreated:*
rules:
- prefix: uploads/
- suffix: .pdf
其中存儲桶serverlesstest
已存在於 S3 上。
此配置引發錯誤:
配置堆棧時出錯:S3BucketServerlesstest - serverlesstest 已存在。
如何使用無服務器框架解決此錯誤?
由於 CloudFormation 行為,目前在核心框架中無法實現。 也許。
但是你可以使用這個插件。
https://github.com/matt-filion/serverless-external-s3-event
通過npm install serverless-plugin-existing-s3
。
並將插件添加到 serverless.yml
plugins:
serverless-plugin-existing-s3
授予您的部署權限以訪問存儲桶。
provider:
name: aws
runtime: nodejs4.3
iamRoleStatements:
...
- Effect: "Allow"
Action:
- "s3:PutBucketNotification"
Resource:
Fn::Join:
- ""
- - "arn:aws:s3:::BUCKET_NAME or *"
並使用existingS3
事件,它不僅僅是s3
。
functions:
someFunction:
handler: index.handler
events:
- existingS3:
bucket: BUCKET_NAME
events:
- s3:ObjectCreated:*
rules:
- prefix: images/
- suffix: .jpg
在sls deploy
命令之后,您可以使用sls s3deploy
命令附加事件。
它會在未來的某一天添加。
遺憾的是,您無法指定現有 S3 存儲桶來觸發 Lambda 函數,因為無服務器框架*無法使用 Cloud Formation 更改現有基礎設施。 此配置要求您創建一個新存儲桶。
您可以在 GitHub 上打開的以下問題中閱讀更多信息:
* 我會嘗試使用 AWS 控制台或 SDK 而不是 Serverelss 框架來配置此觸發器。
從無服務器版本 v1.47.0 開始,通過將existing: true
標志添加到您的事件配置中,這是可能的: https existing: true
//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
來源提供了以下警告:
重要提示:每個函數只能附加 1 個現有的 S3 存儲桶。
注意:使用現有配置將向您的堆棧添加額外的 Lambda 函數和 IAM 角色。 Lambda 函數備份用於支持現有 S3 存儲桶的自定義 S3 資源。
serverless.yml
似乎對空格非常敏感。 對我來說, 這個建議很有幫助。
如果配置看起來像這樣
functions:
hello:
handler: handler.main
events:
- s3:
bucket: codepipeline-us-east-1-213458767560
event: s3:ObjectCreated:*
rules:
- prefix: test/MyAppBuild
您需要在存儲桶、事件和規則的縮進中再添加 2 個空格:
functions:
hello:
handler: handler.main
events:
- s3:
bucket: codepipeline-us-east-1-213458767560
event: s3:ObjectCreated:*
rules:
- prefix: test/MyAppBuild
如果存儲桶是在堆棧中的其他地方使用無服務器創建的,那么您可以使用- s3: Bucket: { Ref: serverlesstest }
否則您必須自己構建名稱或 ARN。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.