7839

雑草魂エンジニアブログ

【AWS】API Gatewayをリバースプロキシサーバーとして使用する

とあるAPIを別ドメインのURLで使用したいという話があり、試験的にAPI Gatewayをただ単にリバースプロキシサーバーとして使用してみたので、備忘録として残しておく。

概要

  • https://aaa.com/api:クライアントがアクセスするURL
  • https://bbb.com/api:実際に使いたいAPIのURL

実際に使いたいAPIのURLhttps://bbb.com/apibbb.comドメインではなく、aaa.comドメインAPIを使えるようにする。

Amazon API Gatewayとは

Amazon API Gateway は、あらゆる規模の REST、HTTP、および WebSocket API を作成、公開、維持、モニタリング、およびセキュア化するための AWS のサービスです。

システム構成

今回は上記のようなシステムを構成する。Route 53へのドメインの登録、ACMでのSSL証明書の発行に関しては、説明を省略し、すでに登録および発行がされていることを前提として、API Gatewayの設定のみを説明する。

APIの作成

  • APIタイプを選択
    • 「HTTP API」を選択して構築
  • STEP1:APIの作成

    • 統合:「統合を追加」を押す HTTP 統合を選択し、API Gateway は指定した URL にリクエストを送信し、その URL からのレスポンスで応答するようにする。
      • 統合種別:HTTP
      • メソッド:ANY
      • URLエンドポイント:https://bbb.com
    • API名:API-Reverse-Proxy(任意の名前を設定)

  • STEP2:ルートを設定(操作不要。確認のみ)

    • メソッド:(選択不可)
    • リソースパス:$default
    • 統合ターゲット:ANY https://bbb.com

    HTTP全てのメソッド・全てのパスに対して、https://bbb.comにリクエストを送信する。その場合、パスに$defaultを設定する。(API ごとに「$default」ルートを 1 つ指定することもできる。「$default」ルートは、API へのリクエストと一致するルートが他に存在しない場合に呼び出される。)

  • STEP3:ステージを定義(操作不要。確認のみ)

    • ステージ名:$default

    個別設定などは不要なので、ステージの追加はしない

  • STEP4:確認して作成

カスタムドメイン名の設定

カスタムドメインの作成

  • ドメイン名の詳細
    • ドメイン名:aaa.com
    • TLSの最小バージョン:TLS 1.2(推奨)
    • 相互 TLS 認証:無効
      相互 TLS 認証では、API実行時にクライアント証明書が必要になり、双方向のTLSによる認証によりセキュリティが強化される。(IoT機器などでのユースケースがある。)
  • エンドポイント設定
    • エンドタイプ:リージョン
    • ACM 証明書:ドメイン名に設定したACMを選択する
  • タグ:(必要であれば追加)

作成すると、ドメイン名が正常に作成される。

API Gateway ドメイン名」は後ほどRoute 53に登録する際に必要となるので、確認だけしておく。(Route 53では選択するのみなので、リージョンの確認だけしておけば問題なし。)

API マッピングの設定

API マッピングを設定」から「新しいマッピングを追加」する。

  • API:先ほど作成した「API-Reverse-Proxy」を選択
  • ステージ:$defaultしかないので、$defaultを選択
  • パス(オプション):空欄 パスを設定することで、特定のパスに対するAPIやステージの設定が可能となる

Route 53でAliasレコードを作成

カスタムドメインに追加したドメインのRoute 53のホストゾーンにAliasレコードを追加する。

デフォルトエンドポイントの無効化

現時点の設定では、以下の2つのURLからAPIを呼び出すことができる

  1. 設定したカスタムドメイン
  2. API Gatewayデプロイ時に自動生成されるデフォルトエンドポイント

  3. のデフォルトエンドポイントを無効化する。

APIの詳細を編集から、デフォルトのエンドポイントを「有効」から「無効」に変更する。

まとめ

Amazon API Gatewayは初めて使ってみたが、設定もわかりやすく、非常に簡単であった。いろいろな箇所で応用できそうであると思ったので、今度はLambdaと連携するなどしていきたいと思えた。

金額感的にも、HTTP APIであれば、最初の3億回/月までは1.00USDとかなり割安であるように思えた。