AWS HTTP API集成Step Functions时如何传入多值作为执行输入
解决方案
你需要通过API Gateway的请求模板构造符合要求的JSON格式输入传入状态机,正确配置如下:
完整可用的DefinitionBody配置
DefinitionBody: info: version: '1.0' title: Ref: AWS::StackName paths: "/github/secret": post: responses: default: description: "Default response for POST /github/secret" x-amazon-apigateway-integration: integrationSubtype: "StepFunctions-StartExecution" credentials: Fn::GetAtt: [StepFunctionsApiRole, Arn] # 替换原来的requestParameters为requestTemplates requestTemplates: application/json: | { "Input": "{\"body\": $util.toJson($request.body), \"x_hub_signature_256\": \"$util.escapeJavaScript($request.header.X-Hub-Signature-256)\"}", "StateMachineArn": "${SecretScannerStateMachine.Arn}" } payloadFormatVersion: "1.0" type: "aws_proxy" connectionType: "INTERNET" timeoutInMillis: 30000 openapi: 3.0.1 x-amazon-apigateway-importexport-version: "1.0"
配置说明
- 用
requestTemplates替代原来的requestParameters,可以灵活构造传入Step Functions的参数结构 - 内置工具函数
$util.toJson($request.body)会自动将请求体转为合法JSON字符串,避免手动拼接的转义错误 - 内置工具函数
$util.escapeJavaScript()会处理请求头中的特殊字符,保证最终的Input字段是合法JSON - 状态机执行时收到的输入会包含
body和x_hub_signature_256两个顶层字段,可直接在状态机定义中通过$.body、$.x_hub_signature_256引用对应值
原配置失效原因
- 直接写
Input: $request不符合API Gateway的参数选择表达式规则,Input仅支持单个结构化源或者通过模板构造的多字段结构 - 手动拼接JSON字符串时API Gateway不会自动解析字符串内部的
$request.xxx变量,只有整个值完全是变量表达式时才会直接解析 - 数组格式的Input不符合Step Functions StartExecution API的参数要求,Input必须是字符串格式的JSON
内容的提问来源于stack exchange,提问作者user3180997
相关产品推荐
相关产品推荐

