Amazon Elasticsearch Serviceのカスタムエンドポイント設定方法

## はじめに
2020年11月5日にAmazon Elasticsearch Service(以降、AES)において
**好きなドメイン名でKibanaにアクセスできる**カスタムエンドポイントがローンチされました。

AESのドメインを再構築する度にアクセス先のURLが変わるのツラかった。。
本投稿は、実際に設定してみた際の手順を備忘録的にまとめてみました^^

**【参考】**
・ [Amazon Elasticsearch Serviceが、ドメインエンドポイントのカスタム名を定義できるように][00]

## 利用環境
| 項目 | 内容 |
|---------|---------|
| Elasticsearch | 7.9 (latest) |
| Region | us-west-2 |
※投稿時点における最新版を採用しています。

## 前提条件
- AESはパブリックアクセス、各種認証は無効、HTTPS要求は有効で事前構築済みになります。
- 事前にRoute53でホストゾーン(opensiem.name)を取得しています。

## 実施内容
1. SSL証明書の作成
2. カスタムエンドポイントの有効化
3. CNAMEレコードの登録

**【参考】**
・ [カスタムエンドポイントの作成][01]

### 1. SSL証明書の作成
- Certificate Managerから**今すぐ始める**をクリックします。(AESと同じリージョンを利用します)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/5503fc68-f2e1-5bef-167e-7c513b3e250f.png)

- **パブリック証明書のリクエスト**を選択し、**証明書のリクエストボタン**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/1936646c-645a-8bd3-f96e-b1c275213ac8.png)

- 好きなドメイン名を入力し、**次へ**クリックします。(今回は、aes.opensiem.nameとします)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/2696bbbe-3f05-e8f2-2682-88dab8f818d3.png)

- Route53にopensiem.nameドメインのゾーンがあるので、**DNSの検証**を指定し、**次へ**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/0d481682-42c6-6139-5281-a3bba1428901.png)

- タグはお好みでつけた上で**確認ボタン**を押して証明書のリクエストを完了させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/997e2e74-552d-5f67-3935-63548af5715e.png)

- **Route53でのレコードの作成**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/8c3e77c2-c69c-cea4-7ef0-fba6ec9c4801.png)

- opensiem.nameドメインのゾーンに検証用のCNAMEレコードが生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/8d9498d8-4546-a714-b287-f0d6f85a8646.png)

- 最大30分後に検証OKであれば、**発行済み**となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/379816a1-eeee-bd75-a2e9-81a08347c67d.png)

- これでSSL証明書の作成は完了です！

### 2. カスタムエンドポイントの有効化
- AESの作成済みのドメイン(今回は、test-es)を編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/f387ece8-4c4c-68b4-2a53-60ac54b8da12.png)

- **カスタムエンドポイントの有効化**にチェックを入れます。
- すると**カスタムホスト名**と**AWS証明書**を指定する項目が表示されます。
- 作成したドメイン名と証明書を指定し、保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/b2d0c6c8-acd9-9f1a-6ec2-7226ecb10574.png)

- すると**カスタムエンドポイント**と**カスタムKibana**のURLが自動生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/6b8b5748-4dc0-bcb0-f876-d7391675dcc7.png)

- このままではカスタムKibanaのURLにはアクセス出来ないため、Route53でCNAMEを書きます。

### 3. CNAMEレコードの登録
- Route53の保有しているホストゾーン(今回は、opensiem.name)を開きます。**レコードを作成**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/41583d9a-c076-9f87-9fc7-ec8538c059c8.png)

- **レコード名**にホスト名、レコードタイプをCNAMEを指定します。
- 値には、元のKibanaのURL(searchから始まり、amazonaws.comで終わるドメイン名)を入力し、レコードを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/5f0ddcb4-1de4-c271-c3a0-1cbd26fe1a65.png)

- 数分後、digコマンドでカスタムエンドポイントで指定したドメイン名の名前解決を確認します。

```
~ % dig aes.opensiem.name

; <<>> DiG 9.10.6 <<>> aes.opensiem.name
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20759
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;aes.opensiem.name.		IN	A

;; ANSWER SECTION:
aes.opensiem.name.	377	IN	CNAME	search-test-es-y7ffwqidjsq3j3ssq5kz2ylcva.us-west-2.es.amazonaws.com.
search-test-es-y7ffwqidjsq3j3ssq5kz2ylcva.us-west-2.es.amazonaws.com. 77 IN A 52.39.156.163
search-test-es-y7ffwqidjsq3j3ssq5kz2ylcva.us-west-2.es.amazonaws.com. 77 IN A 18.236.31.138

;; Query time: 292 msec
;; SERVER: 172.20.10.1#53(172.20.10.1)
;; WHEN: Sun Feb 14 19:42:27 JST 2021
;; MSG SIZE  rcvd: 160
```

- 上記のように元のKibanaのドメイン名、2つのIPアドレスを返せばCNAME登録は完了です。

- WebブラウザでカスタムKibanaのURLでアクセスし、以下のHome画面が表示されれば成功です！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/a3e383ea-e9f1-bf4d-db2c-a4372f52e855.png)

お疲れ様でした！

## まとめ
いかがでしたでしょうか？

意外とサクッとできると思いますので、息抜きにでも試してみてはいかがでしょうか^^

[00]:https://aws.amazon.com/jp/about-aws/whats-new/2020/11/amazon-elasticsearch-service-now-supports-defining-a-custom-name-for-your-domain-endpoint/ "Amazon Elasticsearch Serviceが、ドメインエンドポイントのカスタム名を定義できるように"
[01]:https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-customendpoint.html "カスタムエンドポイントの作成"