CDK Python部署时无法从SSM参数存储中获取值
问题原因与解决办法
- 为啥会输出Token:CDK是声明式的基础设施代码工具,在执行
cdk deploy的前期(合成阶段),不会去AWS拉取SSM参数的实际值。你看到的${Token[TOKEN.358]}是CDK生成的占位符,用来标记这个值会在部署过程中或者资源运行时被替换成真实的SSM参数值。而你写的print是在本地运行CDK代码时执行的,这时候还没和AWS交互拿真实值,所以输出的就是这个占位符。 - 怎么拿到真实值:
- 运行时自动替换:如果是要在部署后的AWS资源(比如Lambda函数)里用这个值,直接用
string_value就行,CDK会在部署时把Token替换成真实的SSM参数值,资源运行时就能拿到正确内容。 - 本地手动查询:要是想在本地看真实值,直接用AWS CLI查就行:
aws ssm get-parameter --name "/XAZ-1019/activity/table-name" --query "Parameter.Value" --output text - 合成阶段主动获取:如果必须在CDK代码运行时(合成阶段)拿到值,可以用AWS SDK在代码里主动调用SSM的API查询,比如用boto3:
注意这种方式需要本地环境有AWS权限,而且如果参数值更新,CDK不会自动感知,需要重新部署。import boto3 ssm_client = boto3.client('ssm') response = ssm_client.get_parameter(Name="/XAZ-1019/activity/table-name") table_name = response['Parameter']['Value'] print(table_name)
- 运行时自动替换:如果是要在部署后的AWS资源(比如Lambda函数)里用这个值,直接用
内容的提问来源于stack exchange,提问作者user20358
相关产品推荐
相关产品推荐

