跳转到主要内容

使用SSM参数存储作为数据源的配置模板渲染的CLI

项目描述

SSM参数存储模板

使用SSM参数存储数据渲染模板的命令行应用程序

codecov

安装

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 打开调试日志。可能的值是 truefalse

模板配置指令

配置中的 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 环境变量设置。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源代码分发

ssm-ps-template-2.5.0.tar.gz (16.7 kB 查看散列)

上传时间 源代码

构建分发

ssm_ps_template-2.5.0-py3-none-any.whl (12.8 kB 查看散列)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面