AWSとかでIPアドレスを変更されるとユーザ・vhostが消える対応
現象
- AWSとかでRabbitMQをインストールしたインスタンスをAMI化、そのAMIを元にインスタンスを作るとあったはずのユーザやvhostが消えている
作成時点はvhost(/production)が存在
$ sudo /usr/sbin/rabbitmqctl list_vhosts
Listing vhosts ...
/
/production
...done.
AMIからインスタンスを作るとvhostが消滅
$ sudo /usr/sbin/rabbitmqctl list_vhosts
Listing vhosts ...
/
...done.
原因
- RabbitMQサーバーのIPアドレスが変わったため
- RabbitMQのユーザやvhostはRabbitMQのNODENAMEに依存している
- デフォルト値のNODENAMEは
rabbit@<hostname>
となる - AWSの場合、ホスト名はIPアドレスから作成される(例:IPアドレス = 10.1.0.20の場合、ホスト名 = ip-10-1-0-20)
- その為、IPアドレス = 10.1.0.20の場合、NODENAMEは
rabbit@ip-10-1-0-20
となる - ホスト名が途中で変わるとホスト名を元にしていたNODENAMEと不整合が発生し、ユーザ・vhostが消失する
対策
- RabbitMQの設定ファイルでNODENAMEをホスト名(=IPアドレス)に依存しない名前に明示的に指定する
/etc/rabbitmq/rabbitmq-env.conf
NODENAME=rabbit@localhost
- 設定したら再起動。このとき、当然ユーザ・vhostは消えるので注意すること。なのでインストール時に設定したほうがよい。