gpt4 book ai didi

amazon-web-services - Azure 提供商中的 AWS lambda 层相当于什么?

转载 作者:行者123 更新时间:2023-12-02 07:42:43 24 4
gpt4 key购买 nike

问题

我有一个独立的 aws serverless 后端项目,它利用 lambda 层概念来共享 node_modules 和其他自定义依赖项

在我的案例中,自定义依赖项的用例之一是拥有所有常见代码,例如用于状态代码的 HTTP_STATUS_CODE 枚举和 Api 响应 util 以及续集模型和服务稍后复制到 node_modules 并将其托管到 s3 存储桶

的文件夹

文件夹结构

.
├── customDependencies
│   └── nodejs
│   └── sequelizeORM
│   ├── config
│   ├── migrations
│   ├── models
│   ├── seeders
│   └── services
├── node_modules
└── src
├── functions
   ├── func1
   ├── func2
  ├── func3


在将函数部署到 AWS 提供商之前,我将所有文件从 customDependency 复制到 node_modules 并将此 node_modules 推送到 S3 并创建所有 lambda 函数都引用 node_modules

的层资源

使用通用代码的函数示例

//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 层概念。

我尝试过的

我尝试使用此 cp -r customDependency/nodejs/* node_modulescustomDependency/nodejs 内的所有文件复制到 node_modules 我也有serverless-webpack 作为插件安装,它使用下面给出的 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: [
],
};

当我尝试无服务器包时,webpack 无法找到自定义依赖项

例如我收到警告

无法确定模块 api_response_utils.js 的版本

后跟一个错误

我通过从 webpack 配置中删除 externals 属性修复了此错误。

这是我所做的解决方法,部署工作正常,但我想知道是否有更好的方法将AWS Lambda Layers概念复制到azure。

最佳答案

在 AWS 中,这些层是可重用的代码,可以由多个 Lambda 使用(我相信也可以跨 AWS 账户)。这里有一些限制,每个 Lambda 最多 5 层,层数应小于 250MB。

在 Azure 中,情况略有不同,您可以在函数应用程序中部署多个函数,并且函数应用程序中的所有函数都可以使用相同的包(共享代码)。代码不能在不同的功能应用程序之间共享,这是关键部分。部署包没有限制。

关于amazon-web-services - Azure 提供商中的 AWS lambda 层相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72005804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com