Edited at

API GatewayのHTTPプロキシ統合のURL・リクエストヘッダーを眺める

API GatewayのHTTPプロキシ統合の設定ごとのリクエストヘッダー・URLの値を眺めます。


パターン


  1. リソースパスが / (HTTP統合)

  2. リソースパスが /{myProxy+}

  3. リソースパスが /{myProxy+} & CORSを有効に設定


準備

API Gatewayの裏側はVPC_LINK → NLB → Flaskのアプリ@ECSの構成です。


Flaskのアプリはこちら。リクエストヘッダーを返すだけの簡単な構成です。


1. リソースパスが / (HTTP統合)

http://example.com/

X-Amzn-Apigateway-Api-Id: fc5vwzacp2
X-Amzn-Trace-Id: Root=1-5c5fb0f2-843387cadeadbf4c9d3c9036
User-Agent: AmazonAPIGateway_fc5vwzacp2
Accept: application/json
Host: example.com
Connection: Keep-Alive

次に登場するHTTPプロキシ統合よりヘッダーの要素数が少ないです。

ちなみに /しか指定していない状態で /hoge にアクセスすると、↓のようなエラーで失敗します。/≠ワイルドカードなんですね。


{"message":"Missing Authentication Token"}


2. リソースパスが {myProxy+}

http://example.com/hoge

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,en-US;q=0.9,ja;q=0.8
Cache-Control: max-age=0
Cookie: s_pers=%20s_vnum%3D1546597042049%2526vn%253D1%7C1546597042049%3B%20s_invisit%3Dtrue%7C1544007119025%3B%20s_nr%3D1544005319028-Repeat%7C1551781319028%3B
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
X-Amzn-Trace-Id: Root=1-5c5fb581-c2979900f0d0ce0267df3340
X-Forwarded-For: 114.190.145.219
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Amzn-Apigateway-Api-Id: fc5vwzacp2
Host: example.com
Connection: Keep-Alive

EndpoinrtURLの値が興味深いです。API Gatewayのリソースの階層構造とは無関係に、メソッドの統合リクエストの設定時に指定したURLに対してリクエストがなされなます。(他の階層構造でも試しました)


3. リソースパスが /{myProxy+} & CORSを有効に設定

リクエストヘッダーは特に変わらないみたいですね。

http://exmaple.com/hoge

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,en-US;q=0.9,ja;q=0.8
Cookie: s_pers=%20s_vnum%3D1546597042049%2526vn%253D1%7C1546597042049%3B%20s_invisit%3Dtrue%7C1544007119025%3B%20s_nr%3D1544005319028-Repeat%7C1551781319028%3B
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
X-Amzn-Trace-Id: Root=1-5c5fc5bd-ffb8781faee31572026e8616
X-Forwarded-For: 114.190.145.219
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Amzn-Apigateway-Api-Id: mtwqhaxbhe
Host: exmaple.com
Connection: Keep-Alive


おまけ


EndpointURLの置換文字列は必ずしもリソース名と同じでなくて良い

Endpoint URLの置換文字列はパスパラメータからマッピングされたリクエストパラメータに過ぎないので、別途リクエストパラメータをマッピングすれば置換文字列の値を変えることが可能。

image.png


リソースの設定されていないパスにアクセス

{"message":"Missing Authentication Token"}


リソースの設定されていないパスにアクセスするとこうなります。


貪欲パスのフォーマット



{}のなかに文字列と+マークで指定したリソースをGreedy Pathというそうです。

HTTPプロキシ統合にも関わらず指定しない場合、エラーが発生。


日本語だと貪欲パス、ってところでしょうか。


貪欲パスの重複制限



貪欲パスは2個以上持てないみたいです。それはそうか。


参考

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html