You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何将DynamoDB存储的SSM参数串转为boto3要求的字典格式

实现方案

可以实现,以下是两种成熟的可行方案,优先选择安全度更高的第一种:

方案1:占位符替换+安全字典解析(生产环境推荐,无代码注入风险)

  • 第一步:从DynamoDB中取出parameters_name对应的字符串模板,同时从触发事件中获取所有Variable变量的实际字符串值
  • 第二步:遍历替换字符串模板中的所有Variable占位符为实际值
  • 第三步:使用ast.literal_eval方法安全将字符串转换为符合要求的字典格式,示例代码如下:
import ast
import boto3

# 从DynamoDB查询返回结果中取参数字符串模板
param_template_str = dynamodb_query_result['parameters_name']['S']
# 从Lambda触发事件中取所有变量的实际值
event_variable_map = {
    "Variable1": "从事件获取的实际值1",
    "Variable2": "从事件获取的实际值2",
    "Variable3": "从事件获取的实际值3",
    "Variable4": "从事件获取的实际值4"
}

# 替换所有占位符,注意字符串值需要包裹单引号符合Python语法
for var_name, actual_val in event_variable_map.items():
    param_template_str = param_template_str.replace(var_name, f"'{actual_val}'")

# 字符串外层补{}转完整字典结构,用ast.literal_eval安全解析,不会执行任意代码
ssm_parameters = ast.literal_eval(f"{{{param_template_str}}}")

# 调用SSM启动自动化执行接口
ssm_client = boto3.client('ssm')
response = ssm_client.start_automation_execution(
    DocumentName=dynamodb_query_result['document_name']['S'],
    Parameters=ssm_parameters
)

注意:禁止使用eval做字符串转字典操作,eval会执行任意代码存在严重安全风险,ast.literal_eval仅会解析Python基础数据结构,安全合规。

方案2:调整DynamoDB存储结构(可修改表结构时推荐,维护成本更低)

如果允许修改DynamoDB表的存储格式,建议直接将参数模板存为Map类型而非字符串类型,仅在参数值位置留占位符,取出后直接遍历替换即可,不需要做字符串转字典的操作,逻辑更简单故障率更低:

  • 调整后的DynamoDB存储示例:
    "parameters_name": { "M": { "ParameterName1": { "S": "Variable1" }, "ParameterName2": { "S": "Variable2" }, "ParameterName3": { "S": "Variable3" }, "ParameterName4": { "S": "Variable4" } } }, "document_name": { "S": "XYZ" }
  • 取出后遍历Map的键值对,替换占位符后把值封装为列表即可直接使用。

内容的提问来源于stack exchange,提问作者Sriram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:36:04