🎉

AWS API Gateway に独自ドメインを使ってアクセスできるようにする

3 min read

表題の通り、今回は API Gateway に独自ドメインを通じてアクセスできるように設定していきます🙋‍♂️

前提

  • エンドポイントのタイプは「エッジ最適化」
  • ACM で証明書を発行済み
    • CloudFront を使うので us-east-1 バージニアリージョンで発行しておく必要があります
  • Route53 を使用

やる

まずは API Gateway のコンソールから「カスタムドメイン名」を選択し、ドメインの登録をしていきます。

ここで登録するドメインは特定のエンドポイントに依存するものではなく、 API Gateway 全体の設定になります。登録したドメインを特定のエンドポイントへ関連付けるのはこの後行います。

  1. 作成

  2. 使用したいドメインを入力(もちろんサブドメインも使えます)

  3. 「エッジ最適化」を選択

  4. 使用する証明書をドロップダウンから選択(おそらく us-east-1 に存在する証明書しか表示されません)

  5. 「ドメイン名を作成」を押す

こんな感じで画面が表示されれば登録完了です😎

次に API マッピングを設定していきます。
今だとカスタムのドメイン名を登録しただけです。
登録したドメインのどのパスにアクセスしたら、

  1. どの API の
  2. どのステージに

アクセスするかをマッピングしていきます。

1つのドメイン を複数のアプリ(API)やステージで使いたいことはあると思いますので、こういう設定が必要です。
マッピングタブから、「新しいマッピングを追加」まで進んでください。

以下のような画面になります。

見たままなのですが、一応説明しておくと、

  • API: 関連付ける対象の API
  • ステージ: その API のどのステージにマッピングしたいのか(Prod , Stg など)
  • パス: どのパスにアクセスした場合に、設定したステージにルーティングするか
    です。

パスに関してはオプションです。
何も設定しなければ登録したカスタムドメインのルートにアクセスがあった時、指定したステージにルーティングしてくれます。
www.example.com/prod のようにアクセスが来た時には API の Prod ステージにマッピングしたい、という場合にはステージの所に Prod, パスの所に /prod を入れます!!
マッピングは複数登録できますので、パスによってステージを分けたい場合には複数登録することになります。

適当に登録してみました。
以下のようになればOKです!

これで終わり。。。!!
と思いきやそんなことはありません。あと一歩です。頑張りましょう🙌

エンドポイントのタイプに「エッジ最適化」を選択してカスタムドメインを登録した時点で自動的に CloudFront のエンドポイントが発行されているはずです。
dhvqy149xdr5u.cloudfront.net みたいな形式のやつです。
このエンドポイントを通して API Gateway にルーティングするのが「エッジ最適化」です。

しかし、登録したカスタムドメインにアクセスがあった時、どうやってこの CloudFront エンドポイントまでルーティングするのでしょうか?
CloudFront エンドポイント から API Gateway のマッピングは良しなにやってくれていますが、カスタムドメインから CloudFront エンドポイントまではルートを設定してあげないといけません👨‍
ルートの設定には route53 を利用します。

やることは簡単です!
設定したカスタムドメインに対応するホストゾーンの画面から、新規レコードの作成画面まで移動します。

レコードタイプは A です。
IP アドレスを直接入れるのではなく、AWS サービスとの統合です。

  1. 設定したカスタムドメイン名になるようにレコード名の部分を埋めます
  2. トラフィックのルーティング先で「エイリアス」に切り替えます
  3. 「API Gateway API へのエイリアス」を選択し、先ほどの CloudFront エンドポイント まで選択します
  4. レコード作成ボタンを押す

無事に A レコードが発行されればOKです!

これでようやく設定は完了です、お疲れ様でした😋
curl で叩くなりして確認してみてください!


分かればどうってこと無いのですが、公式ドキュメントが少し分かりにくい感じがしたので画像多めで解説してみました。
どなかたの役に立てば幸いです🙏

参考資料

Discussion

ログインするとコメントできます