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

如何通过DefinitionSubstitutions向Step Functions传递SSM StringList子网列表

解决方案

Step Functions 的 DefinitionSubstitutions 本身仅支持字符串类型的替换,不支持直接传入列表类型,你可以通过以下方案解决硬编码子网数量的问题:

方案:搭配 Step Functions 内置字符串拆分函数实现动态列表注入

无需拆分子网逐个传入,直接将整段逗号分隔的子网字符串传入后,在状态机内动态拆分得到列表,可适配任意数量的子网场景:

  1. 调整 CloudFormation 配置
# Cloud Formation
Parameters:
  ListOfSubnets:
    Type: AWS::SSM::Parameter::Value<CommaDelimitedList>

Resources:
  MyStateMachine:
    Type: AWS::Serverless::StateMachine
    Properties:    
      DefinitionUri: step-functions.asl.yaml
      DefinitionSubstitutions:
        # 将整个子网列表拼接为单个逗号分隔字符串传入
        SubnetListStr: !Join [",", !Ref ListOfSubnets]
  1. 调整 Step Functions ASL 配置
# Step Function
MyECSTask:
  Type: Task
  Resource: arn:aws:states:::ecs:runTask.waitForTaskToken
  Parameters:
    ...    
    NetworkConfiguration:
      AwsvpcConfiguration:
        ...
        # 用内置函数将逗号分隔字符串拆为子网列表,后缀.$表示该字段为动态计算值
        Subnets.$: States.StringSplit('${SubnetListStr}', ',')

如果你的SSM参数中可能存在多余的空值,还可以搭配States.ArrayFilter函数过滤掉无效的空字符串元素。如果场景允许不使用外部ASL文件,也可以直接将状态机定义inline写在CloudFormation的Definition属性中,直接把!Ref ListOfSubnets赋值给Subnets字段,CloudFormation会直接把列表类型的值注入到ASL中,不需要做字符串拆分处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:02