用于python的aws系统管理器参数存储缓存客户端

ssm-cache的Python项目详细描述


AWS System Manager Python参数存储缓存客户端(http://www.python.org/downloads/release/python-270/" rel="nofollow">python 2.7python 3.6python 3.7

构建状态coverage statuspypi versiongithub licensemaintenancegithub issues开源爱情svg2github stars

该模块包装了aws参数存储,并添加了一个缓存和分组层,其中包含最长失效时间。

可以将此模块与aws lambda一起使用来读取和刷新参数和机密。您的iam角色将需要ssm:getparameters权限(如果使用securestringparams,也可以选择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-cache
0

不解密

默认情况下会启用解密,但您可以显式禁用它(适用于ssmpareterssmgroup)。

pip install ssm-cache
1

AWS Secrets Manager集成

您可以使用secretsmanagerparameter类透明地读取aws secrets manager机密,该类与ssmparameter具有相同的接口,并执行一些附加的前缀和验证。离子:

pip install ssm-cache
2

机密也可以添加到ssmparametergroup中,但不应用组前缀。

pip install ssm-cache
3

版本控制支持

SSM参数存储支持版本选择器(此处是文档)。

默认情况下,如果未指定最新版本,则会获取该版本。

以下是如何检索特定参数版本:

pip install ssm-cache
4

请注意,调用param.refresh()不会获取较新版本。这是预期的行为,因为只有在需要特定参数版本时才应使用版本选择。

如果不指定任何版本,则始终可以读取参数的当前版本。在这种情况下,调用param.refresh()将调用新版本。

pip install ssm-cache
5

与AWS Lambda一起使用

您的aws lambda代码将类似于下面的代码片段。

pip install ssm-cache
6

基于"信号"的复合失效

当您认为缓存值已过期时,可能需要显式刷新参数缓存。

在下面的示例中,当检测到InvalidCredentials异常时,我们会刷新参数值(有关更简单的版本,请参见decorator utility

pip install ssm-cache
7

装饰工具

上面显示的重试逻辑可以通过每个ssmparameterssmparametergroup对象提供的decorator方法来简化。

@refresh\u on\u错误decorator将进入tercept errors(或特定的error_类,如果给定),刷新参数值,并尝试重新调用修饰函数。或者,您可以提供一个回调参数来实现您自己的逻辑(在下面的示例中,使用新密码创建一个新的db客户机)。

pip install ssm-cache
8

refresh_on_error装饰符支持以下参数:

  • 错误类(默认值:异常
  • 错误回调(默认值:
  • 重试参数(默认值:"是重试"

更换SSM客户端

如果要替换默认的boto3ssm client,ssmparameter允许您调用set\ussm\u client并提供自己的boto3client甚至自定义对象。请注意,此类自定义对象需要实现两种方法:get_parametersget_parameters_by_path

例如,以下是您如何为本地测试注射安慰剂的客户:

pip install ssm-cache
9

如何贡献

克隆此存储库,创建一个virtualenv并安装所有开发依赖项:

fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value
0

您可以使用nose

fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value
1

生成覆盖率报告:

fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value
2

运行pylint:

fromssm_cacheimportSSMParameterparam=SSMParameter('my_param_name')value=param.value
3

注意:当您打开一个新的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版:初始版本

参考文献和文章

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何让ruby和maven协同工作   如何从Java代码中调用Excel VBA宏?   java是公共类的默认成员   java Android TextToSpeech总是无法运行   导入JAVA包的类不存在   java中有很多JSP/Servlet应用程序示例,为什么是。使用inc扩展代替。包含的jsp?   tomcat向JavaWebApp添加JAR   java如何在MySQL中向表中插入变量   java在Spring web app中找不到类[org.springframework.scheduling.quartz.SchedulerFactoryBean]   swing Java GUI布局建议   java Google HTTP库JSON解析,空值默认为True   java使用Eclipse和Apache Tomcat 9.0开发聊天机器人   java我可以使用vmware软件包更改虚拟机的IP地址吗?   java在单击“后台运行”后返回进度监视器对话框   java uibinder onload not调用   java Spring数据分页和排序存储库的工作原理