Terraform部署API Gateway集成Step Function报ARN错误如何解决?
问题根因
你当前配置存在两处核心错误,直接触发了报错:
- 集成URI格式不符合API Gateway对接AWS服务的规范要求
- 请求模板内容和Step Functions StartExecution接口的要求不匹配
具体修改方案
1. 修正uri字段
API Gateway对接AWS服务的URI固定格式为 arn:aws:apigateway:<区域>:<服务名>:action/<接口名>,对接Step Functions的StartExecution接口时,uri应该改为:
uri = "arn:aws:apigateway:us-west-2:states:action/StartExecution"
你之前的写法把状态机标识直接拼在StartExecution后面,不符合规范,所以触发了路径/动作缺失的报错。
2. 修正request_templates内容
Step Functions的StartExecution接口要求请求体必须包含stateMachineArn(你提前创建好的状态机ARN)、input(传给状态机的入参)两个核心字段,你当前模板里写的是状态机的定义,完全不符合接口要求。正确的模板示例:
request_templates = { "application/json" = <<EOF { "stateMachineArn": "arn:aws:states:us-west-2:1431651122:stateMachine:ccc-step-function-POST", "input": "$util.escapeJavaScript($input.json('$'))" } EOF }
注意:上面的
stateMachineArn请替换成你实际提前创建完成的Step Function状态机的ARN,状态机的定义需要你提前通过Terraform或者控制台创建好,不能在调用时动态传入。
3. 补充必要权限
你需要给API Gateway的集成角色添加states:StartExecution的权限,允许它调用目标状态机,示例权限策略:
{ "Effect": "Allow", "Action": "states:StartExecution", "Resource": "arn:aws:states:us-west-2:1431651122:stateMachine:ccc-step-function-POST" }
内容的提问来源于stack exchange,提问作者CPdev
相关产品推荐
相关产品推荐

