【发布时间】:2021-11-17 20:44:43
【问题描述】:
我已经开始在 AWS 中使用无服务器框架。我的源代码在 Typescript 中,它会在部署之前构建到 JavaScript。这将上传到 S3,然后创建 lambda 函数。我注意到我的 lambda 函数超过 70MB,尽管我只有几行代码,其中包含仅使用 aws-sdk 的操作,例如查询 DynamoDB 或 SecretsManager。
为了对此进行调查,我下载了由无服务器框架上传到 S3 的压缩文件,并解压缩了其内容。它有一个名为 ${WORKSPACE} 的文件夹,占包内存的 70%,它似乎没有任何与 lambda 函数相关的内容。 p>
我的 package.json 看起来像这样
{
"name": "my-api",
"version": "0.0.1",
"description": "API to retrieve secrets from Secrets Manager",
"license": "UNLICENSED",
"engines": {
"node": ">= 14.0.0"
},
"scripts": {
"build": "tsc -p .",
"deploy": "sls deploy"
},
"dependencies": {
"@aws-sdk/client-secrets-manager": "^3.33.0"
},
"devDependencies": {
"serverless": "^2.59.0",
"typescript": "^4.4.3"
}
}
serverless.yml 的相关部分如下所示
service: sls-my-api
useDotenv: true
variablesResolutionMode: 20210326
frameworkVersion: '2'
package:
patterns:
# Includes
- 'dist/**.js'
# Excludes
- '!./**.md'
- '!./**.env*'
- '!.github/**'
- '!.npm/**'
- '!coverage/**'
- '!docker/**'
- '!docs/**'
- '!dist/tsconfig.build.tsbuildinfo'
- '!dist/**.d.ts'
- '!src/**'
- '!test/**'
- '!.eslintrc.js'
- '!.npmrc'
- '!.prettier*'
- '!./tsconfig*.json'
- '!Jenkinsfile'
- '!jest.json'
- '!nest-cli.json'
- '!run-sonar.sh'
- '!sonar-project.properties'
- '!tslint.json'
- '!.gitattributes'
- '!.npmignore'
- '!.s2iignore'
- '!database/**'
在 Jenkins 阶段,运行以下内容
npm run build
npm run deploy
同样由于大小限制,内联编辑在 lambda 控制台上不可用,这对我来说通常是一个非常有用的操作,尤其是在无需等待重新部署即可快速测试和调试时。
目录 ${WORKSPACE} 对这次部署有任何意义吗?如果没有,我如何将它从部署包中排除并让我的 lambda 精简?
【问题讨论】:
标签: amazon-web-services jenkins aws-lambda serverless-framework