背景
随着云计算的兴起,越来越多的 web 应用被部署到云端,并拥有多个微服务,它们需要相互通信才能完成业务逻辑。AWS 服务发现是一种全托管的服务,用于帮助用户轻松地部署、管理和发现业务中的各个组件。在使用 AWS 服务发现时,您可以动态地发现和连接您的应用程序中的已注册服务,而无需进行硬编码或进行复杂的配置。
使用步骤
安装依赖
在项目中使用 AWS 服务发现时,首先需要安装 AWS CDK。使用以下命令进行安装:
$ npm install -g aws-cdk
在项目中引入 AWS 服务发现库:
$ npm install @aws-cdk/aws-servicediscovery
创建服务
在 AWS 中,创建服务有两种方式:通过 AWS 控制台创建和使用 AWS CDK 进行创建。这里介绍使用 AWS CDK 创建服务的方式。
在项目根目录下,创建一个新的文件 service.ts
。内容如下:
-- -------------------- ---- ------- ------ - -- --- ---- ---------------- ------ - -- ---------------- ---- -------------------------------- ------ ----- --------------------- ------- --------- - ------------------ -------------- --- ------- ------- --------------- - ------------ --- ------- ----- ------- - --- ------------------------------------------ ---------- - ----- ------------------- ------------ --- ---- ------- ---------- --- - -展开代码
上述代码创建了一个名为 my-service.local
的私有 DNS 命名空间。我们可以使用此命名空间为我们的服务添加自定义名称和别名,使得其他组件可以非常容易地发现它。
注册服务
在创建服务之后,接下来需要注册服务。
-- -------------------- ---- ------- ------ - -- --- ---- ---------------- ------ - -- ---------------- ---- -------------------------------- ------ ----- --------------------- ------- --------- - ------------------ -------------- --- ------- ------- --------------- - ------------ --- ------- ----- ------- - --- ------------------------------------------ ---------- - ----- ------------------- ------------ --- ---- ------- ---------- --- ----- --------------- - --- ------------------------------ ------------------ - ---------- -------- ----- ------------- -------------- --------------------------------- ------- ----------------------- --- - -展开代码
在上述代码中,我们创建了一个命名为 my-service
的服务,并将其注册到命名空间中,记录类型为 A 记录,生存时间为 1 分钟。确保使用 DNS 记录名称注册服务。
发现服务
在注册服务之后,我们需要指定用于 AWS 服务发现的客户端。为了演示如何在 Node.js 中使用 AWS 服务发现,我们可以使用带有 AWS CDK 的 AWS Lambda 函数。在 Lambda 函数中,我们可以通过导入 @aws-sdk/client-servicediscovery
模块来使用 AWS 服务发现。
-- -------------------- ---- ------- ------ - -- --- ---- ---------------- ------ - -- ---------------- ---- -------------------------------- ------ - -- ------ ---- ----------------------------- ------ - -- ---- ---- ------- ------ - -------- - ---- ---------------- ------ ----- --------------------- ------- --------- - ------------------ -------------- --- ------- ------- --------------- - ------------ --- ------- ----- ------- - --- ------------------------------------------ ---------- - ----- ------------------- ------------ --- ---- ------- ---------- --- ----- --------------- - --- ------------------------------ ------------------ - ---------- -------- ----- ------------- -------------- --------------------------------- ------- ----------------------- --- ----- -------------- - --- --------------------------- ----------- - -------- --------------------------- ------ -------------------- ----- ------ ------------ -------- ---------- --- ----- -------------- - --- ------------------------------- ---------- ---- ----- --------- - ---------------------------------------- - ------ ---------------------------------------- --- --------------------------- -------------- -- --- ----- -------------- - --- ------------------------ ---------- - --------------- -------------- --- ----- ------------- - --- ------------------------------ ---------------- - ---------- -------- ----- ------------ --- ----- -------- - --- ------------------------------- ----------- - ----- --- --------- ------------------------------- ---- --- --- ----------------------------- - -------- ----------------- ----- --- --------- -- ------------ - --------- ------------------------- -------- ----------------------- - --- - -展开代码
上述代码创建了一个 Node.js Lambda 函数,并将其作为容器部署到 AWS Fargate 上。此外,该代码中还包含了一个 elbv2.ApplicationListener
,它作为反向代理,将来自所需请求的流量路由到我们的服务。
示例代码
-- -------------------- ---- ------- ------ - -- ---------------- ---- -------------------------------- ------ - -- --- ---- ---------- ----- -------- --------------------------- -------- ------------ - ----- --------- - --- ---------------------- ------- ---------------- --- ----- ------ - - -------------- ------------------- ------------ ----------- -- ------ --- ----------------- ------- -- - ----------------------------------- ----- ----- -- - -- ----- - ------------ - ---- - ----- --------- - --------------- -- ---------- -- ----------------- - ----- -------- - ------------- ------------------ - ---- - ---------- --------- -------- ----- --- ------- -------------------- - - --- --- -展开代码
上述示例代码为使用 AWS 服务发现查找服务的 Node.js 模块。我们可以使用 discoverInstances()
方法从 AWS 服务发现中检索实例的列表。将上述代码添加到你的项目中后,你可以通过引入该模块并在项目中使用它来发现服务:
const instance = await lookupInstance('my-service');
总结
本文对 npm 包 @aws-cdk/aws-servicediscovery 的使用进行了详细介绍,包括创建和注册服务以及发现服务的步骤。此外,本文还提供了示例代码,展示了如何在 Node.js 中使用 AWS 服务发现。AWS 服务发现可以帮助应用程序轻松地部署、管理和发现业务中的各个组件,是现代 web 应用的必备工具之一。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f6b6fd7a9b7065299ccb8f3