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

通过映射模板为AWS Step Function输入添加SourceIp

解决AWS Step Function映射模板添加sourceIp的问题

问题背景

需要在触发AWS Step Function前,通过API Gateway映射模板为Step Function的输入JSON添加sourceIp字段。原始输入结构如下:

{
  "input": "{\"uuid\":\"12345\",\"domain\":\"stackoverflow.com\"}",
  "stateMachineArn": "arn:aws:states:us-east-1:xxx:xxxx"
}

期望处理后传递给Step Function的输入为:

{
  "input": "{\"uuid\":\"12345\",\"domain\":\"stackoverflow.com\",\"sourceIp\":\"0.0.0.0\"}",
  "stateMachineArn": "arn:aws:states:us-east-1:xxx:xxxx"
}

原模板执行后input字段为空,核心原因是**$util.parseJson($inputValue).put("source", $source)返回的是该键对应的旧值**,新添加的键会返回null,导致后续转JSON时生成空字符串。

正确的映射模板配置

#set($root = $util.parseJson($input.json('$')))
#set($sourceIp = $context.identity.sourceIp)

#set($stepInput = $util.parseJson($root.input))
#set($discard = $stepInput.put("sourceIp", $sourceIp))  # 用变量接收put返回值,避免null直接赋值

{
  "input": "$util.escapeJavaScript($util.toJson($stepInput))",
  "stateMachineArn": "$root.stateMachineArn"
}

模板说明

  1. 先解析整个请求的根JSON对象到$root变量
  2. 获取客户端的sourceIp并存储到$sourceIp
  3. 解析root.input中的嵌套JSON字符串为对象$stepInput
  4. 使用put方法添加sourceIp字段,用$discard变量接收put的返回值,避免返回的null影响后续处理
  5. 将更新后的$stepInput转成JSON字符串,并用$util.escapeJavaScript处理转义,确保符合JSON格式要求
  6. 保留原始的stateMachineArn字段

验证结果

使用上述模板后,传递给Step Function的输入会正确包含sourceIp字段,结构与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:28:24