用于python的aws系统管理器参数存储缓存客户端
ssm-cache的Python项目详细描述
AWS System Manager Python参数存储缓存客户端(http://www.python.org/downloads/release/python-270/" rel="nofollow">)
该模块包装了aws参数存储,并添加了一个缓存和分组层,其中包含最长失效时间。
可以将此模块与aws lambda一起使用来读取和刷新参数和机密。您的iam角色将需要ssm:getparameters
权限(如果使用securestring
params,也可以选择kms:decrypt
。
如何安装
用pip
安装模块:
pip install ssm-cache
如何使用
最简单的用例
按名称配置的单个参数。
fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value
缓存失效
您可以在几秒钟内配置max age
,之后将自动刷新值。
fromssm_cacheimportSSMParameterparam_1=SSMParameter('param_1',max_age=300)# 5 minvalue_1=param.valueparam_2=SSMParameter('param_2',max_age=3600)# 1 hourvalue_2=param_2.value
具有多个参数
您可以将多个参数配置为作为一个组来获取/缓存/解密。
fromssm_cacheimportSSMParameterGroupgroup=SSMParameterGroup(max_age=300)param_1=group.parameter('param_1')param_2=group.parameter('param_2')value_1=param_1.valuevalue_2=param_2.value
具有分层参数
可以在给定前缀下获取/缓存一组参数。或者,组本身可以有自己的基本路径。
fromssm_cacheimportSSMParameterGroupgroup=SSMParameterGroup(base_path="/Foo")foo_bar=group.parameter('/Bar')# will fetch /Foo/Barbaz_params=group.parameters('/Baz')# will fetch /Foo/Baz/1 and /Foo/Baz/2assertlen(group)==3
注意:您可以多次调用group.parameters(…)
。如果启用了缓存,则当第一个获取的参数过期时,组的缓存将过期。
分层参数和过滤器
您可以通过参数type
和kmskeyid
进行筛选,可以手动构建筛选对象,也可以使用基于类的方法(在调用api之前提供一些附加检查)。
fromssm_cacheimportSSMParameterGroupfromssm_cache.filtersimportSSMFilterTypegroup=SSMParameterGroup()# manual filter definitionparams=group.parameters(path="/Foo/Bar",filters=[{'Key':'Type','Option':'Equals','Values':['StringList']}],)# class-based filterparams=group.parameters(path="/Foo/Bar",filters=[SSMFilterType().value('StringList')],# will validate allowed value(s))
层次参数和非递归性
通过前缀获取参数时,可以禁用递归。
fromssm_cacheimportSSMParameterGroupgroup=SSMParameterGroup()# will fetch /Foo/1, but not /Foo/Bar/1params=group.parameters(path="/Foo",recursive=False,)
使用stringlist参数
stringlist
参数(此处的文档)将自动转换为python列表,无需其他配置。
fromssm_cacheimportSSMParameter# "my_twitter_api_keys" is a StringList parameter (four comma-separated values)twitter_params=SSMParameter('my_twitter_api_keys')key,secret,access_token,access_token_secret=twitter_params.value
显式刷新
可以手动强制刷新参数或参数组。 请注意,如果参数是组的一部分,则刷新操作将涉及整个组。
fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.valueparam.refresh()new_value=param.value
pip install ssm-cache0
不解密
默认情况下会启用解密,但您可以显式禁用它(适用于ssmpareter
和ssmgroup
)。
pip install ssm-cache1
AWS Secrets Manager集成
您可以使用secretsmanagerparameter
类透明地读取aws secrets manager机密,该类与ssmparameter
具有相同的接口,并执行一些附加的前缀和验证。离子:
pip install ssm-cache2
机密也可以添加到ssmparametergroup
中,但不应用组前缀。
pip install ssm-cache3
版本控制支持
SSM参数存储支持版本选择器(此处是文档)。
默认情况下,如果未指定最新版本,则会获取该版本。
以下是如何检索特定参数版本:
pip install ssm-cache4
请注意,调用param.refresh()
不会获取较新版本。这是预期的行为,因为只有在需要特定参数版本时才应使用版本选择。
如果不指定任何版本,则始终可以读取参数的当前版本。在这种情况下,调用param.refresh()
将调用新版本。
pip install ssm-cache5
与AWS Lambda一起使用
您的aws lambda代码将类似于下面的代码片段。
pip install ssm-cache6
基于"信号"的复合失效
当您认为缓存值已过期时,可能需要显式刷新参数缓存。
在下面的示例中,当检测到InvalidCredentials
异常时,我们会刷新参数值(有关更简单的版本,请参见decorator utility)
pip install ssm-cache7
装饰工具
上面显示的重试逻辑可以通过每个ssmparameter
和ssmparametergroup
对象提供的decorator方法来简化。
@refresh\u on\u错误
decorator将进入tercept errors(或特定的error_类
,如果给定),刷新参数值,并尝试重新调用修饰函数。或者,您可以提供一个回调
参数来实现您自己的逻辑(在下面的示例中,使用新密码创建一个新的db客户机)。
pip install ssm-cache8
refresh_on_error
装饰符支持以下参数:
- 错误类(默认值:
异常
) - 错误回调(默认值:
无
) - 重试参数(默认值:
"是重试"
)
更换SSM客户端
如果要替换默认的boto3
ssm client,ssmparameter
允许您调用set\ussm\u client
并提供自己的boto3
client甚至自定义对象。请注意,此类自定义对象需要实现两种方法:get_parameters
和get_parameters_by_path
例如,以下是您如何为本地测试注射安慰剂的客户:
pip install ssm-cache9
如何贡献
克隆此存储库,创建一个virtualenv并安装所有开发依赖项:
fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value0
您可以使用nose
:
fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value1
生成覆盖率报告:
fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value2
运行pylint:
fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value3
注意:当您打开一个新的pr时,github将在多个python环境中运行测试,并为您验证新的覆盖范围,但是我们强烈建议您在提交新代码之前在本地运行这些任务。
有什么新消息?
- 2.9版:错误修复、版本控制支持、使用Python3.7进行测试
- 2.8版:错误修复、新测试、修复travis构建配置
- 2.7版:支持AWS Secrets Manager集成
- 版本2.5:分层参数、筛选器和非递归性支持
- 版本2.3:StringList参数支持(自动转换)
- 2.2版:客户更换和BOTO3/BOTOCORE最低要求
- 2.1版:组刷新错误修复程序
- 2.0版:新接口,
ssmparametergroup
支持 - 1.3版:python3支持
- 1.0版:初始版本
参考文献和文章
- 应该在lambda-env变量上使用ssm parameter store由Yan Cui(类似的node.js实现)
- AWS系统管理器参数存储文档