POST json文字列をAPIGatewayに送信し、APIGatewayにJSONをEC2サーバーに送信させようとしています。
私の問題は、これを達成する方法について、Amazonから適切なドキュメントが見つからないことです。
セットアップをテストすると、これが得られます
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response><Errors><Error><Code>InvalidHttpRequest</Code><Message>The HTTP request is invalid. Reason: Unable to parse request</Message></Error></Errors><RequestID>1fa47f52-d75c-4ff8-8992-3eac11a79015</RequestID></Response>"
それは私にはほとんど意味がありません。 API GatewayがEC2にリクエストを送信しようとしているのに問題があると思いますが、送信できないため、このエラーが生成されます。そのため、APIGatewayでEC2AWS ServiceProxyを正しく設定していない可能性があります。これは、「アクション」を現在何に設定するのかわからないためである可能性があります。EC2インスタンスを指しているので、その情報を配置する場所が他に表示されないだけです。
これは本当に難しいことではありません。Lambdaに接続してこのことを成功させ、すべてのドキュメントを調べました。見つけられるのはこれだけです: http://docs.aws.Amazon.com/apigateway/ latest/developerguide/getting-started-aws-proxy.html#getting-started-aws-proxy-add-resources
これは、このシナリオにはあまり役立ちません。何か案は?
AWSサービスプロキシとHTTPサービスプロキシを混同していると思います。
API Gatewayは、API呼び出しをさまざまなタイプのバックエンドに転送できます。
-ラムダ関数
-AWSサービス( http://docs.aws.Amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html を参照)例)
-AWSまたはオンプレミスで実行されている既存のAPI(ユースケース)
APIを定義するときは、必ずPOST動詞を定義し、エンドポイントURLがEC2インスタンスURLを指すようにしてください
JSON POSTサービスは http://gurujsonrpc.appspot.com/ でオンラインで利用できます)を使用してテストを行ったところ、期待どおりに機能しました。
これが私のテストAPIのSwaggerエクスポートです。
{
"swagger": "2.0",
"info": {
"version": "2016-04-11T20:46:13Z",
"title": "test"
},
"Host": "c22wfjg4d7.execute-api.eu-west-1.amazonaws.com",
"basePath": "/prod",
"schemes": [
"https"
],
"paths": {
"/": {
"post": {
"produces": [
"application/json"
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
}
}
},
"x-Amazon-apigateway-integration": {
"responses": {
"default": {
"statusCode": "200"
}
},
"uri": "http://gurujsonrpc.appspot.com/guru",
"httpMethod": "POST",
"type": "http"
}
}
}
},
"definitions": {
"Empty": {
"type": "object"
}
}
}