【AWS】ACMで発行した証明書を使ってAPI Gateway カスタムドメインを設定する〜デフォルトエンドポイント無効化まで〜

## はじめに
2025/6/1時点：
AWS マネジメントコンソールにて以下の設定を行う手順を記載する。
Route 53 で取得したドメインを利用してAPIにカスタムドメインを割り当ててAPIコールする。
カスタムドメイン以外のデフォルトのエンドポイントは無効化する。
- 証明書はACMで発行
- ドメインはRoute 53で登録したドメインを利用
- API Gateway
    - エンドポイントタイプ：リージョン（東京）
    - REST API
    - レスポンス：Lambdaで`Hello from Lambda`を表示

## その他 前提情報
2025/6/1時点の以下の情報を基本の手順として実施
[API Gateway でのパブリック REST API のカスタムドメイン名 - Amazon API Gateway](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-custom-domains.html)

API エンドポイントタイプ：リージョン or エッジ最適化 で異なる
本記事はリージョンのAPIを対象とする。
>リージョン別カスタムドメイン名で ACM 証明書を使用するには、API と同じリージョンで証明書をリクエストまたはインポートする必要があります。証明書はカスタムドメイン名を対象としている必要があります。

>エッジ最適化カスタムドメイン名で ACM 証明書を使用するには、米国東部 (バージニア北部) – us-east-1 リージョンで証明書をリクエストまたはインポートする必要があります。

## 手順
### ０．事前確認
API情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/4b753eef-cefd-42b3-8212-3aebc6635a7e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/f62830a4-36fd-4ec2-9956-fd0ad728416e.png)

APIのメソッドに対応するLambda情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/4e6b3cd7-38c2-4ba1-81a8-d4251615dec0.png)

APIコールのレスポンス確認
正常に`Hello from Lambda`のレスポンスがあること
```
C:\Users>curl https://XXX.ap-northeast-1.amazonaws.com/prod/hello
{"statusCode": 200, "headers": {"Content-Type": "application/json"}, "body": "{\"message\": \"Hello from Lambda\"}"}
```

### １．ACMで証明書発行
APIと同一リージョンでパブリック証明書をリクエスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/4928b366-7787-4930-bb57-16364ffd79dc.png)

ステータス：保留中
CNAME名とCNAME値を控える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/d4247de8-9d08-4456-93d4-d3f239f306ff.png)

### ２．Route 53 でCNAMEレコード作成
１で控えたCNAMEレコードを登録する
※自身でパラメーターを設定して登録も可能であるが、ACM画面からRoute 53でレコードを作成するで実施も可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/a3cd1d38-6c12-4221-a76c-8e80895dba9e.png)

レコードの登録をコンソールから確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/2a765408-16ee-46c3-8ca5-ef8562988bb1.png)


### ３．ACMの証明書の発行を確認
ACM証明書のステータス：発行済み であることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/8d164176-3cfd-48ff-a305-59d912653a27.png)

### ４，API Gatewayでカスタムドメインを作成
カスタムドメインを作成
今回はリージョンのためエンドポイントタイプ：リージョン
ACM証明書：発行した証明書
※同一リージョンの証明書のみ選択可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/eaf9742e-a3f2-4734-a8bc-ff1421be5078.png)

カスタムドメインの正常作成を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/3e985509-dcbc-44ef-a25c-e62aba7c2757.png)

### ５．APIマッピングの作成
カスタムドメインと紐づけるAPI Gatewayのステージとパス（オプション）を選択
※パスも指定し、特定のパスのみを紐づけることも可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/bf6b53c0-8bfb-471e-b1b5-ca13c099a999.png)

正常に作成されること
カスタムドメイン名とAPI Gatewayドメイン名を控えておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/76129eda-7c20-46f9-afe8-f970650d1a93.png)

### ６．Route 53 レコード作成（カスタムドメインとAPI Gateway ドメイン名の紐づけ）
５で控えたレコードを登録する
※エイリアスレコードでもCNAMEレコードどちらでも実装可能
　Route 53ではエイリアスレコードの設定が可能であるため推奨
 　その他のレジストラではCNAMEで作成
今回はRoute 53 であるがその他のレジストラの動作確認も含めCNAMEで作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/6e45e2aa-6014-4d7c-bfc7-6edfc067d913.png)

### ７．カスタムドメインでのAPIコール確認
カスタムドメインでも、デフォルトのエンドポイントでも
両方で通信が成功すること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/e00575e9-e35a-4fe4-8410-48283be06e19.png)

### ８．（おまけ）デフォルトのエンドポイント無効化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/e6797e12-0bcb-4f30-8911-caa82aa95c3e.png)

カスタムドメインでは通信成功
デフォルトのエンドポイントでは`Forbidden`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/cbc8c087-8093-4c4f-bf96-582a0c0e6850.png)

ブラウザでも同様
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3879433/cf8f5035-962d-4cb6-b462-1bc47df98c6c.png)

以上！