Lambda 的无服务器包中是否需要包含 ${WORKSPACE} 目录?
Is it necessary to have ${WORKSPACE} directory in serverless package for Lambda?
我已经开始在 AWS 上使用无服务器框架。我的源代码在 Typescript 中,它将在部署之前构建为 JavaScript。这会上传到 S3,然后创建 lambda 函数。我注意到我的 lambda 函数超过 70MB,尽管我只有几行代码仅使用 aws-sdk 进行操作,例如查询 DynamoDB 或 SecretsManager。
为了对此进行调查,我下载了压缩文件,该文件通过无服务器框架上传到 S3 并解压缩了其内容。它有一个名为 ${WORKSPACE} 的文件夹,它占了包内存的 70%,它似乎没有任何相关内容lambda 函数。
我的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 精简?
误报!
目录 ${WORKSPACE} 是因为 Jenkins 运行 而不是因为无服务器框架而生成的。框架虽然在打包和部署应用程序时拾取它,从而使 lambda 函数变大。
如下排除它就成功了。
package:
patterns:
# Includes
- 'dist/**.js'
# Excludes
- '!${WORKSPACE}'
对于在 Jenkins 上使用无服务器 cli 的人来说,这可能是一件好事。
我已经开始在 AWS 上使用无服务器框架。我的源代码在 Typescript 中,它将在部署之前构建为 JavaScript。这会上传到 S3,然后创建 lambda 函数。我注意到我的 lambda 函数超过 70MB,尽管我只有几行代码仅使用 aws-sdk 进行操作,例如查询 DynamoDB 或 SecretsManager。
为了对此进行调查,我下载了压缩文件,该文件通过无服务器框架上传到 S3 并解压缩了其内容。它有一个名为 ${WORKSPACE} 的文件夹,它占了包内存的 70%,它似乎没有任何相关内容lambda 函数。
我的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 精简?
误报!
目录 ${WORKSPACE} 是因为 Jenkins 运行 而不是因为无服务器框架而生成的。框架虽然在打包和部署应用程序时拾取它,从而使 lambda 函数变大。
如下排除它就成功了。
package:
patterns:
# Includes
- 'dist/**.js'
# Excludes
- '!${WORKSPACE}'
对于在 Jenkins 上使用无服务器 cli 的人来说,这可能是一件好事。