0

我想使用 codebuild 打包一个 lambda 层。

我的代码构建构建规范如下:

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 10  
    commands:
      - npm init -y
      - npm install --save middy
artifacts:
  files:
    - 'node_modules/**/*'
    - 'package-lock.json'
    - 'package.json'

这会将一个nodejs.zip文件夹保存到我的 s3 存储桶中

生成的 zip 文件如下所示:

文件夹目录

米迪来了

package.json 如下:

{
  "name": "src",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "middy": "^0.30.4"
  }
}

但是,当我将此层添加到我的 lambda (node10.x)

并导入我的模组:

'use strict';
var AWS = require('aws-sdk');
const middy = require('middy')
const { cors } = require('middy/middlewares')

返回以下错误:

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module 'middy'\nRequire stack:\n- /var/task/function_code/verify_zipcode.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module 'middy'",
    "Require stack:",
    "- /var/task/function_code/verify_zipcode.js",
    "- /var/runtime/UserFunction.js",
    "- /var/runtime/index.js",
    "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
    "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
    "    at Object.<anonymous> (/var/runtime/index.js:43:30)",
    "    at Module._compile (internal/modules/cjs/loader.js:956:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)",
    "    at Module.load (internal/modules/cjs/loader.js:812:32)",
    "    at Function.Module._load (internal/modules/cjs/loader.js:724:14)",
    "    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)",
    "    at internal/main/run_main_module.js:17:11"
  ]
}

添加环境变量: NODE_PATH : ./:/opt/node_modules让我的 lambda 访问我的层,但失去了上下文aws-sdk

添加环境变量后,出现以下错误:

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module 'aws-sdk'\nRequire stack:\n- /var/task/function_code/verify_zipcode.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module 'aws-sdk'",
    "Require stack:",
    "- /var/task/function_code/verify_zipcode.js",
    "- /var/runtime/UserFunction.js",
    "- /var/runtime/index.js",
    "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
    "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
    "    at Object.<anonymous> (/var/runtime/index.js:43:30)",
    "    at Module._compile (internal/modules/cjs/loader.js:956:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)",
    "    at Module.load (internal/modules/cjs/loader.js:812:32)",
    "    at Function.Module._load (internal/modules/cjs/loader.js:724:14)",
    "    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)",
    "    at internal/main/run_main_module.js:17:11"
  ]
}

有没有办法同时使用本机aws-sdk和我的图层?或者我是否需要在aws-sdk使用其他自定义图层时使用图层?

4

1 回答 1

2

node.js 层(在您的示例中为 nodejs.zip)的目录结构应为:

├── nodejs
  └── package.json
  └── node_modules
          └── middy(version z.z.z)

更新您的 buildspec 文件以添加父 nodejs 文件夹:

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 10  
    commands:
      - mkdir nodejs           # NEW LINE
      - cd nodejs              # NEW LINE
      - npm init -y
      - npm install bcrypt

artifacts:
  files:
    - 'nodejs/**/*'            # CHANGE LINE
    - 'package.json'

并删除环境变量: NODE_PATH

于 2019-11-24T14:29:40.370 回答