typescript - Hur extraherar man parametrar av typen stringList i cdk?
Jag försöker extrahera befintliga SSM-parametrar av stringList i min cdk-app.
Jag kan lagra ett enda värde, men för att undvika duplicering av kod försöker jag lagra 3 värden i en enda variabel och komma åt dem som en array i form av value[0]
const stringValue = ssm.StringParameter.fromStringParameterAttributes(this, 'MyValue',
const stringValue2 = ssm.StringListParameter.fromStringListParameterName(this, 'myValue', '/dev/name')
const ssmstringlistoutput = new cdk.CfnOutput(this, 'ssmoutput', {
value: cdk.Fn.select(0, stringValue2.stringListValue),
description: 'name of ssmlist',
exportName: 'avatarsBucket',
});
// Chatbot Slack Notification Integration
const bot = new chat.SlackChannelConfiguration(
this,
"sample-slack-notification",
{
slackChannelConfigurationName: 'my channel name',
slackWorkspaceId: 'stringValue2[0]',
slackChannelId: 'stringValue[1]',
notificationTopics: [topic],
}
);
}
Utdata är för verifiering. Den skriver ut hela listan som ett enda strängvärde, inte bara det extraherade första elementet som förväntat.
Svar #1
Istället för StringListParameter.fromStringListParameterName, skapa en CfnParameter-konstruktion. Skicka parameternamnet som standardvärde:
const listParam = new cdk.CfnParameter(this, 'ListParam', {
type: 'AWS::SSM::Parameter::Value<List<String>>',
default: '/dev/name',
});
Välj sedan ett element när du skickar värdet som prop-inputs:
slackWorkspaceId: cdk.Fn.select(0, listParam.valueAsList),
slackChannelId: cdk.Fn.select(1, listParam.valueAsList),
Vad händer? fromStringListParameterName syntetiseras till en CloudFormation-dynamisk referens som {{resolve:ssm:/dev/name}}. Och som du upptäckte, verkar CloudFormation uppenbarligen inte kunna tillämpa en split på dynamiska referenser.
