python - s3上传后未触发Lambda函数
问题描述
我试图在上传文件后触发 Lambda 函数。
下面我定义了file
Lambda 函数。在其中,一个文件被上传到 s3。然后我希望process
Lambda 函数触发。但是,我无法触发它。此外,在 AWS s3 中,存储桶属性 > 事件通知为空。
我的 serverless.yml:
service: backend
frameworkVersion: "2"
package:
exclude:
- "frontend/**"
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
dockerFile: ./dockerfile
provider:
name: aws
runtime: python2.7
stage: dev
lambdaHashingVersion: 20201221
apiGateway:
shouldStartNameWithService: true
environment:
STORAGE_BUCKET: dev-storage-bucket-01392334
iamRoleStatements:
- Effect: Allow
Action:
- s3:PutObject
- s3:PutObjectAcl
- s3:GetObject
- s3:GetObjectAcl
- s3:DeleteObject
Resource:
- "arn:aws:dynamodb:us-east-1:*:*"
- "arn:aws:s3:::*"
functions:
process:
handler: handler.process
events:
- s3:
bucket: ${self:provider.environment.STORAGE_BUCKET}
events: s3:ObjectCreated:*
existing: true
file:
handler: handler.file
events:
- http:
method: POST
path: /file
resources:
Resources:
storage:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:provider.environment.STORAGE_BUCKET}
在我的处理程序中,我有:
def process(event, context):
print("in process")
def fcsfile(event, context):
uploaded_file = event['body']
s3 = boto3.resource('s3')
object = s3.Object(STORAGE_BUCKET, 'the_file_name')
s3_response = object.put(Body=uploaded_file)
print(s3_response)
response = {
"statusCode": 200,
"body": json.dumps(response)
}
return response
当我对端点执行 CURL 时,文件会上传到 s3,但永远不会触发进程功能。
我试过删除'existing:true'。结果相同。我尝试将存储桶名称更改为完全不同的名称,例如“dev-storage-bucket-99999999968686”,但随后我看到了错误:
An error occurred: S3BucketDevstoragebucket99999999968686 - dev-storage-bucket-99999999968686 already exists in stack
不,存储桶不存在。
我还能尝试什么?
解决方案
看起来你可能有一个小错字。
在块中替换似乎对我有用events
:event
handler.process
functions:
process:
handler: handler.process
events:
- s3:
bucket: ${self:provider.environment.STORAGE_BUCKET}
event: s3:ObjectCreated:*
existing: true
使用 运行命令时events
,我收到来自无服务器框架的警告:
Serverless: Configuration warning at 'functions.process.events[0]': unsupported function event
这是文档,它帮助我找到了正确的语法。
推荐阅读
- c# - 从 C# 将布尔值传递给 View
- docker - 有没有办法使用现有的 Docker Image 创建 NuxtJS 应用程序而不使用 npm create-app 命令
- shell - 在 bash shell 脚本中将字符串与文字连接起来
- android - android项目中项目级gradle文件中的google()和mavenCentral()有什么区别?
- html - 在 img 上居中 h5。目前正试图将“最热门的项目”放在我的图像上。图像和每个 div 将是垂直的
- amazon-web-services - 所有 ec2 实例的单一 IP 地址
- r - 缺少分组变量时如何避免计算均值?
- python-3.x - 正则表达式拆分特定长度的数字
- python-3.x - 返回响应并重定向——Django
- javascript - JS中的播放、暂停和删除