環境の作成
dev-env
は環境名
eb create dev-env
環境変数
設定
eb setenv SECRET_KEY_BASE=****** -e dev-env
確認
eb printenv dev-env Environment Variables: RACK_ENV = production SECRET_KEY_BASE = ****** RAILS_SKIP_MIGRATIONS = false RAILS_SKIP_ASSET_COMPILATION = false BUNDLE_WITHOUT = test:development
アプリで環境変数を使用する
普通に ENV
でアクセスできる
参考
デプロイ
ローカルの最新のcommitがデプロイされる
- master意外のブランチをcheckoutしているならば、それがデプロイされる
eb deploy dev-env
ブラウザで開く
eb open dev-env
環境設定のwebページを開く
eb console dev-env
環境の一覧をチェック
$ eb list dev-env * prod-env
より詳しく
$ eb list -v Region: us-west-2 Application: elastic_beanstalk_demo Environments: 2 dev-env : ['i-96f6da50'] prod-env : ['i-29c9e5ef']
環境をswapする
環境が使用しているURLを交換する
- elasticbeanstalkがデプロイするときにはダウンタイムが発生する
- そのため、別の環境にデプロイして、問題なければ、本番とステージの環境のCNAMEをswapして、ダウンタイムなしに本番環境を最新にする。というのが、elasticbeanstalk Way っぽい
- Blue-Green Deployment と言うらしい
- 環境をまるっと切り替える
- 問題があったら元に戻せば良いだけなので安心
- ダウンタイムが(ほぼ)発生しない
- トランザクションの取り扱いについて考慮する必要がある
$ eb swap prod-env -n dev-env
なんかエラー
$ eb swap prod-env -n dev-env ERROR: InvalidShapeReferenceError :: Invalid model, missing shape reference: OrderedDict([(u'type', u'structure'), (u'members', OrderedDict([(u'User', OrderedDict([(u'shape', u'Double')])), (u'Nice', OrderedDict([(u'shape', u'Double')])), (u'System', OrderedDict([(u'shape', u'Double')])), (u'Idle', OrderedDict([(u'shape', u'Double')])), (u'IOWait', OrderedDict([(u'shape', u'Double')])), (u'IRQ', OrderedDict([(u'shape', u'Double')])), (u'SoftIRQ', OrderedDict([(u'shape', u'Double')]))]))])
色んな所でコマンドラインがうまく動かないという報告が上がってるので、ブラウザでやることにする
- 「URLのスワップ」から実行する
参考
- ダウンタイムなしで新しいアプリケーションバージョンをデプロイする(CNAME スワップ) - Elastic Beanstalk
- AWS - ElasticBeanstalkのCNAME Swapを使ってBlueGreenDeploymentをしてみる - Qiita
その他コマンドメモ
デフォルトの環境を設定
eb use ${環境名}
- 各コマンドで環境を指定しない場合、デフォルトの環境が指定される
- デプロイコマンドを実行すると、内部でこれが設定される
環境の停止
お金が勿体無いのでさっさと停止
eb terminate dev-env