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

AWS CDK同栈创建SSM参数后引用提示无法获取参数错误

问题场景

在CDK栈内先创建带占位测试值的SSM参数,再将该参数引用到Chatbot配置中,预期参数部署完成后供Chatbot读取调用。
使用的实现代码如下:

new ssm.StringListParameter(this, 'store-slack-ssm-param', {
  parameterName: "slackChannelChatbotConfiguration",
  stringListValue: ['slackChannelNameTobeAddedFromConsole', 'slack channelIdFromConsole'],
});

const slackParam = new CfnParameter(this, 'access-slack-ssm-param', {
  type: 'AWS::SSM::Parameter::Value<List<String>>',
  default: 'slackChannelChatbotConfiguration',
})
new chatbot.SlackChannelConfiguration(this, 'chatbot-slack-notification', {
  slackChannelConfigurationName: Fn.select(0, slackParam.valueAsList),
  slackWorkspaceId: this.slackWorkspaceId,
  slackChannelId: Fn.select(1, slackParam.valueAsList),
  notificationTopics: [this.snsTopic],
})

部署过程中抛出错误:

[ValidationError]: Unable to fetch parameters [slackChannelChatbotConfiguration] from parameter store for this account.
  • 补充验证结果:手动预先在账号中创建对应SSM参数,再在CDK代码中直接引用可正常运行,仅CDK同栈内先创建参数、再引用的场景下功能异常。
根因分析

使用AWS::SSM::Parameter::Value类型的CfnParameter引用SSM参数时,返回的是Token占位符而非实际参数值,参数值由CloudFormation在部署的参数解析阶段统一从Parameter Store拉取,这个拉取动作执行时机早于栈内所有资源的创建流程。

同栈内定义的SSM参数属于待创建资源,在CloudFormation执行参数拉取的环节还未实际写入Parameter Store,自然无法被读取,只有引用部署启动前就已经存在的存量SSM参数时,这种动态引用方式才能正常生效。

修复方案

同栈内创建的SSM参数不需要通过动态引用方式拉取,直接使用StringListParameter构造返回的实例属性传参即可,CDK会自动为两个资源添加依赖关系,保证SSM参数创建完成后再创建Chatbot配置资源:

// 先创建SSM参数,保留实例引用
const slackSsmParam = new ssm.StringListParameter(this, 'store-slack-ssm-param', {
  parameterName: "slackChannelChatbotConfiguration",
  stringListValue: ['slackChannelNameTobeAddedFromConsole', 'slack channelIdFromConsole'],
});

new chatbot.SlackChannelConfiguration(this, 'chatbot-slack-notification', {
  // 直接读取SSM参数实例的属性值,不需要额外做参数拉取
  slackChannelConfigurationName: Fn.select(0, slackSsmParam.stringListValue),
  slackWorkspaceId: this.slackWorkspaceId,
  slackChannelId: Fn.select(1, slackSsmParam.stringListValue),
  notificationTopics: [this.snsTopic],
})

如果业务场景必须使用动态引用方式加载SSM参数,需要保证被引用的参数在当前栈部署前就已存在,可将SSM参数定义在独立的前置栈中提前部署,或在部署当前栈前手动创建对应参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:03:21