[アップデート] API Gatewayのカスタムドメインでルーティングルールが設定可能になりました

[アップデート] API Gatewayのカスタムドメインでルーティングルールが設定可能になりました

Clock Icon2025.06.04

大阪オフィスの小倉です。

API Gatewayのカスタムドメインで、ルーティングルールが設定可能になりましたので、試してみた内容を紹介します。

Amazon API Gateway introduces routing rules for REST APIs - AWS
Dynamically routing requests with Amazon API Gateway routing rules | AWS Compute Blog

ルーティングルールとは

API Gatewayのカスタムドメインは、 カスタムドメイン配下の特定のパスに対するリクエストを、
任意のAPIのステージにルーティングする、というマッピングをしています(以降APIマッピングと呼称します)。

今回追加されたルーティングルールを使うと、
ヘッダとパスの組み合わせから構成されるルールから、任意のAPIのステージにリクエストをルーティングすることができるようになりました。
また、ルーティングルールに一致しなければAPIマッピングでルーティングするという方法も選択できます。

カスタムドメイン作成時に、これらのルールを選択可能になっています。

ルーティング方法 意味
APIマッピングのみ パスによるルーティング
(NEW) ルーティングルールのみ ヘッダとパスの組み合わせルールによるルーティング
(NEW) ルーティングルール、その後にAPIマッピング まずルーティングルールを評価し、一致しなければAPIマッピングの設定に従う

AWS Blogにも挙げられていますが、例えばAPIのバージョンを /v1/, /v2/ のようにパスに含めてルーティング先APIを管理しているようなケースでは、
今後はHTTPヘッダに version=1 のような値を含めることでルーティングをすることが可能です。

なお考慮事項として、ルーティング先のAPIはREST APIのみ対応しており、WebSocketとHTTP APIにルーティングすることは出来ないようです。

Send traffic to your APIs through your custom domain name in API Gateway - Amazon API Gateway

ルーティングルール

まずはルーティングルールのみのパターンを試していきます。

事前にルーティングのターゲットとなるサンプルAPIを3つほど作成しました。(名前が雑ですみません。。。)

  • PetStore
  • PetStore v1
  • PetStore v2

それぞれGET /pets/1にリクエストした場合に、以下のレスポンスが返ります。

PetStore API の GET /pets/1

{
    "id": 1,
    "type": "dog",
    "price": 249.99
}

PetStore v1 API の GET /pets/1

{
    "id": 1,
    "version": 1,
    "type": "dog"
}

PetStore v2 API の GET /pets/1

{
    "id": 1,
    "version": 2,
    "type": "cat"
}

それではカスタムドメインを作成します。
ルーティングモードの選択が増えているので、「ルーティングルールのみ」を選択して作成します。
既存の手順ではありますが、カスタムドメイン作成後はRoute53でのレコード登録も実施しておいてください。

vscode-drop-1748999474140-cdp4az01qgt.png

作成後、画面最下部の「ルーティングルールを追加」を選択すると、条件とアクションの編集に移ります。

vscode-drop-1748999500288-iy4629bnuxo.png

1つのルール条件につき、ヘッダに関して最大2つ、パスに関して最大1つの設定が可能です。

vscode-drop-1748999554752-nmcr8aikn1i.png

まずはヘッダのmy-api-version1の場合、 PetStore v1というAPIのdevステージにルーティングするルールを設定します。

vscode-drop-1748999605051-52gc6ax3p3m.png

次に複数ルールが存在する場合の優先度を設定します。 優先度は、数字の小さいものから順に評価されます。
ドキュメントによると、1 〜 1,000,000の間で設定可能との事でした。

vscode-drop-1748999634558-4cnd5533ezs.png

この要領で、3つのAPIを以下のようにマッピングしました。優先度の数値の小さい上から順に評価されます。

  • my-api-version2 の場合、PetStore v2 のdevステージへ
  • my-api-version1 の場合、PetStore v1 のdevステージへ
  • 上記以外の場合、PetStore のdevステージへ

vscode-drop-1748999662532-oya8px4kgy.png

実際にPostMan経由でリクエストを送信して、期待どおりか確認してみます。

my-api-version2 の場合、PetStore v2 のdevステージへ
vscode-drop-1748999690053-a1et4wye1p.png
my-api-version1 の場合、PetStore v1 のdevステージへ
vscode-drop-1748999693992-6b06bjvvh3c.png
上記以外の場合、PetStore のdevステージへ
vscode-drop-1748999752401-zget36nwy2.png

期待通りのレスポンスが表示されました。

また、3番目のルールである上記以外の〜のルールを削除し、
どのルールにもマッチしないようなリクエストを送信すると、レスポンスはForbiddenとなりました。

ルーティングルール、その後にAPIマッピング

こちらも簡単に確認します。
カスタムドメインを作成すると、ルーティングルールとAPIマッピングの両方を設定可能になっています。

vscode-drop-1748999871452-cs3yke5dbp9.png

以下のようにマッピングしました。優先度の数値の小さい上から順に評価されます。

  • my-api-version2 の場合、PetStore v2 のdevステージへ
  • 上記以外の場合、APIマッピングの判定へ
    • PetStore v1 のdevステージへ

vscode-drop-1748999887881-bqfkuvrvanv.png
確認します。

my-api-version2 の場合、PetStore v2 のdevステージへ
vscode-drop-1748999944875-7xvkvu3i2a6.png

上記以外の場合、APIマッピングの判定で、PetStore v1 のdevステージへ
my-api-version3の場合に該当するルールがないため、APIマッピングの判定へ
vscode-drop-1748999979313-5sir7zrx4w.png

こちらも期待どおりですね。

まとめ

API Gatewayのルーティングにヘッダの値が使えるようになったのは面白いですね。
v1,v2のようなバージョン管理やdev,stg,prdなどの環境分けにも使えそうです。

個人の感覚ですが、「ルーティングルール、その後にAPIマッピング」は若干複雑に感じる気がしたので、
まずはAPIマッピングのみ、またはルーティングルールのみのどちらかから使っていこうかなと思いました。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.