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 的人来说,这可能是一件好事。