あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

Amazon Elastic BeanstalkでPHPアプリケーションをデプロイをしてみた

やっぱり何事もやらないと覚えないので(頭が悪いので。。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が表示されなかったので今回実施しなかったが、なぜなかったのだろう。。。