今度こそ (REST) API Gateway と仲良くなるための個人的まとめ

2019.12.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

おはようございます、もきゅりんです。

早速ですが、当記事では、API Gatewayの使い方の詳細や、こんな使い方が良き、というお話は一切ありません。

API Gateway(RESTに限った話です)と仲良くなりたいわたしによる、API Gatewayの全体像の捉え方を個人的にまとめたものとなります。

他の方にお役に立つかどうかは分かりません。。

でも、もしあなたがわたしと同じように、API Gatewayと仲良くなりたいとは思っているんだけど、ドキュメント読んだり他の人の紹介記事を見て実際にやってみたりしても分かったような気がするけど、仲良くなった気がしない、、という方は、一助になるかもしれません。

ということで、いちおうAPI Gatewayがどんなものか何となくは把握されている方が対象です。

単純化してイメージしてみる

物事の学習において肝要なのは、まず全体像を把握すること、そして可視化すること、という話はよく聞きます。(そして、何より大事なのは他者に説明すること、と言われますね。)

ブラックベルトを読んだりして何となく分かったような気になったけど、やっぱりよく分かってない気がする状態は、細部の構成要素や設定項目と全体像とがうまくつながっていないためだ、と思われたので、下表のように単純化しました。

機能 選択肢
認証・認可 IAM | Lambdaオーソライザー | Cognitoオーソライザー
エンドポイントタイプ エッジ | リージョン | プライベート
統合タイプ Lambda | HTTP | Mock | AWSサービス | VPCリンク
プロキシ統合 TRUE | FALSE

だいぶスッキリしました。

実際の利用時はさておいて、とりあえず、この中から認証・認可は今回スコープ外とします。

エンドポイントタイプは、クライアントからのアクセス先を示しています。エッジはCloudFrontディストリビューションへ、リージョンはそのままですが、リージョンへアクセスします。プライベートは、パブリックからアクセスできません。VPC内からPrivateリンクを通してアクセスします。

統合タイプは、バックエンドの種類です。よく例で使われているのはLambdaですが、直接AWSサービスを使って独自Web APIにしたり、VPC内のリソースを使うためのVPCリンクなどもあります。

プロキシ統合は、簡略化された API Gateway 統合設定、と記載されています。要するに、これまでの設定では、ある程度しっかりとリクエスト・レスポンス形式を定義しなければならなかったけど、この設定によって、それを省くことができる、という設定。なお、AWSサービスにはプロキシ統合の設定はありません。

この表をまとめていて浮かんだのは、このようなイメージでした。

yubinkyoku

エンドポイントは郵便窓口やポストです。プライベートの場合は、まぁ自宅内郵送といったイメージでしょうか。

ukewatasi

統合タイプは郵送先です。まず自宅内なのか、自宅外なのか、それはお友達か、恋人なのか。

yubinkyokuin

プロキシ統合か否かは、郵便物の所定形式になります。

窓口でお渡しすればよしなに相手にちゃんと郵送してくれるのか、しっかり記載しておかないと郵送されても中身はグチャグチャだったりで判読不能なのか。

書いていて思ったのですが、受け取った相手からさらにちゃんと返送をしてもらわないといけないので若干無理がありましたが、イメージとしてはこんな感じで浮かびました。

実際のAWSではどのような図になるのでしょうか。

実際の構成図例

特に初見で、え?どっちがどっちだったけ?と自分の中で混乱したエンドポイントのプライベートと、統合タイプのVPCリンクを、関連記事から図を参照したいと思います。

Private(リンク)

VPC内プライベートサブネットからAPI Gatewayにアクセスします。

privatelink-apigateway

[新機能] Amazon API GatewayプライベートAPIとVPCエンドポイントでプライベートなサーバーレスアプリ構築

(表にするほどのことはないのですが)この図だと表はこんな感じですね。

機能 選択肢
エンドポイントタイプ プライベート
統合タイプ Lambda
プロキシ統合 -

VPCリンク

外からVPC内のリソースにアクセスします。

(下記ブログは、VPCリンクとPrivateリンクを同時にやってみたら、という記事です。面白いです。)

vpclink-apigateway

[小ネタ] 1つの NLB を API Gateway VPC integration と PrivateLink で共有する

この図だとこんな表です。

機能 選択肢
エンドポイントタイプ リージョン
統合タイプ VPCリンク
プロキシ統合 -

全体像を掴めた気になりました。

あとは、細部を埋めていけばいいような気持ちになってきました。(なってきました?)

最後に

如何でしたでしょうか。

単にわたしの理解力が低いだけという話かもしれませんが、上記のように捉えることで、ちょっとだけAPI Gatewayと仲良くなれた気がしています。

お次は、プロキシ統合と非プロキシ統合(カスタム統合)って実際どんな?と感じたので、チュートリアルに毛を生やしながら、Lambdaを使って、プロキシ統合とカスタム統合をやってみようと思います。

[初心者向け] Lambda 非プロキシ統合で API Gateway API をビルドする をプロキシ統合にして比較してみる

以上です。

どなたかのお役に立てば幸いです。

余談: 認証・認可

スコープ外とした認証・認可についてですが、CognitoとLambdaオーソライザーで、それぞれ下記のような関連記事があります。

参考: