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.