我尝试使用无服务器在现有 lambda 函数和 S3 存储桶之一上创建
s3:put
事件。
但是即使 lambda 函数不使用 nodejs12.x,也会从 AWS CloudFormation 收到此错误。需要注意的是 - lambda 很旧,所以它使用的是 python3.7,可能很快就会 EOL,但由于依赖于 python3.7,我们还无法升级版本
资源处理程序返回消息:“运行时参数 不再支持使用 nodejs12.x 创建或更新 AWS Lambda 功能。我们建议您使用新的运行时(nodejs18.x) 创建或更新函数。 (服务:Lambda,状态代码:400, 请求ID:)
在 CloudFormation 上,失败在于此资源创建
CustomDashresourceDashexistingDashs3LambdaFunction
,错误与上面相同。
这是我使用的无服务器代码 -
provider:
name: aws
runtime: python3.7
.....
functions:
antivirus-scan:
handler: src/scan.lambda_handler
awsKmsKeyArn: ${opt:kms_arn, ""}
role: antivirusFunctionRole
memorySize: 2048
timeout: 300 # 5mins
events:
- s3:
bucket: ${self:custom.antivirus_files_bucket}
event: s3:ObjectCreated:*
existing: true
我尝试删除该事件并重新创建它,但这不起作用。 S3 存储桶是在 CloudFormation 模板外部创建的。
我找到了原因,serverless v2 已弃用 https://github.com/serverless/serverless/issues/11400.
需要升级到v3。
当在存储桶事件上设置参数
existing: true
时,无服务器会创建一个 lambda 函数(自定义 S3 资源),该函数会在原始 lambda 上创建事件。请参阅使用现有存储桶。创建的此 lambda 在 Serverless 2 中已弃用的运行时(节点 12)上运行。