Bedrock YAML 配置 (@bedrock/config-yaml)
此模块将 YAML 配置合并到 bedrock.config. YAML 值
可以在应用程序模块配置后添加或覆盖值
贝德洛克 配置可以来自文件、环境变量或函数
由申请注册.
在没有环境配置或活动注册源的情况下,Bedrock读取 已配置 YAML 文件 。 如果这些文件丢失,则继续启动 应用程序的配置.
安装
这个软件需要并支持维持了最新版本的Node.js. 更新可能会去除对旧的未维护的平台版本的支持. 请使用 依赖版本锁定文件和测试以确保与此兼容 软件.
国家预防机制
通过国家预防机制安装:
npm install --save @bedrock/config-yaml
发展
在当地安装(用于开发):
git clone https://github.com/digitalbazaar/bedrock-config-yaml.git
cd bedrock-config-yaml
npm install
使用量
为了确保没有其他模块能够推翻YAML配置,
bedrock-config-yaml 应该是上次导入 bedrock.start() 实值
电话 若为 bedrock-config-yaml 不是最后一个 bedrock-cli.parsed 或者说
bedrock.configure 事件处理器,将丢出一个可以防止
应用程序启动.
不同时应用两个独立的配置文件
bedrock 启动期间发生的事件 : core 财务报告和审定财务报表 app。 。 。 .
核心配置
这个 core 配置用于配置核心贝德罗克特性,例如:
工人人数或默认的日志。 这个 core 配置应用于
最后一个处理器 bedrock-cli.parsed 活动。 默认位置
页:1 core 配置为 : /etc/bedrock-config/core.yaml。 。 。 .
样本 core.yaml
core:
workers: 2
loggers:
console:
bedrock:
formatter: logstash
App 配置
这个 app 配置用于配置 Bedrock 应用程序/模块特性.
这个 app 配置由最后一个处理器应用 bedrock.configure
活动。 默认位置 app 配置为 :
/etc/bedrock-config/app.yaml。 。 。 .
样本 app.yaml
test-bedrock-module:
foo: fromYaml
overwriteMe: fromYaml
another-bedrock-module:
host: example.com
port: 18443
从环境变量装入
可以装入配置 YAML 从一个 BEDROCK_CONFIG 环境
变量。 该值是整个YAML配置文件的基数64编码版本.
如果找到此变量, 将跳过基于文件系统配置设置 .
从压缩环境变量装入中
配置 YAML 也可以从 BEDROCK_CONFIG_GZIP 环境
变量。 值是整个 YAML 配置文件, gzipped 和 碱基64
已编码。 当配置被存储在有大小限制的地方时,这个是有用的,
例如AWS保密管理器秘密,将存储值限制在64 KB;
YAML和PEM文本一般由大约3-4x压缩.
要产生一个值:
gzip -c config.yaml | base64
检查一个:
echo "$BEDROCK_CONFIG_GZIP" | base64 -d | gunzip
只有一个 BEDROCK_CONFIG_GZIP 或者说 BEDROCK_CONFIG 可能设定。 设置两者
模棱两可,启动时失败,而不是默默地忽略其中之一.
严格解码值:如果 BEDROCK_CONFIG_GZIP 设置但无效
gzip, a 启动失败 BEDROCK_CONFIG_GZIP is invalid 错误而不是
倒计时 BEDROCK_CONFIG时 BEDROCK_CONFIG_GZIP 是未设置的,
BEDROCK_CONFIG 补给基地64编码为YAML.
配置来源
一个应用程序可以注册一个能加载其合并的YAML配置的函数.
导入 @bedrock/config-yaml 在调用前最后并注册该函数
bedrock.start()数字 :
import * as bedrock from '@bedrock/core';
import {readFile} from 'node:fs/promises';
// import application modules here
// load YAML after the application's configuration handlers
import {addConfigurationSource} from '@bedrock/config-yaml';
addConfigurationSource({
name: 'deployment',
getConfig: async () => readFile('/etc/deployment.yaml', 'utf8')
});
bedrock.start();
name 必须是独特的 getConfig 必须是函数。 函数返回
YAML 带一个 core 节,a app 或两者兼有:
core:
core:
workers: 1
app:
server:
port: 8080
每个功能在启动期间每个进程都称为一次. 贝德洛克在等着
函数,并对两个配置事件使用相同的解析文档.
适用 core 期间 bedrock-cli.parsed 财务报告和审定财务报表 app 期间
bedrock.configure。配置值变压器在这些部分工作.
来源按登记顺序合并。 后续源覆盖匹配
来自早先来源的数值。 返回时 null 或者说 undefined 以跳过源代码.
如果全部来源被跳过, Bedrock 将载入配置的 YAML 文件 。 如果有的话
BEDROCK_CONFIG 或者说 BEDROCK_CONFIG_GZIP 设定, Bedrock 使用该环境
不调用注册来源的配置 .
在配置加载前注册源 。 重复姓名和登记 在加载开始后,会引发错误。 丢出或返回无效的源 YAML停止启动.
配置值转换器
配置可以使用 变压器, (中文(简体) ),
答复 $NAME 键 :
database:
password: {$SECRET: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:db-Ab1'}
host: {$ENV: DB_HOST}
port: {$ENV: {name: DB_PORT, type: number, default: 5432}}
同样的语法在JSON中有效,因为YAML是其中的一集:
{
"database": {
"host": {"$ENV": "DB_HOST"},
"port": {"$ENV": {"name": "DB_PORT", "type": "number", "default": 5432}}
}
}
指令是一个对象 仅限 键为 $ 然后是大写
变压器的名称。 只保留大写名称,所以 {$ref: ...}, (中文(简体) ),
{$schema: ...},和 MongoDB 样式 {$gt: 5} 仍然是普通配置值。 A 类
指令密钥与其他密钥共享对象是一个错误并失败
负载而不是被默默地视为一个值.
指令在解析后解决,然后合并为
bedrock.config,也可能是aync, 这使得远程的外观像
上面的一个可能。 除了内在 env,该模块
变压器;应用程序自行提供. 一个没有使用配置的配置被解析
像以前一样合并.
启用变形器
变压器必须都是 登记 应用代码和 允许 以
页:1 config-yaml.transformers.allow 相会. 登记通常是一边的
导入的效果; 允许列表是实际打开的变压器 .
默认情况下, 绝不允许 :
import * as bedrock from '@bedrock/core';
// application code that registers `secret`, `ssm`, and `kms-decrypt`
import './lib/aws-transformers.js';
import '@bedrock/config-yaml';
// only these two may be used by a config; `true` allows all registered
bedrock.config['config-yaml'].transformers.allow = ['env', 'secret'];
未注册或不允许启动的变压器 作为未解决的对象留在配置中.
可能设置部署配置 config-yaml.transformers 本身,所以操作员
可以在不改变应用程序的情况下启用变压器:
config-yaml:
transformers:
allow: ['env']
使用配置符的设置,在同一指令之前使用
配置已解决, a core 配置的设置适用于 app 配置
跟着它.
因此,登记是安全边界:一个配置只能使
应用程序已经注册的变压器,以及 env 是唯一一个
本模块自行登记。 许可列表是操作切换
那个套.
内建 env 变形器
$ENV 读取环境变量。 它是默认注册的,但是,像任何
变压器,必须在允许列表中添加后才能被使用.
host: {$ENV: DB_HOST} # required; fails if unset
port: {$ENV: {name: DB_PORT, type: number}} # string, number, boolean, json
debug: {$ENV: {name: DEBUG, type: boolean, default: false}}
除非 type 被赋予,所以 {$ENV: WORKERS} 产量 "2", (中文(简体) ),
没有 2。一个没有设置的变量 default 失败配置负载而不是
默默地变得 undefined。 。 。 .
$ENV 让控制配置的人读取 任意 环境变量和
把它放在任何配置中。 缩小范围:
config['config-yaml'].transformers.env.allow = ['DB_HOST', /^MYAPP_/];
写入变形器
import {registerTransformer, TransformError} from '@bedrock/config-yaml';
registerTransformer({
name: 'secret', // used as `{$SECRET: ...}`
kinds: ['scalar', 'mapping'], // value shapes accepted; default: ['scalar']
async transform({value, path, settings, configType, signal}) {
return await fetchSecret(value, {signal});
}
});
transform 接收指令的值为 value 并可以还原任何价值,
包括扩展为配置子树的对象。 它可能是同步或
并必须在 bedrock.start() 名为. settings 实值
这个变压器自己的配置,从 config-yaml.transformers.<name> - 说吧
同一个地方的内置 env 读取 env.allow 从.
指令可能是嵌入式的,最内向的,所以变压器总是得到 完全解析后输入 :
apiKey: {$BASE64: {value: {$SECRET: 'arn:aws:secretsmanager:...:b64-key-Ab1'}}}
变形器错误用变形器名称和配置路径报告,永远不要
值; 基本错误记录在 debug 换作水平。 A 类
变压器可能抛出一个 TransformError 以添加失败的原因, 这必须
不包含配置值或解密:
Failed to load config: config transformer "$ENV" at "database.host" requires
the "DB_HOST" environment variable, which is not set
其他设置
// bounds the whole resolution pass, so a hung lookup fails startup
config['config-yaml'].transformers.timeout = 30000;
// resolve identical directives, e.g. the same secret, once per load
config['config-yaml'].transformers.cache = true;
许可证
Apache 许可证,2.0版本 版权:2011-2026 Digital Bazaar, Inc.
其他贝德罗克图书馆可使用非商业许可证 诸如自学、研究、个人项目或评价目的. 见 Bedrock 非商业许可证 v1.0 详细情况.
商业许可证和通过联系获得支助 数字集市 支持@ digitalbazaar.com。 。 。 .