ElastiCache for Redisのprimaryノードのメンテナンス対応で経験した問題について書いていきます。
あらすじ
ElastiCache for Redis(クラスタ有効、primary * 1, replica *1)のノードメンテナンス時のお知らせ
↓
primaryが対象だったため手動対応しよう
↓
multi-az無効にする
↓
replicaをprimaryに昇格
↓
元のprimaryと同名のノードを追加...出来ない...
よくあるprimaryノードがメンテナンス対象の場合の対応だと思いますが、ElastiCache for Redisのクラスター名の制限により元のprimaryと同名のノードが追加出来ない事象に遭遇しました。
詳細
そもそもElastiCache for Redisのクラスター名の制限とは?
AWSのドキュメントには以下のように書かれています。
1~20 文字の英数字またはハイフンを使用する必要があります。
先頭は文字にする必要があります。
連続する 2 つのハイフンを含めることはできません。
末尾をハイフンすることはできません。https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/GettingStarted.CreateCluster.html
これはあくまでクラスター名の制限です。
ドキュメントにクラスターの命名上の制約とあります。
つまり、qiita-elasticache-00(20文字)のクラスターの作成は可能です。
そのqiita-elasticache-00のクラスター名でreplica * 1としてクラスターを作成します。
※クラスター有効/無効はどちらでも構いません
すると作成されたprimayとreplicaのノード名は以下のようになります。
・primaryノード:qiita-elasticache-00-001(24文字)
・replicaノード:qiita-elasticache-00-002(24文字)
$ aws elasticache describe-cache-clusters --query 'CacheClusters[].CacheClusterId'
[
"qiita-elasticache-00-001",
"qiita-elasticache-00-002"
]
では、一度multi-azを無効化しreplicaノード(qiita-elasticache-00-002)を消して、再度同名(qiita-elasticache-00-002)のノードを追加出来るかやってみます!
すると以下のようなエラーが発生し、replicaノードを追加することが出来ません。
コンソールからクラスターを作成した場合は20文字より多い文字数のノードが作成出来たにも関わらず
このようなエラーが発生します
これが私がハマった罠でした...
このあとAWSへのサポートへ問い合わせしましたが、残念ながらそういう仕様だそうです
結論
クラスター名は20文字まで可能ですが-00Xがノードに付与されることを考慮して、16文字以下にしましょう