Python 2.7调用aws secretsmanager获取密钥后提取JSON键值报错求助
问题解决:Python2.7调用awscli获取secretsmanager密钥并解析JSON
错误原因
os.system()的返回值是命令执行的退出状态码(整数类型,0代表执行成功,非0代表失败),而非命令的标准输出内容。你打印时看到的JSON字符串是aws命令直接输出到控制台的内容,并没有存入secret变量,所以尝试对int类型的secret取键时触发类型错误。- 即使拿到了命令输出的字符串,也需要先调用
json.loads()把JSON字符串反序列化为Python字典,才能按键取值。
可行实现方案(适配Python2.7.5)
使用subprocess.check_output()获取命令的标准输出,再做JSON解析即可:
import json import subprocess # 获取aws命令的标准输出,strip清除末尾换行等空白字符 secret_str = subprocess.check_output(["aws", "secretsmanager", "get-secret-value", "--secret-id", "stage_secret", "--query", "SecretString", "--output", "text"]).strip() # 反序列化JSON字符串为Python字典 secret_dict = json.loads(secret_str) # 提取字段存入变量 username = secret_dict["username"] password = secret_dict["password"] print(username) print(password)
注意事项
- 如果aws命令存在执行失败的可能,可在外层加
try except捕获subprocess.CalledProcessError异常做容错处理 - 确保运行脚本的环境已配置好awscli的对应权限,可正常调用secretsmanager相关接口
内容的提问来源于stack exchange,提问作者Jijo John
相关产品推荐
相关产品推荐

