aws-lambda - 与常规 lambda 函数结合时,Cloudfront 事件函数的大小太大
问题描述
我创建了一个 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
推荐阅读
- haskell - 在哪里可以找到 Stack 的 package.yaml 的对应名称列表,从 Haskell 代码中的 Import 语句中了解包名称
- python - 给定数据集的傅里叶变换和滤波
- javascript - 使用 DOM 操作传递具有应用样式的元素
- html - 如何在白色背景的图像顶部添加导航栏
- python - 为什么 Pandas 中的替换功能会引发 SettingWithCopyWarning?
- reactjs - 我如何使用带有'django'的反应路由器
- html - RobotFramework:未找到带有定位器的链接/列表
- asp.net-core - 如何在 Controller 中调用 DotNet Core API HealthCheck 探针,而不是在 Ctartup.cs 中设置
- python - 在单行中总结熊猫数据框
- c# - ColorZone 不会在 WPF MaterialDesign 中投影