LoginSignup
33
24

More than 5 years have passed since last update.

環境ごとに.ebextensionsファイルを切り替えたかった

Last updated at Posted at 2016-04-26

.ebextensionsに欠けているもの

elastic beanstalk環境を構築する上で便利な機能である.ebextensionsですが、環境ごとの設定ができないという欠点があります。

このへんでも議論されてます。

上記ポスト内でamazonの中の人は、環境ごとに別のコードベースを使えばいいんじゃないかといっています。

vcsでリリースブランチを環境ごとに分けろといった提案なのだと思うのですが、正直管理が煩雑になるし、たとえばstagingと本番に別のコードがデプロイされ得るというのでは検証環境の意味がなくなってしまいます。

具体的事案

td-agentの設定ファイルを環境ごとに切り替えたかったのですが、.ebextensionsのfilesディレクティブだけでは不可能でした。

以前とっていた方法

.ebextensionsディレクトリを空にしておき、デプロイ用に手製のスクリプトで必要な.ebextensions設定ファイルをコピーしてくるという方法をとっていました。

やりたかったことは実現できていたのですが、そのスクリプト経由でしかデプロイできなくなるという欠点がありました。

また、vcsのコードがそのままデプロイされないという点で一抹の不安も残ります。

そこで

01-td-agent-dev.config
files:
  "/path/to/workspace/development.conf":
    owner: root
    group: root
    content: |
      略
02-td-agent-prod.config
files:
  "/path/to/workspace/production.conf":
    owner: root
    group: root
    content: |
      略

というふうに複数の設定ファイルをどこか適当な場所に作る.ebextensions設定を追加し、

03-run-td-agent.config
files:
  "/etc/td-agent/apply_td_config.sh" :
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/sh
      if [ 'production' == "$RAILS_ENV" ]; then
        cp /path/to/workspace/production.conf /etc/td-agent/td-agent.conf
      else
        cp /path/to/workspace/development.conf /etc/td-agent/td-agent.conf
      fi
      touch /etc/td-agent/using-$RAILS_ENV-conf

container_commands:
    # commands実行時点だと環境変数が見れなかった
    01-command:
        command: sh /etc/td-agent/apply_td_config.sh

    02-command:
        command: /etc/init.d/td-agent restart

というふうに、環境変数を見て設定ファイルをコピーしてくる.ebextensions設定を追加することで実現しました。

あとで環境を確認したときにどちらの設定ファイルを使っているかを確認しやすくするようにtouchしていますが必要はないです。

注意点としては、上記ファイルのコメントにも書いていますが、commandsディレクティブ実行時点では環境変数が設定されていなかったので、container_commandsで実行する必要がありました。

追記

2016/09/01にaws側で変更があったようで、.ebextensions以下のファイルにマルチバイト文字列が含まれているとデプロイに失敗するようになりました。

上記の例には日本語コメントが入っているので、ご注意ください。

33
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
24