AWS SQSの代替として使える elasticmq の公式dockerイメージでqueueを起動時に作る方法
elasticmqの公式dockerイメージでqueueを起動時に作成する方法を紹介します。 動作は、softwaremill/elasticmq:0.15.7で確認しました。
TL;DR
- 環境変数JAVA_OPTSに "-Dconfig.override_with_env_vars=true" を追加する
- CONFIG_FORCE_queues<your-queue-name>fifoに "false" を設定する
以下はCircleCIの設定例です。
- image: softwaremill/elasticmq:0.15.7 environment: JAVA_OPTS: "-Dconfig.override_with_env_vars=true" CONFIG_FORCE_queues_queue1_fifo: false
なぜこれが動くのか
elasticmqは設定ファイルとして、typesafe configを使っています。 そのため、System propertiesとして、config.override_with_env_vars=trueを渡すと 環境変数で設定を上書き出来るようになります。 また環境変数は以下のルールで変形された後、設定名として使われます。
- CONFIG_FORCE_ を取り除く
- 単一の アンダースコア
_
を ドット.
に置き換える - 2連続の アンダースコア
__
を ダッシュ-
に置き換える - 3連続の アンダースコア
___
を 単一のアンダースコア_
に置き換える
今回は、queues.<queue-name>がobjectである必要があるので
queues.<queue-name>からネストした値である fifo
に値を与えることで
queues.<queue-name> を objectになるように設定します。
そのため、環境変数としては、CONFIG_FORCE_queues<queue-name>fifoにfalse を設定することで 起動時にqueueが作成されることになります。
終わり