AWS CDK中如何正确提取StringList类型SSM参数
问题根因
使用fromStringListParameterName导入已存在的StringList类型SSM参数时,CDK不会在合成阶段自动将参数值拆分为原生数组,直接调用cdk.Fn.select或者用数组索引访问时,拿到的是参数的原始逗号拼接字符串,因此输出时会返回整个列表内容,无法取到指定索引的元素。
另外你原有代码存在两个明显问题:
- 第一行
ssm.StringParameter.fromStringParameterAttributes调用未补全参数,语法不完整 - Slack配置部分把变量名写在了引号里,实际传入的是普通字符串
'stringValue2[0]',根本没有引用SSM参数值
正确实现方法
StringList类型的SSM参数底层默认用英文逗号作为分隔符拼接存储所有值,你需要先调用cdk.Fn.split拆分原始值得到列表,再通过cdk.Fn.select按索引提取对应元素即可,完整可运行代码如下:
// 导入已存在的StringList类型SSM参数 const devConfigParam = ssm.StringListParameter.fromStringListParameterName(this, 'devConfigParam', '/dev/name'); // 按默认逗号分隔符拆分参数值,得到可索引的列表 const configValueList = cdk.Fn.split(',', devConfigParam.stringValue); // 按索引提取对应值 const slackWorkspaceId = cdk.Fn.select(0, configValueList); const slackChannelId = cdk.Fn.select(1, configValueList); // 输出验证取值结果 new cdk.CfnOutput(this, 'ssmoutput', { value: slackWorkspaceId, description: 'first element of ssm stringlist', exportName: 'avatarsBucket', }); // Chatbot Slack通知配置 const bot = new chat.SlackChannelConfiguration( this, "sample-slack-notification", { slackChannelConfigurationName: 'my channel name', slackWorkspaceId: slackWorkspaceId, // 直接传解析后的变量,不要加引号 slackChannelId: slackChannelId, notificationTopics: [topic], } );
注意事项
如果你的SSM参数值本身包含英文逗号,不要使用默认逗号做分隔。存储参数时换用不会出现在值里的特殊分隔符(比如
|),拆分时把对应分隔符传给cdk.Fn.split的第一个参数即可,避免拆分错位。
内容的提问来源于stack exchange,提问作者Jatin Mehrotra
相关产品推荐
相关产品推荐

