API Gatewayで作成したデフォルトのエンドポイントをカスタムドメイン化する

## 概要

API Gatewayで作ったAPIのエンドポイントはデフォルトの状態だと次のような感じになっている。

```
https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com
```

このままだと視覚的にわかりづらいため、任意のドメインに変更したい。

## 前提

Route53に変更希望の独自ドメインがすでに登録済みである事。
参照:  [AWSだけで独自ドメインを取得して自分のWebページを公開するまで](https://qiita.com/ymzk-jp/items/ae115ed6d0fd2d383cec)

## Lambda関数を作成

![スクリーンショット 2021-02-07 16.12.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/9907200d-a14b-5e43-72fe-4ecbea4985c9.png)

まず、適当な値を返すためのLambda関数を作成する。

![スクリーンショット 2021-02-07 16.13.11_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/dc8c0e1c-e70e-c04a-271f-d4176d3a403a.jpeg)



```ruby:./lambda_function.rb
require 'json'

def lambda_handler(event:, context:)
    # TODO implement
    { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end
```

コードの中身はデフォルトのままでOK。

## API Gatewayを作成

![スクリーンショット 2021-02-07 16.18.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/0c691568-fb71-925f-9b43-e345864c6971.png)

先ほど作成したLambda関数と紐づけるためのAPIを作成。

![スクリーンショット 2021-02-07 16.20.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/352b1710-4a3f-cb05-f6ae-0b8b71968ab7.png)

「アクション」→「リソースのアクション」→「メソッドの作成」→「GET」

- 統合タイプ
  - Lambda関数
- Lambdaプロキシ統合の使用
  - チェック
- Lambdaリージョン
  - ap-northeast1
- Lambda関数
  - customer-domain-api
- デフォルトタイムアウトの使用
  - チェック

この辺の設定は各自お好みで。

![スクリーンショット 2021-02-07 16.25.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/bf6b4d69-21b2-e342-3589-3f6f54ff1550.png)

- デプロイされるステージ
  - 新しいステージ
- ステージ
  - v1
- ステージの説明
  - 適宜
- デプロイメントの説明
  - 適宜

この辺もお好みで。

![スクリーンショット 2021-02-07 16.30.48_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/bbb86c51-3cd1-58f8-6df9-035a153c7326.jpeg)

デプロイに成功するとエンドポイントが表示されるのでクリック。

![スクリーンショット 2021-02-07 16.32.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/284a5ea8-eabd-27b8-1e65-29059d44152c.png)

正常にレスポンスが返ってくれば成功。

## SSL証明書を発行

![スクリーンショット 2021-02-07 15.24.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/12805f5b-9125-9909-3a24-5b46a937da98.png)

「Certificate Manager」から「証明書のプロビジョニング」をクリック。

![スクリーンショット 2021-02-07 15.24.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/e4f11d4a-6418-f606-8ead-bf76871cde13.png)

「パブリック証明書のリクエスト」

![スクリーンショット 2021-02-07 15.25.21_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/7b993486-a44f-fe2a-161b-4d1c4c161d37.jpeg)

希望のドメインを入力。

![スクリーンショット 2021-02-07 15.25.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/66f14452-c0c9-ef71-54c4-5e4b80fbf145.png)

「DNSの検証」

![スクリーンショット 2021-02-07 15.26.09_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/108c871f-59d3-d538-6ac9-8d6b2679dbaa.jpeg)

問題無ければ「確認とリクエスト」をクリック。（タグは無しでもOK）

![スクリーンショット 2021-02-07 15.41.18_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/9b542f3e-84d2-31c1-4b53-9efd4f9bb227.jpeg)

「Route53でのレコードの作成」をクリック。

![スクリーンショット 2021-02-07 16.41.34_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/010d80b7-3b8f-f884-7993-fae81a236e56.jpeg)

ある程度時間が経つと検証に成功するはず。

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

![スクリーンショット 2021-02-07 17.23.21_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/82749265-20f6-8f67-3c66-5e400e12179e.jpeg)


「API Gateway」→「カスタムドメイン」からカスタムドメインを作成。

- ドメイン名
  - 任意（今回は「api.」というサブドメインで運用する事を想定。）
- ACM証明書
  - 先ほど発行した証明書

![スクリーンショット 2021-02-07 16.56.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/4d146eff-ba24-998f-8f7c-6a992fcc3db1.png)

「APIマッピングを設定」

- API
  - 先ほど作成したAPI
- ステージ
  - 任意
- パス
  - 任意

## Route53でレコード作成

![スクリーンショット 2021-02-07 17.04.01_censored_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/5abbc7af-98a8-e819-fd1d-78e3f6163119.jpeg)

「Route53」→「ホストゾーン」→「レコード作成」

- ルーティングポリシー
  - シンプルルーティング
- レコード名
  - 任意（今回は「api.」というサブドメインでの運用を想定）
- エイリアス
  - チェック
- レコードタイプ
  - IPv4
- トラフィックのルーティング先 
  - API gateway APIへのエイリアス
  - アジアパシフィック（東京）
  - 該当のエンドポイント
- ターゲットへのヘルスを評価
  - チェック

![スクリーンショット 2021-02-07 17.32.22_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/b0f63de4-6de7-664c-b3d7-62dcb6691c2d.jpeg)

```
https://api.ドメイン名
```

レコード作成後、↑にアクセスして正常にレスポンスが返ってくればカスタムドメイン化に成功。（状況によっては反映までに時間がかかる事も有り。）

## あとがき

お疲れ様でした。もし記事通りに進めて上手く動作しない箇所があったらコメント蘭などで指摘していただけると幸いです。