Monorepo NestJS API 应用程序 + 使用无服务器的多个 AWS Lambda

问题描述 投票:0回答:1

我正在使用 monorepo 方法构建一个 NestJS API 应用程序,以将所有端点组织在一个代码库中。然而,当我将此应用程序部署到多个 AWS Lambda(每个代表不同的模块(如身份验证、用户、帖子等)),然后将它们映射到统一的 API 网关时,我面临着挑战。

在我之前的尝试中,我为每个模块创建了单独的 NestJS 项目,由于共享代码复杂性,这导致了维护噩梦。现在,我正在探索为所有模块维护单一代码库的选项。我的目标是将每个模块部署为单独的 AWS Lambda 函数,同时仍保持代码库的可管理性。

所以,这是我的主要问题:我可以使用无服务器框架来实现此设置吗?我希望为所有模块建立一个代码库,并将它们部署到单独的 AWS Lambda。此外,我的目标是将这些 Lambda 集成到单个 API 网关下,以提供统一的 API 访问点。

任何有关如何构建无服务器框架配置、如何有效管理共享代码库以及如何设置 API 网关以与这些多个 Lambda 一起使用的见解、建议或示例,我们将不胜感激。预先感谢您的帮助!

amazon-web-services aws-lambda devops serverless serverless-framework
1个回答
0
投票

创建两个存储库:一个用于您的 NestJS 应用程序,另一个用于 AWS 基础设施。

在您的 NestJS 应用程序中,添加您的 API(身份验证、用户、帖子等),但不要在那里实现它们。在这些 API 中,添加对 AWS Lambda 的调用。您的主要逻辑将按照您的要求在 Lambda 中发生。

在基础设施包中(我建议使用AWS CDK),创建一个API网关。为每个 API 端点(身份验证、用户等)创建一个资源。对于每个资源,添加方法(POST、GET)并附加 Lambda 函数。

这种方法非常易于管理。您将有两个代码包。一个用于前端,一个用于后端。

您可以添加任意数量的 API,并且您将拥有一个可以处理所有 API 的 API 网关(统一)。


统一 API 网关的 AWS CDK 示例

// API Gateway
const api = new RestApi({});

// Add resources
const auth = api.addResource('auth');
const users = api.addResource('users');

// Attach Lambda to the endpoint
auth.addMethod('POST', AuthLambdaIntegration...)
users.addMethod('POST', UserLambdaIntegration...)
© www.soinside.com 2019 - 2024. All rights reserved.