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" を設定する
    • fifoじゃなくても良いけど、振る舞いに影響を与えないような設定として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が作成されることになります。

終わり