问题
我有一个独立的项目
aws无服务器
后端,利用lambda layers概念共享
node_modules
和其他
custom dependencies
。
在我的例子中,自定义依赖项的一个用例包含所有常见代码,如
HTTP_STATUS_CODE
枚举和
Api responses util
用于状态代码和sequelize models and services,该文件夹稍后复制到
node\u模块
并将其托管到
s3 bucket
文件夹结构
.
âââ customDependencies
â  âââ nodejs
â  âââ sequelizeORM
â  âââ config
â  âââ migrations
â  âââ models
â  âââ seeders
â  âââ services
âââ node_modules
âââ src
âââ functions
  âââ func1
  âââ func2
 âââ func3
在将函数部署到AWS提供程序之前,我复制了
customDependencies
到
node\u模块
然后推这个
node\u模块
到S3并创建一个层资源,其中所有lambda函数都引用
node\u模块
使用公共代码的函数示例
//func1
import {HTTP_STATUS_CODE, stringifyResponse} from "api_response_utils"
/*
api_response_utils is referenced from a lambda layer
*/
export const handler = (ctx) => {
stringifyResponse(HTTP_STATUS_CODE.SUCCESS,ctx.req.body)
}
//-----------------
//func2
import {HTTP_STATUS_CODE, stringifyResponse} from "api_utils"
export const handler = (ctx) => {
stringifyResponse(HTTP_STATUS_CODE.SUCCESS,ctx.req.body)
}
我在azure环境中实现此功能时遇到问题。
我想要实现的目标
我想知道是否有任何方法可以在azure中复制lambda层的概念。
我试过的
我试着复制里面的所有文件
customDependencies/nodejs
到
node\u模块
用这个
cp -r customDependencies/nodejs/* node_modules
我也有
serverless-webpack
作为插件安装,使用此
webpack config
如下所示。
网页包。配置。js公司
const path = require("path");
const slsw = require("serverless-webpack");
const nodeExternals = require("webpack-node-externals");
module.exports = {
context: __dirname,
mode: slsw.lib.webpack.isLocal ? "development" : "production",
entry: slsw.lib.entries,
devtool: slsw.lib.webpack.isLocal
? "source-map"
: "eval-cheap-module-source-map",
externals: [nodeExternals()],
resolve: {
extensions: [".mjs", ".json", ".ts", ".js"],
symlinks: false,
cacheWithContext: false,
},
stats: {
errorDetails: true,
},
output: {
libraryTarget: "commonjs",
path: path.join(__dirname, ".webpack"),
filename: "[name].js",
},
externalsPresets: { node: true },
module: {
rules: [
// all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
{
test: /\.(tsx?)$/,
loader: "ts-loader",
exclude: [
[
path.resolve(__dirname, "node_modules"),
path.resolve(__dirname, ".serverless"),
path.resolve(__dirname, ".webpack"),
],
],
options: {
transpileOnly: true,
experimentalWatchApi: true,
},
},
],
},
plugins: [
],
};
当我尝试时
serverless package
Web包无法找到自定义依赖项
例如,我收到一条警告
Could not determine version of module api_response_utils.js
后跟一个错误
我通过删除
externals
属性来自
webpack
配置。
这是我做的一个变通方法,部署工作正常,但我想知道是否有更好的方法来复制
AWS Lambda层
azure的概念。