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

如何在AWS Step Functions中拼接状态输入与硬编码字符串生成SSM文档名称?

解决方案:在AWS Step Functions中拼接变量与硬编码字符串作为SSM文档名称

Step Functions的原生JSONPath语法不支持直接通过"Name.$": "$.InstanceID[+EC2-PROD-WEBSRV-CP_RAM_SWAP-Document]"这种方式拼接变量和硬编码字符串,你可以通过以下两种可行方案实现需求:

方案1:使用Pass状态结合内置States.Format函数

这是最轻量化的方案,无需额外Lambda资源,直接在Step Functions中完成字符串拼接:

  1. 添加一个Pass状态,利用States.Format将输入的InstanceID与硬编码字符串拼接:
{
  "States": {
    "FormatDocumentName": {
      "Type": "Pass",
      "Parameters": {
        "FormattedName.$": "States.Format('{}-EC2-PROD-WEBSRV-CP_RAM_SWAP-Document', $.InstanceID)"
      },
      "Next": "CreateSSMDocument"
    },
    "CreateSSMDocument": {
      "Type": "Task",
      "Resource": "arn:aws:states:::aws-sdk:ssm:createDocument",
      "Parameters": {
        "Name.$": "$.FormattedName",
        // 补充其他SSM CreateDocument必填参数
        "Content": "你的SSM文档内容",
        "DocumentType": "Command"
      },
      "End": true
    }
  }
}
  1. 原理:States.Format遵循Python风格的字符串格式化规则,{}会被后续传入的变量值替换,直接完成字符串拼接逻辑。

方案2:通过Lambda函数处理拼接并调用CreateDocument

如果你的工作流已依赖Lambda,可以在Lambda中完成拼接后直接调用SSM API:

  1. Lambda函数示例(Python):
import boto3

ssm_client = boto3.client('ssm')

def lambda_handler(event, context):
    instance_id = event['InstanceID']
    document_name = f"{instance_id}-EC2-PROD-WEBSRV-CP_RAM_SWAP-Document"
    
    ssm_client.create_document(
        Name=document_name,
        Content="你的SSM文档内容",
        DocumentType="Command"
        // 其他必要参数
    )
    
    return {"document_name": document_name}
  1. Step Functions中调用该Lambda的Task状态:
{
  "CreateSSMDocumentViaLambda": {
    "Type": "Task",
    "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的Lambda函数名",
    "Parameters": {
      "InstanceID.$": "$.InstanceID"
    },
    "End": true
  }
}

优先推荐方案1,无需额外计算资源,逻辑完全在Step Functions工作流内完成,更高效简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:31:02