AWS API Gatewayのカスタムドメインを実装する方法
API Gatewayのカスタムドメインを実装できるか実験しました。
「API Gateway でリージョン別の REST API または WebSocket API 用カスタムドメイン名を設定する」が凄いわかりにくいです。
まず以下を前提条件として以下とします。
- Route53でドメイン取得済みであること
- 証明書はバージニア北部で発行済であること
API Gateway → Lambdaといきたいところですが、今回はMockでの検証です。(Lambdaでも可能です)
API Gatewayの設定が済んだらデプロイ
エンドポイントタイプは「リージョン」にします。デプロイ忘れないようにしましょう。設定変更したら反映するのにデプロイ必要です。
以下の形式でデプロイされます。
https://xxx.execute-api.リージョン.amazonaws.com/ステージ/リソース
今回はステージをdev、リソースを上記のようにtestとしてます。GETメソッドに対してLambdaが実行されるようなイメージです。
カスタムドメインのパスマッピングを以下のようにするとhttps://ドメイン/test
でアクセスが可能になります。スラッシュに対してステージをマッピングしています。
sampleがAPI Gateway名で、devがステージ名です。
https://xxx.execute-api.リージョン.amazonaws.com/dev/test
でアクセスしてたところがカスタムドメインを使用すると
https://ドメイン/test
でアクセスすることができるようになります。もちろんベースパスマッピングの設定によります。
カスタムドメイン名を指定する
AWS API Gatewayの設定が済んだら実際にカスタムドメイン名を設定します。
一番下に記載している参考サイトが非常にわかりやすく書いています。
ACM証明書が「*.test.com
」の場合、ドメイン名は「abc.test.com」のように*
の部分を明記するだけです。
testapi.yahoo.co.jp
みたいな部分がドメイン名、バージニア北部でACM証明書を発行している為、エッジ最適化を選択、ACM証明書はバージニア北部を選択することができます。(反映までに30~60分くらいかかります)
Route53にAレコード
次にRoute53のAレコードを設定します。この辺くわしく調べてませんが、カスタムドメイン名(testapi.yahoo.co.jpみたいな)と同じエイリアス名にした方がよさそうです。
エイリアス先は「d12xx34308jds.cloudfront.net.」みたいなcloudfront.netのURLになります。これは、カスタムドメイン名設定時にエッジ最適化を選択している為です。
リージョナルの場合は、カスタムドメインのターゲットドメイン名をAレコードのエイリアス先に指定します。(プルダウンで出てきます)
API Gatewayのエンドポイント
ACM証明書をどこで取得したかとAPI Gatewayのエンドポイントが実は重要になります。
ACM証明書 | API Gatewayのエンドポイント |
---|---|
バージニア北部 | エッジ |
バージニア北部以外 | リージョン |
ACM証明書とAPI Gatewayのエンドポイントをきちんと設定すればマッピングが可能です。
カスタムドメインでエッジ最適化してAPI Gatewayのエンドポイントタイプがエッジだとエラーになりますのでご注意ください。
カスタムドメインのエンドポイント | カスタムドメイン作成 | ACM証明書 |
---|---|---|
エッジ最適化 | 独自ドメインでカスタムドメイン作成が可能 | バージニア北部 |
リージョン | API Gatewayのエンドポイントでカスタムドメイン作成が可能 | 該当リージョン |
ベースパスマッピング
ベースパスマッピングで、パスと送信先だけ設定し、ステージを未入力にすることによって以下のようなURLにすることができます。
https://example.com/base/v1/api404 - Not Found
プライベートAPIではカスタムドメインサポートされていませんので、ベースパスマッピングなどもできません。
Amazon API Gateway でプライベート API を作成する
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント