确保应用程序可以读取配置
介绍
每个现代应用都需要读取配置参数。数据库连接 URL、API 端点和暂存/生产 DNS 等信息就是我们经常存储在配置参数中的内容的很好例子。读取配置的方法有很多种,具体取决于配置的存储位置以及应用需要如何读取配置。
本指南将通过演示两种最常见的方法向您展示您的应用如何以正确的方式读取配置:从执行环境读取配置和从外部配置提供程序读取配置。
这里演示的示例在谈论从执行环境读取配置时使用dotenv (.env) 库,在谈论从外部提供商读取配置时使用AWS SSM (Systems Manager Parameter Store)。但请记住,这里演示的实践和技术适用于任何其他配置管理工具。
读取环境变量
用于存储和读取配置的最流行的工具之一是dotenv。它允许应用程序读取存储在环境变量中的配置。它的设置非常快,并且广泛应用于各种 JavaScript 应用程序的开发和生产场景。
设置Dotenv
首先,通过在应用程序的根文件夹中运行此代码,使用 NPM 安装 dotenv:
npm install dotenv
现在,创建将存储两个配置参数的文件:API URL 和数据库 URL。dotenv 提供的用于存储配置的文件简称为.env。在项目的根文件夹中创建该文件,内容如下:
API_URL=https://app.pluralsight.com/plans
DATABASE_URL=postgresql://user:123@instance.db.us-east-1.rds.amazonaws.com:5432
您可以在此.env文件中存储任意数量的配置参数。
从 Dotenv 读取
现在,允许您的应用读取此配置。为此,您只需从应用内部引入 dotenv 模块,最好在任何其他模块之前加载的文件中引入。在 Node.js 应用中,这可能位于 index.js 文件中:
require('dotenv').config();
只需使用process.env调用,即可让存储在.env文件中的所有配置参数随时在应用程序中使用。假设您想在db.js文件中使用 DATABASE_URL 配置值,例如:
import pg from 'pg';
import dotenv from 'dotenv';
const Pool = pg.Pool;
// This variable will assume the value configured at the .env file
const connectionString = process.env.POSTGRES_URL;
const pool = new Pool({
connectionString
});
很简单,不是吗?事实是,正如您可能知道的那样,如果您的应用程序由于某种原因无法读取 process.env.POSTGRES_URL配置,您的数据库操作将全部失败。让我们检查一些方法,以确保您的应用程序在您需要时能够正确读取此配置。
从 Dotenv 检查配置
一个简单实用的技术可以提高应用程序读取配置的能力,即检查应用程序启动时是否正确读取了某个配置参数,并打印一条消息。例如,在 Node index.js文件中,您只需执行以下操作即可检查这一点:
import express from 'express';
import dotenv from 'dotenv';
const app = express();
dotenv.config();
app.listen(3000, () => {
// Checking if configuration is OK
if (process.env.API_URL) {
console.log('Configuration OK');
} else {
console.log('Error: Could not read configuration parameters')
}
console.log('Server up and running');
});
启动应用程序时,如果它可以正确读取您的配置,您应该会看到以下消息:
如果由于任何原因应用程序无法读取配置,则启动时将显示消息“错误:无法读取配置参数”。
自动配置检查
确保应用成功读取配置的另一种方法是创建一个小型单元测试来检查配置是否存在。使用 Jest,您可以轻松创建此测试。您的configuration.test.js文件如下所示:
require('dotenv').config();
test('app can read configuration', () => {
const apiURL = process.env.API_URL;
const dbURL = process.env.DATABASE_URL;
expect(apiURL).not.toBeNull();
expect(apiURL).not.toBeUndefined();
expect(apiURL).toBeDefined();
expect(dbURL).not.toBeNull();
expect(dbURL).not.toBeUndefined();
expect(dbURL).toBeDefined();
});
在根文件夹使用命令npm jest运行测试时,如果您的应用程序可以成功读取配置参数,您应该会看到成功消息:
PASS ./configuration.test.js
✓ app can read configuration (7ms)
从集中存储库读取
管理 Web 应用程序中配置的另一种方法是通过外部服务,您可以将配置参数存储到集中式服务中。这样,所有需要读取配置的应用程序都会请求此外部机制提供每个配置参数的值。这种方法在有太多应用程序需要读取大量不同配置的情况下很常见。微服务架构是一个很好的例子,您可能希望使用外部化和集中式配置策略。
下一部分将介绍如何确保您的应用程序可以从AWS SSM(系统管理器)读取配置,AWS SSM 是一项允许您创建键/值参数并安全地访问它们的服务。
设置 AWS SSM 参数
使用浏览器导航到 AWS 控制台https://console.aws.amazon.com。在左上角的菜单中,搜索服务System Manager。单击搜索栏中找到的项目:
当服务页面打开时,选择参数存储。
现在单击创建参数。
要创建配置参数,请在名称字段中插入参数的名称,并在值输入中插入其值。
接下来,单击创建参数。
就这样。该参数现已创建并存储在 AWS Systems Manager 中。
从 AWS SSM 读取
现在您需要访问使用 AWS SDK 创建的参数API_URL,该参数允许您与 AWS 资源进行交互。首先,通过在 JavaScript 项目的根文件夹下运行以下命令,使用 NPM 安装 AWS SDK:
npm install aws-sdk
接下来,通过在AWS 控制台中选择您的配置文件名称 -> 我的安全凭证来获取您的 AWS 账户凭证。
在下一页上,选择访问密钥 -> 创建新访问密钥。
复制访问密钥 ID 和秘密访问密钥值,并在本地环境中导出以下环境变量,将<和>之间的值替换为您从上一步收集的值:
$ export AWS_ACCESS_KEY_ID=<YOUR_KEY_ID>
$ export AWS_SECRET_ACCESS_KEY=<YOUR_ACCESS_KEY_ID>
要读取配置参数API_URL,您首先需要调用getCredentials函数正确配置 SDK,然后从应用程序中的任何位置调用getParameter AWS SDK 函数。
<font style="vertica
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~