通过映射模板为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" }
模板说明
- 先解析整个请求的根JSON对象到
$root变量 - 获取客户端的
sourceIp并存储到$sourceIp - 解析
root.input中的嵌套JSON字符串为对象$stepInput - 使用
put方法添加sourceIp字段,用$discard变量接收put的返回值,避免返回的null影响后续处理 - 将更新后的
$stepInput转成JSON字符串,并用$util.escapeJavaScript处理转义,确保符合JSON格式要求 - 保留原始的
stateMachineArn字段
验证结果
使用上述模板后,传递给Step Function的输入会正确包含sourceIp字段,结构与预期完全一致。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

