【问题标题】:Is it necessary to have ${WORKSPACE} directory in serverless package for Lambda?Lambda 的无服务器包中是否需要有 ${WORKSPACE} 目录?
【发布时间】: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


    【解决方案1】:

    误报!

    ${WORKSPACE} 目录是因为 Jenkins 运行而不是因为无服务器框架而生成的。框架虽然在打包和部署应用程序时捡起它,从而使 lambda 函数变得庞大。

    按以下方式排除它就可以了。

    package:
      patterns:
        # Includes
        - 'dist/**.js'
        # Excludes
        - '!${WORKSPACE}'
    

    对于在 Jenkins 上使用无服务器 cli 的人来说,这可能是一件好事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      相关资源
      最近更新 更多