読者です 読者をやめる 読者になる 読者になる

AWS Elastic Beanstalkの環境のSWAPをやってみる

AWS Rails

環境の作成

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')]))]))])

色んな所でコマンドラインがうまく動かないという報告が上がってるので、ブラウザでやることにする

参考

その他コマンドメモ

デフォルトの環境を設定

eb use ${環境名}
  • 各コマンドで環境を指定しない場合、デフォルトの環境が指定される
  • デプロイコマンドを実行すると、内部でこれが設定される

環境の停止

お金が勿体無いのでさっさと停止

eb terminate dev-env

TODO