允许您从aws参数存储读取参数,并对结果进行字典操作。
ssmenv的Python项目详细描述
ssmenv
master | coverage | PyPI | Python | Licence |
---|---|---|---|---|
ssmenv允许您从AWS Parameter Store中读取参数,并像在字典中那样对结果进行操作。
安装
唯一的要求是安装boto3
。
pip install ssmenv
读取参数
假设在/service/my-service
名称空间下有两个参数token
和url
。
读取这两个参数就像初始化类对象一样简单。
fromssmenvimportSSMEnvparams=SSMEnv("/service/my-service")
完成!现在我们可以在params
变量中访问/service/my-service/token
和/service/my-service/url
!
现在params
可以作为python dict
类型访问。
与SSMEnv
实例交互
如您现在所知,python中的SSMEnv
实例可以作为任何dict
访问,这意味着您可以执行如下操作:
fromssmenvimportSSMEnvparams=SSMEnv("/service/my-service")# 1. Access value directlytoken=params["SERVICE_MY_SERVICE_TOKEN"]# 2. Get list of all loaded parameter's nameslist(params.keys())# 3. Get list of all loaded parameter's valueslist(params.values())# and so on...
一次获取多个命名空间
在现实世界中,大多数情况下,您将访问来自不同名称空间的参数,您可以使用SSMEnv
轻松做到这一点
通过传递tuple
fromssmenvimportSSMEnvparams=SSMEnv("/service/my-service","/resource/mysql")
现在params
将拥有来自/service/my-service
和/resource/mysql
的所有参数
AWS Lambda装饰器
如果您使用AWS lambda,您可能会找到方便的ssmenv
装饰器它的行为与手动初始化SSMEnv
相同,但它还将SSMEnv
的实例注入context.params
属性。
fromssmenvimportssmenv@ssmenv("/service/my-service")defhandler(event,context):returncontext.params
填充os.environ
您可以使用os.environ
dict来隐藏SSMEnv
的用法。
importosfromssmenvimportSSMEnvos.environ={**os.environ,**SSMEnv("/service/my-service")}
删除常用前缀
通过整个名称空间访问参数有时可能不方便 尤其是你的名字很长的时候
因此,为什么可以使用prefixes
参数来使代码更干净。
fromssmenvimportSSMEnvparams=SSMEnv("/service/my-service",prefixes=("/service/my-service",))params["TOKEN"]
如果没有aws上下文,则返回dict
您可能希望在没有aws的情况下运行应用程序,例如通过本地计算机上的docker和mock参数。
为此,您可以使用no_aws_default
属性。
importosfromssmenvimportSSMEnvos.environ["SERVICE_MY_SERVICE_TOKEN"]="mocked-token"# that might be set in docker-composeparams=SSMEnv("/service/my-service",no_aws_default=os.environ)
通过您自己的BOTO3客户机
你也可以通过你自己的boto3客户端
importboto3fromssmenvimportSSMEnvssm_client=boto3.client("ssm")params=SSMEnv("/service/my-service",ssm_client=ssm_client)