使用SSM参数存储作为数据源的配置模板渲染的CLI
项目描述
SSM参数存储模板
使用SSM参数存储数据渲染模板的命令行应用程序
安装
ssm-ps-template
应用程序可通过Python包索引获取,并可以使用pip进行安装
pip install ssm-ps-template
模板化
应用程序使用Jinja2作为模板引擎。应用程序默认公开了Jinja2模板的所有可用功能。
使用前缀
应用程序默认前缀为/
,会添加到不以斜杠开头(/
)的参数名称之前。
此功能允许您在路径前缀下分组变量,例如/my-application/settings
,然后仅引用单个键值,如password
,而不是引用完整的路径/my-application/settings/password
。
如果您以斜杠开头引用参数名称,则不会将前缀添加到参数名称中。
获取参数存储值
应用程序在模板中公开get_parameter(name: str, default: typing.Optional[str] = None)
以访问SSM参数存储中的值。
以下示例中,我们假设存在用于键 /my-application/foo
和 /my-application/bar
的参数存储值,并且应用程序使用前缀 /my-appliction
调用。
foo: {{ get_parameter('/my-application/foo') }}
bar: {{ get_parameter('/my-application/bar') }}
将呈现为:
foo: bar
baz: qux
此外,还有一个公开的函数 get_parameters_by_path(path: str, default: typing.Optional[dict] = None)
,它将返回指定路径的字典。
以下示例将遍历结果
{% for key, value in get_parameters_by_path('settings/', {}).items() %}
{{ key }}: {{ value }}
{% endfor %}
或者,您可以使用 Jinja 过滤器将它们转换为 YAML
{{ get_parameters_by_path('settings/') | path_to_dict | toyaml | indent(2, first=True) }}
对于存储为 StringList
的参数存储中的值,它们将被自动转换为字符串列表。以下是一个值示例
键 | 值 |
---|---|
/my-application/connections |
amqp://server1, amqp://server2 |
以下模板
Connections:
{% for connection in get_parameter('/my-application/connections', []) %}
- {{ connection }}
以下将呈现为
Connections:
- amqp://server1
- amqp://server2
性能考虑因素
参数名称在预处理步骤中收集,以最小化对 SSM 参数存储的调用。
配置
配置文件提供指定多个模板、覆盖 AWS 配置和更改日志级别的功能。
顶级配置指令
指令 | 描述 |
---|---|
templates |
下一个表中详细说明的模板指令数组。 |
endpoint_url |
指定要用于覆盖用于联系 SSM 参数存储的默认 URL 的端点 URL。 |
profile |
指定要使用的 AWS 配置文件。如果未指定,则默认为 AWS_DEFAULT_PROFILE 环境变量或未指定。 |
region |
指定要使用的 AWS 区域。如果未指定,则默认为 AWS_DEFAULT_REGION 环境变量或未指定。 |
replace_underscores |
在从 SSM 参数存储请求值时,将下划线替换为短划线。 |
verbose |
打开调试日志。可能的值是 true 和 false 。 |
模板配置指令
配置中的 templates
指令是对象数组。
指令 | 描述 |
---|---|
source |
模板的源文件。 |
destination |
要将渲染的模板写入的路径。 |
prefix |
如果变量不以正斜杠(/ )开头,则将前缀附加到变量前。 |
user |
可选的用户名或 uid,将其设置为渲染文件的拥有者。 |
group |
可选的组或 gid,将其设置为渲染文件的组。 |
mode |
使用 chmod 设置的文件模式或权限(可选)。 |
如果 destination
路径中存在父目录且不存在,则将创建它们。
扩展模板功能
除了 Jinja2 公开的基功能外,还添加了以下 Python 函数。
函数 | 定义 |
---|---|
get_parameter |
从 SSM 参数存储获取字符串值。 |
get_parameters_by_path |
从 SSM 参数存储获取字典值。 |
urlparse |
Python 标准库中的 urllib.parse.urlparse 函数。 |
parse_qs |
Python 标准库中的 urllib.parse.parse_qs 函数。 |
unquote |
Python 标准库中的 urllib.parse.unquote 函数。 |
以下过滤器已添加:
过滤器 | 描述 |
---|---|
coerce_types |
递归地将数据结构中的布尔值、整数和 NULL 从字符串强制转换为类型。 |
dashes_to_underscores |
递归地将数据结构中由 get_parameters_by_path 返回的键中的短划线替换为下划线。 |
fromjson |
将 JSON 块转换为数据结构。 |
fromyaml |
将 YAML 块转换为数据结构 |
path_to_dict |
将使用正斜杠(/)分隔键的字典转换为嵌套字典,其中使用正斜杠(/)作为键分隔符 |
toyaml |
将字典值转换为 YAML |
以下变量被公开
变量 | 定义 |
---|---|
environ |
用于访问环境变量的 os.environ 字典 |
配置文件格式
应用程序支持 JSON、TOML 或 YAML 作为配置文件格式。以下示例使用 YAML 格式
示例配置文件
templates:
- source: /etc/ssm-templates/nginx-example
destination: /etc/nginx/sites-available/example
prefix: /namespaced/application/nginx/
- source: /etc/ssm-templates/postgres-example
destination: /etc/postgresql/14/main/postgresql.conf
prefix: /namespaced/application/postgres/
user: postgres
group: postgres
mode: 0600
profile: default
region: us-east-1
verbose: false
命令行用法
usage: ssm-ps-template [-h] [--aws-profile AWS_PROFILE] [--aws-region AWS_REGION] [--endpoint-url ENDPOINT_URL] [--prefix PREFIX] [--replace-underscores]
[--verbose] [--version]
config
Command line application to render templates with data from SSM Parameter Store
positional arguments:
config
optional arguments:
-h, --help show this help message and exit
--aws-profile AWS_PROFILE
AWS Profile (default: None)
--aws-region AWS_REGION
AWS Region (default: None)
--endpoint-url ENDPOINT_URL
Specify an endpoint URL to use when contacting SSM Parameter Store. (default: None)
--prefix PREFIX Default SSM Key Prefix (default: /)
--replace-underscores
Replace underscores in variable names to dashes when looking for values in SSM (default: False)
--verbose
--version show program's version number and exit
注意,默认的 SSM 前缀也可以通过 PARAMS_PREFIX
环境变量设置,端点 URL 可以通过 SSM_ENDPOINT_URL
环境变量设置。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。