やっぱり何事もやらないと覚えないので(頭が悪いので。。Elastic Beanstalkの挙動を実際確認して記憶に入れていきたいと思います。(;・∀・)
単一インスタンス環境でできるデプロイ方法
今回は単一インスタンスなので下記のデプロイ方法が利用可能
・All at Once
・Rolling with additional batch
・Immutable
やること
Elastic BeanstalkでPHPアプリケーションの更新を[All at Once]と[Immutable]で実施し挙動を確認する
環境
下記で作成した環境を利用
amegaeru.hatenablog.jp
下準備
1.アプリケーションバージョンアップ
1-1.php.zipを解凍
1-2.phpフォルダの名前を[php_ver2.0]に変更
1-3.index.phpをメモ帳などで開き、26行目を下記の通り修正
修正前:<h1>Congratulations!</h1> 修正後:<h1>Congratulations!_ver2.0</h1> ※表示を少し変えるだけです。
1-4.php_ver2.0フォルダ内のファイルをすべて選択し、右クリック-[Zipファイルに圧縮]
※php_ver2.0フォルダを圧縮すると階層が変わり、デプロイでエラーになるので注意!
└ php_ver2.0 ※これを右クリックじゃないです。 ├ index.php ※こちら以下をすべて選択して右クリックです。 └ 他いろいろ
1-5.php_ver2.0.zipが作成されたことを確認
2.アプリケーションアップロード
2-1.[環境]-[sample-env]-ナビゲーションペインから[アプリケーションバージョン]
2-2.[アップロード]
2-3.アプリケーションバージョンをアップロードが表示されたら下記を入力
・バージョンラベル:2.0
・説明:空白
・アプリケーションをアップロード
2-4.[アップロード]をクリック
実践!
1.All at Onceでデプロイ
1-1.Elastic Beanstalk-[環境]-[sample-env]-ナビゲーションペインから[設定]
1-2.[更新、モニタリング、ログ記録]内の[編集]をクリック
1-3.[ローリング更新とデプロイ]内のデプロイポリシーを確認
※デフォルトは[1回にすべて][All at Once]のため変更はしない
1-4.[環境]-[sample-env]-ナビゲーションペインから[アプリケーションバージョン]
1-5.バージョンラベルが[2.0]のアプリケーションにチェックを入れる
1-6.[アクション]-[デプロイ]
1-7.アプリケーションバージョンをデプロイが表示されたら下記を入力
・環境:sample-env
1-8.[Deploy]
1-9.[環境]-[sample-env]
1-10.[ドメイン]のURLをクリックし、更新されたアプリケーションが表示されることを確認
※1-8~10を素早く行い、Deploy直後だとアプリケーションが表示されないことも確認する
2.Immutableでデプロイ
2-1.Elastic Beanstalk-[環境]-[sample-env]-ナビゲーションペインから[設定]
2-2.[更新、モニタリング、ログ記録]内の[編集]をクリック
2-3.[ローリング更新とデプロイ]内のデプロイポリシーを変更し、[適用]
・デプロイポリシー:イミュータブル[Immutable]
※更新に1~2分程度かかる
2-4.[環境]-[sample-env]-ナビゲーションペインから[アプリケーションバージョン]
2-5.バージョンラベルが[1.0]のアプリケーションにチェックを入れる
2-6.[アクション]-[デプロイ]
2-7.アプリケーションバージョンをデプロイが表示されたら下記を入力
・環境:sample-env
2-8.[Deploy]
・開始直後EC2インスタンスや、Auto Scaling グループが追加された
・2,3分後にアプリケーションの更新が完了し、変更後のアプリケーションが表示されるようになった
・後処理か不明だがしばらく環境の更新中の状態となった
・7分後に旧Auto Scalingグループ、EC2インスタンスが削除された
2-9.[環境]-[sample-env]
2-10.[ドメイン]のURLをクリックし、1.0のアプリケーションが表示されることを確認
※2-8~10を素早く行い、Deploy直後でも2.0のアプリケーションが表示されることを確認する
設定の更新
デプロイに対する設定は下記のようなものが追加で可能
◆デプロイの設定
・ヘルスチェックを無視:コマンドタイムアウト時間内に正常ステータスにならなかった場合、ロールアウトすることを防ぐ
・正常性のしきい値:インスタンスが正常と判断されるステータスを設定する
・コマンドタイムアウト:デプロイがキャンセルされる、もしくはヘルスチェックを無視が設定されている場合、次の処理に移るまでの時間を設定する
感想
All at Onceだとサービス断が発生し、Immutableだと発生しないというのが見えた。
ただしアプリケーションの設定不備でもインスタンスとしては正常になるのでCode Deployなどを使わないといけないかも。
デプロイポリシーにRolling with additional batchが表示されなかったので今回実施しなかったが、なぜなかったのだろう。。。