问题描述
我已经创建了一个S3网站,并使用了'@ silvermine / serverless-plugin-cloudfront-lambda-edge'插件连接了一些Cloufront事件,它们均按预期工作:
functions:
origin_request:
handler: handler.origin_request
memorySize: 128
timeout: 1
lambdaAtEdge:
distribution: 'StaticSiteCloudfront'
eventType: 'origin-request'
viewer_request:
handler: handler.viewer_request
memorySize: 128
timeout: 1
lambdaAtEdge:
distribution: 'StaticSiteCloudfront'
eventType: 'viewer-request'
我现在想介绍常规的lambda @ edge函数,该函数仅用于处理网站上的联系表。
functions:
...
hello:
handler: mail.send_mail
timeout: 10
memorySize: 256
events:
- http:
path: mail
method: post
现在发生的是,部署时出现以下错误:
An error occurred: StaticSiteCloudfront - The function code size is larger than the maximum allowed size for functions that are triggered by a CloudFront event: 2908922 Max allowed: 1048576 Function: arn:aws:lambda:us-east-1:12345678001:function:myywebsite-dev-viewer_request:15
我认为这是因为我的邮件功能具有一些我想与邮件功能一起部署的依赖关系,但与我的查看者请求和原始请求功能无关,但是这些(我认为!)与它们一起部署-导致文件过大。 Cloudfront事件函数没有依赖性。如何分隔依赖关系,以便仅捆绑和部署所需的依赖关系?
作为参考(如果有用),我的package.json看起来像这样:
"devDependencies": {
"@silvermine/serverless-plugin-cloudfront-lambda-edge": "^2.1.1","serverless-s3-sync": "^1.15.0"
},**** only the following deps are needed for the "mail" function ****
"dependencies": {
"mailgun-js": "^0.22.0","validator": "^13.1.17"
}
解决方法
您可以指定要单独打包的功能,并使用以下功能在每个功能的基础上设置包含/排除:
package:
individually: true
exclude:
- node_modules/**
结果是:
functions:
origin_request:
handler: handler.origin_request
memorySize: 128
timeout: 1
# specify exclusions
package:
individually: true
exclude:
- node_modules/**
lambdaAtEdge:
distribution: 'StaticSiteCloudfront'
eventType: 'origin-request'
viewer_request:
handler: handler.viewer_request
memorySize: 128
timeout: 1
# specify exclusions
package:
individually: true
exclude:
- node_modules/**
lambdaAtEdge:
distribution: 'StaticSiteCloudfront'
eventType: 'viewer-request'
mail:
handler: mail.send_mail
timeout: 10
memorySize: 256
events:
- http:
path: mail
method: post