我在AWS API网关中定义了一个使用路径变量的路由,访问方式如下:
/route/{variable}
除了我找不到如何通过CLI测试此路由之外,它都配置正确,并按预期工作。当我在该方法上使用AWS控制台的"TEST"函数时,它会提示我为变量输入所需的值。我这样做了,它按预期工作,执行日志中出现了以下内容:
Thu Jan 07 16:30:06 UTC 2016 : Method request path: {variable=my specified value}
Thu Jan 07 16:30:06 UTC 2016 : Method request headers: {}
但是,当我使用带有以下命令的CLI执行它时:
$ aws apigateway test-invoke-method --rest-api-id {rest-api-id} --resource-id {resource-id} --http-method GET --path-with-query-string 'variable=my specified value'
我得到一个500 ISE响应,日志中有以下内容:
Thu Jan 07 16:38:20 UTC 2016 : Method request path: {}
Thu Jan 07 16:38:20 UTC 2016 : Method request headers: {}
Thu Jan 07 16:38:20 UTC 2016 : Execution failed due to configuration error: Unable to transform input
我在这个主题上尝试了许多变体,包括使用JSON编码的字符串作为--path-with-query-string
值(例如{"variable":"my specified value"}
)、使用原始路径(例如/route/my%20specified%20value
)以及其他几种。
我还尝试使用--stage-variables
开关指定该值,并将--path-with-query-string
值设为空白。这产生了相同的结果。
我已经能够通过指定--headers '{"variable":"my specified value"}'
来让我的调用正常工作,但这似乎不正确,因为它绕过了路径变量,所以它不是一个完全有效的测试。有没有一种方法可以使用CLI指定Method request path
变量?非常感谢你的帮助。
您将希望使用完整路径发出命令,即:
$aws apigateway test invoke方法--rest api id abc123--资源id xyz987--http方法GET--带有查询字符串"/route/123"的路径
上面的错误消息表示请求正文转换出错。您可能需要指定--body参数,和/或通过--headers参数指定accept/content类型的标头。
如果这有帮助,请告诉我。
谢谢,Ryan