やろうとしたこと
EC2上で動作しているWebアプリケーションで、セッションの保存先をElastiCache(memcached)にしようとした。
また、可用性・負荷分散のため、クラスタ化しようとした。
その際、ElastiCache(memcached)の設定エンドポイントが長く、短いFQDNでアクセスしたかったので 1
Route53で以下のようにCNAMEを作った。
$ dig cname +short session.example.home
session.xxxxxx.cfg.apne1.cache.amazonaws.com.
※ example.home
は Private type の ドメイン
ハマったこと
セッションデータはElastiCache(memcached)に保存されるが
サイトを操作していると、時々セッションが切れたような動作になった。
(セッションデータが取れていない)
memcachedの各クラスタに入って調べてみると、
同一セッションなのにアクセスのたびに異なるクラスタに割り振られていた。
解決した方法
CNAME にあてたドメインを「.cfg」を含むものに変更した。
session.example.home
↓
session.cfg.example.home
詳細
ちゃんと公式ドキュメントに書いてあった。
クラスターの設定エンドポイントを指定する際は必ず、ここに示す設定エンドポイントのアドレスに「.cfg」が含まれていることを確認してください。「.cfg」のない CNAME またはエンドポイントは使用しないでください。
公式ドキュメントはちゃんと読みましょう。
(でも、この記述ちょっとわかりにくいと思う…)
-
もう1つの理由として、本番/ステージ/テスト環境でAWSアカウントを分けていて、全環境に
example.home
という同じ名前でPrivate ドメインを作って、全環境同じドメイン名でアクセスできるような作りにしていた。 ↩