Amazon Elastic Beanstalk でデプロイ時に database.yml に database.example.yml をsymlinkする方法

database.yml をgitにcommitしたくないよね... そんな時に

先に方法

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_symlink_database_yml.sh":
    mode: "000777"
    content: |
      #!/bin/bash
      cd /var/app/ondeck/config
      ln -sf database.example.yml database.yml
  • ~/.ebextensions/20_symlink_database_yml.config

概要

デプロイ処理の途中で、database.ymldatabase.example.yml をsymlinkしている

どうやっているの?

~/.ebextensions について

  • Elastic Beanstalkでは、コードの ~/.ebextensions/ に、のデプロイ前後に実行するコマンドや、ファイルを追加するための設定を格納できる
    • ただし、デプロイの途中に何かを挟むことはできない
  • files: は、コードが展開される前に、指定したpathに、content の内容のファイルを設置する

/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_symlink_database_yml.sh について

  • /opt/elasticbeanstalk/hooks/appdeploy/ は、デプロイ時に実行されるシェルが格納されているディレクト
  • 辞書順にシェルが実行されるので、適切な名前のシェルを追加することで、任意の処理をデプロイ処理の途中に紛れ込ませることができる
  • pre/01a_symlink_database_yml.sh の場合、コードを展開した後に実行される
  • /var/app/ondeck は、コードが最初に展開されるディレクト
    • デプロイ処理に成功すると、 /var/app/current に mv される
  • 上記方法は、オフィシャルなドキュメントに明示されている方法ではないので、今後の更新で使えなくなるかも

雑記

  • Elastic Beanstalk的には、 database.yml をcommitして欲しい様子
  • heroku だと、heroku環境用の database.yml を生成してくれる

参考