AWS Elastic Beanstalkで環境変数を追加する
Webアプリケーションは他のサービスと連携することが多い。
メーラー、ストレージ、決済等、何らかの他サービスを使うだろう。
他サービスを使うには大抵そのサービスのアカウント情報や接続先情報が必要になるが、それらの情報をソースコードにハードコーディングするのは良くない。
GitHub等にアップロードするとアカウント情報が漏れてしまうし、本番環境とステージング環境で接続先を変更するといったことが難しくなる。
そこでそれらの情報を環境変数にセットしてアプリケーションはその値を使用することにする。
で、AWS Elastic Beanstalkを使用している場合にどうやってインスタンスに環境変数をセットするか、というのが今回のお話。
簡単に言ってしまえば各環境(Environment)ごとの環境変数はManagement Consoleから設定できる。
Beanstalkの各環境の「Edit Configuration」から、「Container」タブを開くと「Environment Properties」というフォームがあるのがそれだ。
しかし、ここでユーザーが自由に使用できるのは「PARAM1」「PARAM2」の2つだけ。
変数名も不適切だし数も足りない。
そこで公式ドキュメントを見てみると次のようなページがあった。
要するにソースコードディレクトリのトップ階層に.ebextensionsディレクトリを作って.config拡張子のファイルを作ればそれが自動的に読み込まれる。
configファイルの内容は次のような感じ。
# .ebextensions/env.config option_settings: - option_name: PARAM_NAME1 value: VALUE1 - option_name: PARAM_NAME2 value: VALUE2
このようにして自由に環境変数を追加定義できる。
最初、勘違いして.elasticbeanstalkディレクトリにconfigファイルを入れていた。注意。
もう1つハマった点として、.ebextensionsディレクトリとconfigファイルはコミットしなければならないということ。
git aws.pushがうまいことしてくれるのかと思ったらそうでは無いらしい。
しかしコミットしてしまっては最初に挙げた問題点が解決できない。
そこで調べてみると次のような投稿が見つかった。
つまりconfigファイルはダミーの値でコミットしておいてgit aws.push後にManagement Consoleから値を変更する。
試してみると確かに「Environment Properties」フォームに項目が増えていて、値を変更するとインスタンスの環境変数にも反映された。
環境ごとに環境変数を変更するニーズはあると思うがちょっと方法がわかりにくいと思う。
改善に期待。