はじめに
公式ドキュメント: カスタムエンドポイントの編集 に記載されている
編集アクションによる変更の進行中は、カスタムエンドポイントへの接続やカスタムエンドポイントの使用はできません。エンドポイントのステータスが [使用可能] に戻り、再度接続できるようになるまでに数分かかることがあります。
「使用できません」とは?
「再度接続できるようになる」までの間どういう状況なの?
設定変更したいときどうしよう?
という興味で試してみた。
※AWS側の仕様変更などで将来的に確認結果は変わる可能性はあるので現状 (2019/2/22現在)の参考までに。
確認方法
Auroraクラスタに対してDNS Lookupの状況の変化+mysqlコマンドでの接続可否がどう変化するのかを見ていく。
※以下のような雑な確認用スクリプトにて...。
#!/bin/bash
BEGIN=1
END=1800
LOG=$1
for i in `seq ${BEGIN} ${END}`
do
echo "---`date`---" >> ${LOG}
dig +short tomy-sre-aurora-read.cluster-custom-xxxxxxx.ap-northeast-1.rds.amazonaws.com >> ${LOG}
echo "------------" >> ${LOG}
mysql -udba -pxxxx -htomy-sre-aurora-read.cluster-custom-xxxxxxx.ap-northeast-1.rds.amazonaws.com --skip-column-names -e "select version()" >> ${LOG}
echo "" >> ${LOG}
sleep 5
done
今回のエンドポイントの初期状態
- 後ほど実施していく動作のために以下のような状態を作っておいた。
- AWS CLIで確認してみると以下のようになっていた。
$ aws rds describe-db-cluster-endpoints | jq .
:
{
:
"Status": "available",
"EndpointType": "CUSTOM",
"CustomEndpointType": "ANY",
"StaticMembers": [
"tomy-sre-aurora2"
],
"ExcludedMembers": [],
:
}
※チェックが入っているインスタンスが StaticMembersに入っている。
※追加設定「今後追加されるインスタンスをこのクラスターにアタッチする」
にチェックが入っていない=StaticMembers
既存のカスタムエンドポイントの設定変更をしていってみる
1) DBインスタンスを追加してみる
- 以下のように
tomy-sre-aurora3
にチェックを追加して [Save endpoint] で保存
- CLIで確認すると以下の状態になった。
$ aws rds describe-db-cluster-endpoints | jq .
:
{
:
"Status": "available",
"EndpointType": "CUSTOM",
"CustomEndpointType": "ANY",
"StaticMembers": [
"tomy-sre-aurora2",
"tomy-sre-aurora3"
],
"ExcludedMembers": [],
:
}
※チェックが入っているインスタンスが StaticMembersに入る。
※追加設定「今後追加されるインスタンスをこのクラスターにアタッチする」
にチェックが入っていない=StaticMembers
- 1分くらいでDNS Lookupできなくなり始めてmysqlコマンドで接続先が見つからなくなる =
使用不可
の状態
ERROR 2005 (HY000): Unknown MySQL server host 'tomy-sre-aurora-read.cluster-custom-xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com' (2)
- 15分くらいでDNS Lookupが安定してできるようになった。
2) DBインスタンスを一部削除してみる
-
1)
が終わった状態で以下のようにtomy-sre-aurora2
のチェックをはずして [Save endpoint] で保存
- CLIで確認すると以下の状態になった。
$ aws rds describe-db-cluster-endpoints | jq .
:
{
:
"Status": "modifying",
"EndpointType": "CUSTOM",
"CustomEndpointType": "ANY",
"StaticMembers": [
"tomy-sre-aurora3"
],
"ExcludedMembers": [],
:
}
※チェックが入っているインスタンスが StaticMembersに入る。
※追加設定「今後追加されるインスタンスをこのクラスターにアタッチする」
にチェックが入っていない=StaticMembers
- 1分くらいでDNS Lookupできなくなり始めてmysqlコマンドで接続先が見つからなくなる
ERROR 2005 (HY000): Unknown MySQL server host 'tomy-sre-aurora-read.cluster-custom-xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com' (2)
- 15分くらいでDNS Lookupが安定してできるようになった。
3) 「追加設定」を変更してみる
-
2)
が終わった状態で以下のように今後追加されるインスタンスをこのクラスターにアタッチする
にチェックして [Save endpoint] で保存
- CLIで確認すると以下の状態になった。
$ aws rds describe-db-cluster-endpoints | jq .
:
{
:
"Status": "modifying",
"EndpointType": "CUSTOM",
"CustomEndpointType": "ANY",
"StaticMembers": [],
"ExcludedMembers": [
"tomy-sre-aurora1",
"tomy-sre-aurora2"
],
:
}
※追加設定「今後追加されるインスタンスをこのクラスターにアタッチする」
にチェックが入っている=ExcludedMembers
※今存在するインスタンスかつチェックが入ってなければ今後自動でアタッチされないのでExcludedMembersになっている。
- 1分半くらいでDNS Lookupできなくなり始めてmysqlコマンドで接続先が見つからなくなる
ERROR 2005 (HY000): Unknown MySQL server host 'tomy-sre-aurora-read.cluster-custom-xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com' (2)
※DBインスタンスの追加/削除よりも多そう。
※3分くらいでStatusは available になるが...しばらくDNS Lookup不安定。
- 15分くらいでDNS Lookupが安定してできるようになった。
4) 「追加設定」にチェックが入った状態で既存インスタンスを追加してみる
-
3)
が終わった状態で以下のようにtomy-sre-aurora2
にチェックをして [Save endpoint] で保存
- CLIで確認すると以下の状態になった。
$ aws rds describe-db-cluster-endpoints | jq .
:
{
:
"Status": "modifying",
"EndpointType": "CUSTOM",
"CustomEndpointType": "ANY",
"StaticMembers": [],
"ExcludedMembers": [
"tomy-sre-aurora1"
],
:
}
※追加設定「今後追加されるインスタンスをこのクラスターにアタッチする」
にチェックが入っている=ExcludedMembers
※今存在するインスタンスかつチェックが入ってなければ今後自動でアタッチされないのでExcludedMembersになっている。
- 1分半くらいでDNS Lookupできなくなり始めてmysqlコマンドで接続先が見つからなくなる
ERROR 2005 (HY000): Unknown MySQL server host 'tomy-sre-aurora-read.cluster-custom-xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com' (2)
- 15分くらいでDNS Lookupが安定してできるようになった。
5) 新規リーダー用インスタンスを追加してみる
-
4)
が終わった状態で同じクラスタ内にリーダーを追加 - 特に接続に問題なくカスタムエンドポイントに追加された
6) リーダー用インスタンスを1つ削除してみる
-
5)
が終わった状態で同じクラスタ内からリーダーを1つ削除 - 特に接続に問題なくカスタムエンドポイントから消えた
7) 新たに別のカスタムエンドポイントを追加で作成してみる
-
6)
が終わった状態で同じクラスタ内に別名の新カスタムエンドポイントを作成
- 特に既存のカスタムエンドポイントへの接続に問題なく新たにカスタムエンドポイントが作られた
8) 旧カスタムエンドポイントを削除してみる
-
7)
が終わった状態で旧カスタムエンドポイントtomy-sre-aurora-read.cluster-custom-xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
を削除 -
特に新カスタムエンドポイントへの接続に問題なく旧カスタムエンドポイントが削除された
まとめ
基本的に既存のカスタムエンドポイントの設定を変えるときにはドキュメントにある通り通信断が発生するので注意。
15分程度で安定する模様。
AWS Consoleからカスタムエンドポイントの設定に何らかの変更を加えたい場合、
新カスタムエンドポイントを別に作成+利用開始、旧カスタムエンドポイントを削除、
が良さそうである。