API Gatewayに独自ドメインでアクセスする方法（リージョン編）

カスタムドメインを使って、API Gatewayに独自ドメインでアクセスする方法をまとめます。
本記事は「**リージョン編（API Gatewayのエンドポイントをリージョンに設定）**」でCloudFrontを利用しないので、国内限定サービスなどに良いと思います。
また、API Gateway につながる実際のAPIについては「[API Gateway、Lambda(Node.js)、DynamoDB を使ったAPIの作り方](https://qiita.com/chinone0711/items/13abf8b6f39d09f04962)」で作ったAPIを利用するので、こちらを先に見ておくと良いかと思います。

ちなみに、CloudFrontを利用するエッジ最適化については、「[API Gatewayに独自ドメインでアクセスする方法（エッジ最適化編）](https://qiita.com/chinone0711/items/4677014a74a80df9ac75)」を参考にしてください。

# 前提
route53でドメインを取得していること。
本記事では取得済ドメインの **サブドメイン** を利用します。

# ACMでSSL証明書を発行
ACM（Certificate Manager）を使って取得済ドメインのSSL証明書を発行します。
今回はリージョン編なので、任意のリージョンで証明書を発行します。

「証明書をリクエスト」をクリックします。
![acm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/e7660e16-fb10-3af5-6cc8-fbb09db2cf0e.png)

「パブリック証明書をリクエスト」が選択されているので、そのまま「次へ」をクリックします。![acm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/5ba6b830-1b94-500e-7ade-c95215c5927f.png)

「完全修飾ドメイン名」入力欄に値を入力します。例えば取得済ドメインが「hoge.com」ならば、「*.hoge.com」と入力しましょう。
検証方法は推奨されている「DNS検証」のまま、「リクエスト」をクリックします。
![acm3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/08ee109c-4dcc-e1c0-c2f5-4af694ba2adb.png)

すると以下のような画面になり、まだ保留中のままになっているので、「証明書ID」のリンクをクリックします。
![acm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/54cafbf4-6834-67e1-b636-e9fb3313160e.png)

すると以下のような画面になります。あとで route53で利用するので「CNAME名」と「CNAME値」を控えておきます。
![acm5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/3d176463-d5f3-52fe-d056-130384189165.png)

# route53 で CNAME を設定する
route53の画面を選択、既に作成済ドメインのホストゾーンを選択して、以下のように「レコードを作成」をクリックします。
![route53_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/9a4abe46-a3fb-cb05-e43c-85f8750e9ea2.png)

レコードタイプに「CNAME」を選択し、前述の「CNAME名」と「CNAME値」を入力します
![route53_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/9d17fc96-b3c0-6fa0-628b-9e0e7ae1ad75.png)

その後、約20分ほどで SSL証明書が発行済となります。
以下ACMの画面からも、「発行済み」になっていることを確認できます。
![acm_route53_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/b573d81b-b926-8a86-9bcb-692bd73d0240.png)

# API Gateway でカスタムドメインを作成

カスタムドメインを選択して「作成」をクリックします。
![custom1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/86ca3a01-9713-86fb-9350-4c1bcd4a09ab.png)

カスタムドメイン名（例えば取得済ドメインがhogehoge.comならば、api.hogehoge.comとする）を入力します。
その後、エンドポイント設定を「リージョン」にチェックすると、ACM証明書のところで、前述で発行したSSL証明書が選べるので選択をします。
その後に「ドメイン名を作成」をクリックします。
![custom2_R.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/4a7139de-2ae0-8c28-69c5-82b1cada8e75.png)

すると、以下のようにカスタムドメインが出来ます。
API Gatewayドメインは、のちほどroute53で利用します。
![custom3_R.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/21778ba9-acca-f6f2-bee2-5631cac55083.png)

続いて「APIマッピング」タブを選択して、「APIマッピングを設定」をクリックします。
![custom4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/1b8b4df0-6983-a704-c5a9-8311c01a78e8.png)

「新しいマッピングを追加」をクリックします。
![custom5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/ca49202a-c773-6368-37a8-7b1c13868722.png)

APIの欄に API GatewayのAPI（ここでは「[API Gateway、Lambda(Node.js)、DynamoDB を使ったAPIの作り方](https://qiita.com/chinone0711/items/13abf8b6f39d09f04962)」を利用）、ステージには同じくAPI Gatewayのステージを選択します。
パスは任意で設定します。ここではAPIをバージョン管理できるように「v1」とつけておきます。これにより、URLが https://api.hogehoge.com/v1/ などになります。
全て設定できたら、「保存」をクリックします。
![custom6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/4fab588b-37ec-e91f-7b33-996badd1d64d.png)

# 再び route53でサブドメインを設定
API Gatewayのカスタムドメインが設定できたら、route53でそのカスタムドメイン（サブドメイン）を設定します。
以下のよう該当のホストゾーンから「レコードを作成」をクリックします。
![route53_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/475f5dd4-a004-638c-6b9f-6adce9dfd9f7.png)

レコード名には、カスタムドメインと同じく「api」を設定して、レコードタイプは「Aレコードとします」
トラフィックのルーティングは以下のようになりますが、ここで注目すべきは、前述で出てきた API Gatewayのエイリアス が選べるようになっていることです。API Gatewayのエイリアス を選んで「レコードを作成」をクリックしましょう。
![route53_11_R.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/a1f381b4-68bb-87f9-569a-b0681cf7a7d3.png)

以上で独自ドメイン（カスタムドメイン）でAPI Gateway が利用できるようになりました。
ためしに postman でアクセスしてみましょう。
前述したように、API GatewayのAPIには（[API Gateway、Lambda(Node.js)、DynamoDB を使ったAPIの作り方](https://qiita.com/chinone0711/items/13abf8b6f39d09f04962)）で作成したAPIがつながっているので、リクエストJsonを以下のようにします。
```
{
    "action": "overview",
    "eid": "00001"
}
```
postmanでは以下のように正常にレスポンスが返ってきたことが分かります。
![postman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348676/8dd574b1-b294-24cb-7e37-c95f545327ed.png)

以上です。