AWS SSM 参数存储 Secrets 后端¶
要启用 SSM 参数存储,请在 airflow.cfg
的 [secrets]
部分将 SystemsManagerParameterStoreBackend
指定为 backend
。
以下是一个示例配置
[secrets]
backend = airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"connections_lookup_pattern": null,
"variables_prefix": "airflow/variables",
"variables_lookup_pattern": null,
"config_prefix": "airflow/config",
"config_lookup_pattern": null,
"profile_name": "default"
}
要进行身份验证,您可以提供 Amazon Web Services 连接额外配置 中列出的参数,或者设置环境变量。
[secrets]
backend = airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"variables_prefix": "airflow/variables",
"config_prefix": "airflow/config",
"role_arn": "arn:aws:iam::123456789098:role/role-name"
}
可选查找¶
您可以选择相互独立或任意组合地查找连接、变量或配置。这将阻止向 AWS SSM 参数存储发送针对被排除类型的请求。
如果您想在 AWS SSM 参数存储中查找某些类型而非其他类型,可以通过将要排除的类型的相关 *_prefix
参数设置为 null
来实现。
例如,如果您想将参数 connections_prefix
设置为 "airflow/connections"
,并且不查找变量和配置,您的配置文件应如下所示
[secrets]
backend = airflow.providers.amazon.aws.secrets.systems_manager.SystemsManagerParameterStoreBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"variables_prefix": null,
"config_prefix": null,
"profile_name": "default"
}
如果您只想在 AWS Secrets Manager 中查找特定子集的连接、变量或配置,可以通过设置相关的 *_lookup_pattern
参数来实现。此参数接受一个字符串形式的正则表达式作为值。
例如,如果您只想在 AWS Secrets Manager 中查找以“m”开头的连接,您的配置文件应如下所示
[secrets]
backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"connections_lookup_pattern": "^m",
"profile_name": "default"
}
存储和检索连接¶
如果您已将 connections_prefix
设置为 /airflow/connections
,那么对于连接 ID 为 smtp_default
的连接,您会希望将其存储在 /airflow/connections/smtp_default
。
您可以选择提供一个 profile 名称来引用 AWS profile,例如定义在 ~/.aws/config
中。
SSM 参数的值必须是连接对象的连接 URI 表示形式或JSON 格式。
在某些情况下,您需要存储在 AWS SSM 参数存储中的 URI 可能不直观,例如在使用 HTTP / HTTPS 或 SPARK 时,您可能需要像这样的 URI
http://https%3A%2F%2Fexample.com
spark://spark%3A%2F%2Fspark-main-0.spark-main.spark:7077
这是一个已知情况,URI 的 schema 和协议部分是独立的,在某些情况下需要明确指定。
有关导致本次文档更新的更详细讨论,请参阅 GitHub issue #10256 和 #10913。这可能在未来得到解决。
相同的连接可以在 AWS SSM 参数存储中表示为 JSON 对象
{"conn_type": "http", "host": "https://example.com"}
{"conn_type": "spark", "host": "spark://spark-main-0.spark-main.spark", "port": 7077}
存储和检索变量¶
如果您已将 variables_prefix
设置为 /airflow/variables
,那么对于变量键 hello
,您会希望将其存储在 /airflow/variables/hello
。
您可以选择提供一个 profile 名称来引用 AWS profile,例如定义在 ~/.aws/config
中。