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

如何在CFN模板中将资源引用传递给Python字典?

CloudFormation 中向PyPlate代码块传入!Ref引用值的解决方案

核心原理

!Ref 是CloudFormation部署阶段才会执行的内置函数,而SecretStringTemplate 下的PyPlate代码本质是字符串文本,CloudFormation不会默认解析字符串内部的!Ref语法,需要先通过CloudFormation的字符串插值函数把引用值注入到PyPlate代码文本中,再交给PyPlate执行。

正确实现代码

GenerateSecretString:
  SecretStringTemplate: !Sub |
    #!PyPlate
    import ast,json
    creds_dict = {}
    creds_dict["username"] = ast.literal_eval(params['pDbUserName'])[%d-1]['pUsername']
    creds_dict["masterarn"] = "${mastersecret}"
    output = json.dumps(creds_dict)
  GenerateStringKey: "password"

执行逻辑说明

  • CloudFormation首先会处理外层的!Sub函数,将代码里的${mastersecret} 替换为!Ref mastersecret返回的实际密钥ARN值(AWS::SecretsManager::Secret类型资源的Ref返回值默认就是资源ARN)
  • 替换完成后的完整Python代码字符串才会被传入PyPlate运行环境执行,此时masterarn对应的就是你期望的动态资源引用值

注意事项

  • 如果你的PyPlate代码中本身存在$字符(比如正则表达式、其他变量标识),需要把单个$写成$$转义,避免被!Sub误判为插值占位符
  • 如果需要传入的资源属性不是Ref返回的默认值,可以用${资源逻辑ID.属性名} 格式的占位符配合!GetAtt的能力,比如要取VPC的Cidr块可以写${MyVpc.CidrBlock}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:12:01