🍿

Amazon API GatewayのREST APIとHTTP APIの違いで戸惑った話

2024/03/04に公開

この記事で言いたいこと、まとめ

  • API Gatewayには、REST API(v1)とHTTP API(v2)の2種類がある
  • HTTP API(v2)は、REST API(v1)と比べて高速でコスト効率がよい代わりに機能が少ないとよく言われている
  • しかし、HTTP API(v2)が機能面でも優れている点もある。HTTP API(v2)はECSと直接統合できるが、REST API(v1)では間にNLBが追加で必要

詳細

きっかけ

もともとは、AWS Amplify(Gen1)で作ったコンテナベースのAPIがありました。このAPIはAmplifyで作ったCognitoで認証して使用していました。
新規の要件でAPI Keyよる認証で一部のエンドポイントに対してGETだけを実行できるようにしたいという要件が発生しました。既存への影響は出したくなかったので、新規要件に対応するための新しいAPI Gatewayを作って既存のコンテナと統合することにしました。

HTTP APIでは、API Keyが使えない

ということで、早速試してみることにしました。Amplify(Gen1)が作ったAPI GatewayはHTTP APIでしたので、それに習ってHTTP APIを作ったところ、、、
API GatewayのメニューにAPI KEYの項目がなく、API KEYの設定ができません。

調べたところ、API KEYが使えるのはREST APIだけみたいです。早々に目論見が外れてしまいました。

REST APIでは、ECSと統合するときにNLBが必要

ということで、作りかけのHTTP APIを早々に破棄してREST APIを新たに作成しみました。そしてECSと統合するべくVPCリンクを作ろうとしたところ、

なぜかNLBとのリンクを作ろうとしてくる。。。

調べたところ、REST APIでVPCリンクをするにはNLBが必須みたいです。

API GatewayだけでなくNLBも追加で作る事になってしまいました。

最終的に目的は達成することはできましたが、思ったより苦戦してしまいました。

最後に

REST APIとHTTP APIの違いはAWS公式ドキュメントでまとめられていますので、しっかり確認して要件にあった方を選択しましょう。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/http-api-vs-rest.html

と言いたいところですが、比較表だけ見て全てを理解することは難しいと思いますので、実際に手を動かして本当に使えるかを確認した上で技術選定をすることをお勧めします。
クラウド開発では、とりあえずやってみることが重要ですね。

NCDCエンジニアブログ

Discussion