How do I define a custom domain for my API Gateway API?
Articles,  Blog

How do I define a custom domain for my API Gateway API?


Amazon API Gateway API にカスタムドメイン名を設定する方法 こんにちは AWS バンガロールオフィスでクラウドサポートエンジニアをしている Pallavi です お客様から API Gateway にカスタムドメイン名を設定する方法についてお問い合わせをいただくことがあります API Gateway のカスタムドメイン名はよりシンプルで誘導的な URL を API ユーザーに提供し API リソースと直接通信できるようにします API エンドポイントに応じて 2 つの種類のカスタムドメイン名を作成することが可能です 2 つのカスタムドメイン名の種類について: ・エッジ最適化カスタムドメイン名 : 所有するドメイン名へのリクエストを受け入れられるよう CloudFront エンドポイントを作成します ・リージョンカスタムドメイン名 : 所有するドメイン名へのリクエストを受け入れられるようリージョンエンドポイントを作成します エッジ最適化カスタムドメイン名とリージョンカスタムドメイン名はエッジ最適化 API またはリージョン API に関連付けることができます このマッピングについて以下で説明します ・エッジ最適化カスタムドメイン名の場合 : マッピングを持てるのは>エッジ最適化 API Gateway またはリージョン別 API Gateway または両方 ・リージョン別カスタムドメイン名の場合 : マッピングを持てるのは>エッジ最適化 API Gateway またはリージョン別 API Gateway または両方 この 2 種類のカスタムドメイン名の主な違いは次の通りです ・エッジ最適化カスタムドメイン名を作成の際に使用される ACM 証明書は us-east-1 リージョンに存在する必要があります 一方リージョン別カスタムドメイン名の場合は ACM 証明書がカスタムドメイン名を作成しているリージョンと同じリージョンに存在している必要があります ・エッジ最適化カスタムドメイン名を作成する場合
ターゲットエンドポイントは CloudFront ディストリビューションとなり “CloudFront ID + .cloudfront.net” の形式になります 一方リージョンカスタムドメイン名を作成する場合 ターゲットエンドポイントが ”ID + .execute-api.us-west-2.amazonaws.com” になり CloudFront ディストリビューションはアタッチされません ・エッジ最適化カスタムドメイン名の場合
ドメイン名は CNAME として CloudFront ディストリビューションエンドポイントにアタッチされます それは CNAME には 1 つの CloudFront ディストリビューションしかないため エッジ最適化カスタムドメイン名に使用されるドメイン名は一意である必要があります 例えば “kcvideo.tk” というエッジ最適化カスタムドメイン名を作成したとします そうすると同じドメイン名 (CNAME) を使用したエッジ最適化カスタムドメイン名や CloudFront ディストリビューションは 全てのアカウント / リージョンで作成できなくなります しかし 2 つの同じ名前のリージョン別カスタムドメイン名は違うリージョンであれば作成することができます ・エッジ最適化カスタムドメイン名をターゲットエンドポイントにマッピングしたい場合は Route53 で CloudFrontディストリビューションのエンドポイントを指す ALIAS レコードを作成してください リージョンカスタムドメイン名をターゲットエンドポイントにマッピングしたい場合は CNAME レコードのみ使用可能です ALIAS レコードはリージョンカスタムドメイン名ではサポートされていません リージョン別カスタムドメイン名マッピングに ALIAS レコードの作成を試みると “Invalid value” が表示されます 実際に API Gateway コンソールでカスタムドメイン名を作成する方法をご紹介します ・API にカスタムドメイン名を設定する前に使用するカスタムドメイン名のタイプに応じて ACM に SSL/TSL 証明書を用意してください ・これは API Gateway へのリクエストは HTTPS を使って暗号化される必要があるからです ドメイン名の証明書を得るには ACM で証明書を発行するか
ACMに証明書をインポートします “kcvideo.tk” のようなドメイン名を登録するには Route53 やサードパーティのドメインレジストラを使用します その後 ACM でドメイン名の証明書を発行またはインポートします ご覧の通り AWS マネジメントコンソールにサインインしました Ceritificate Manager コンソールに移動します [証明書のリクエスト](Request a certificate) をクリックします API のカスタムドメイン名を入力します
この例では “api.kcvideo.tk” にします オプションでさらに別のドメイン名を証明書に含めることもできます [次へ](Next) をクリックします 検証方法を選択します 検証によりリクエストしているドメイン名がお客様の所有または管理していることを確認します DNS または E メールの検証を選択できます 選択したら内容を確認し [確定とリクエスト](Confirm and request) をクリックします [続行](Continue) をクリックします すると証明書のステータスが 検証保留中(Pending Validation) になります ドメイン名の検証が完了すると証明書が発行されます ドメインが Route53 にある場合はホストゾーンに DNS 設定を直接書き込むことができます [Route 53 でのレコードの作成](Create record in Route53) をクリックします すると ACM は DNS 検証のための CNAME レコードを作成します [作成](Create) をクリックします DNS レコードが ACM により Route53 ホストゾーンに書き込まれました 検証プロセスが完了するまでに 30 分以上かかる場合もあります ACM コンソールを更新して証明書の検証が完了しているか確認します 更新すると実際に API に使用できる ACM 証明書の検証が完了していることが分かります この証明書をカスタムドメイン名に関連付け
API Gateway でこの証明書を使うよう設定します ドメイン名の検証が終わったら
有効な証明書がアカウント上に作成されます API Gateway コンソールに戻ります [カスタムドメイン名](Custom Domain Names) を選択し
[カスタムドメイン名の作成](Create Custom Domain Name) をクリックします カスタムドメイン名を入力します 証明書を作成した時と同じものを入力してください 今回の場合は “api.kcvideo.tk” です エンドポイント設定ではご利用状況に応じて エッジ最適化(Edge Optional) または リージョン(Regional) を選択します 次に ACM 証明書をドロップダウンリストから選択します ベースパスマッピング(Base Path Mapping) 項目にて [マッピングの追加](Add mapping) をクリックし デプロイした API のステージにベースパス(Base Path) を設定します 送信先(Destinations) から API を選び 次にステージを選択します [保存](Save) をクリックします カスタムドメイン名が作成されたら コンソールにエンドポイント設定に従うターゲットドメイン名が表示されます CloudFront ディストリビューションドメイン名の場合はディストリビューション ID の形式 (cloudfront.net) で確認できます エッジ最適化エンドポイントタイプを選択した場合は証明書 ARN と共に表示されます リージョンエンドポイントタイプの場合はリージョンエンドポイントとして画面のようにターゲットドメイン名が表示されます ターゲットドメイン名をコピーします A レコードをドメイン名の DNS プロバイダに設定し 先ほどのステップで作成したターゲットドメイン名にポイントします 今回のデモでは Route53 を使用しますが 他のサードパーティ DNS プロバイダでもプロセスはあまり変わりません カスタムドメイン名の初期化には少し時間がかかる場合があります Route53 コンソールに移動します 左側の項目から [ホストゾーン](Hosted zones) を選択します 次にカスタムドメイン名のマッピングに使用するホストゾーンを選択します [レコードセットの作成](Create Record Set) をクリックします 証明書および API Gateway のカスタムドメイン名と同じドメイン名で カスタムドメイン名の A レコードを作成します 今回は “api.kcvideo.tk” を使用します エイリアスレコード(Alias) には はい(Yes) を選択し エイリアス先(Alias Target) にはターゲットドメイン名を入力します 今回は API Gateway コンソールでコピーした CloudFront ドメイン名となります [作成](Create) をクリックします リージョン別カスタムドメイン名を作成している場合は ターゲットドメイン名に Route53 コンソール経由で CNAME レコードを作成するか AWS CLI を使用して ALIAS ターゲットを作成してください リージョン別カスタムドメイン名のターゲットドメイン名には Route53 コンソール経由で ALIAS レコードを作成できませんのでご注意ください 全てのプロセスが完了したら 先ほど設定したベースパスに従ってカスタムドメイン名にリクエストを発行することができます ターミナルから設定を確認します EC2 ユーザーにターミナルからログインしました API Gateway カスタムドメイン名に Curl リクエストを実行し出力結果を見ます Enter キーを押します API Gateway ステージ URL を呼び出した時の出力結果と同様の正しい出力が表示されました ご覧いただきありがとうございました
引き続きクラウドコンピューティングをお楽しみください ! AWS よりお送りしました

9 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *