AWS Elastic Beanstalkで起動しているEC2インスタンスにパッチを適用したい
こんにちは!AWS事業本部のおつまみです。
皆さん、AWS Elastic Beanstalkで起動しているEC2インスタンスにパッチを適用したいなぁと思ったことはありますか?私はあります。
ただEC2インスタンスに手動でパッチを適用するのは、面倒ですよね。。。
そんな時に便利なマネージドプラットフォーム更新について、今回ご紹介します!
ただし設定前に自分の環境に適しているか注意事項も確認しましょう!
プラットフォームとは
マネージドプラットフォーム更新の説明前にプラットフォームについて簡単に説明します。(知っているわ!という方は読み飛ばしてください!)
Elastic Beanstalkでは、OS、ランタイム、アプリケーションサーバーと、Docker コンテナなどの複数のコンポーネントが組み合わさってアプリケーションの実行環境が用意されています。 この組み合わせったコンポーネントのことをプラットフォームと呼びます。
マネジメントコンソール上では、このようにプラットフォーム・プラットフォームのブランチ・プラットフォームのバージョンを指定できます。 (※バージョンは最新のものしか選択できません。)
採番はこのようになっています。
各々の更新内容は下記の通りです。
- メジャーバージョンの更新:既存のプラットフォームバージョンと互換性がない変更を含む更新。必ず更新前にアプリケーションが正しく実行するかテストしてから環境を更新する必要がある。
- マイナーバージョンの更新:既存のプラットフォームバージョンと下位互換性がある機能を追加する更新。更新前にアプリケーションが正しく実行するかテストする必要はない。
- パッチバージョン: 既存のプラットフォームのバージョンとの下位互換性がある、メンテナンスリリース (バグ修正、セキュリティの更新、パフォーマンスの改善) で構成される更新。マイナーバージョンと同様に更新前にアプリケーションが正しく実行するかテストする必要はない。
そして今回ご紹介するマネージドプラットフォーム更新は2番目と3番目のマイナー及びパッチの更新を自動的に適用してくれるサービスです!
マネージドプラットフォーム更新とは
AWS Elastic Beanstalk は定期的にプラットフォームの更新をリリースし、修正やソフトウェア更新、新機能を提供しています。マネージドプラットフォーム更新機能により、予定済みのメンテナンス期間中に、環境を自動的に最新バージョンのプラットフォームに更新できます。更新プロセス中も、アプリケーションは能力を低減させることなく稼動状態に保たれます。マネージド更新は、単一インスタンス環境とロードバランシング環境の両方で利用できます。
つまり、設定したメンテナンス期間中にアプリケーションを起動したまま自動で更新をおこなってくれる機能です。更新することでこれらをサポートします。
- 最新のAMIに置き換え
- バグの修正(パッチ適用)
- OS ,Web,App Serverのマイナーアップグレード
「なんで更新中にアプリケーションを起動したままにできるんだろう?」 私はこう思いました。
調べてみると、マネージドプラットフォーム更新はデプロイ方式に変更不可能な環境の更新(Immutable)を採用しているためでした。 このデプロイ方式は既存のインスタンスは変更せずに新しいインスタンスを起動し、ELBのヘルスチェックに合格した場合に切り替えるデプロイをするポリシーです。
絵で動きを見たほうが分かりやすいため以下の記事が参考になります。
設定してみた
マネジメントコンソール画面での設定方法です。
ElasticBeanstalkの環境作成画面から[より多くのオプションの設定]を選択します。
[管理された更新]フィールドで管理されています。なんと既に設定されていました。。
コンソールを使用して 2019 年 11 月 25 日以降に作成された環境では、デフォルトで有効になっているようです。設定内容を確認したいので、[編集]を選択します。
マネージドプラットフォーム更新の設定画面です。
[管理された更新]の有効にチェックが入っているため、既に有効になっていることがわかります。
変更レベルはマイナーおよびパッチかパッチのみの2種類が選択できました。
実際にマネージドプラットフォーム更新が行われたどうかは、ナビゲーションペインの[マネージドアップデート]から確認ができます。
こちらの[管理された更新の概要]から確認ができます。作成されたばかりのため、履歴はありませんでした。
変更後に確認できる情報としては、開始時刻・所要時間・情報の更新・結果のようです。
注意事項
大変便利そうに思えるマネージドプラットフォーム更新にもいくつかの注意点があるなので、ご紹介します。設定前に自分の環境に適しているか確認するようにしましょう。
メンテナンス時間ちょうどに実行されるとは限らない。
公式ドキュメントにこのように記載があるため、設定した時刻ちょうどには行われないようです。
AWS が環境のプラットフォームの新しいバージョンをリリースすると、Elastic Beanstalk は次回の毎週のメンテナンス期間中におけるマネージドプラットフォームの更新をスケジュール設定します。メンテナンス期間は 2 時間です。Elastic Beanstalk は、スケジュールされた更新をメンテナンス期間中に開始します。更新はこの期間が終了するまで完了しない場合があります。
いつ実行されるかはAWS側で決定されます。
更新期間をピンポイントで決めたい場合には、マネージドプラットフォーム更新は設定せず、手動でのアップデートをお勧めします。方法は下記の AWS公式ドキュメント「方法 1 – 環境のプラットフォームバージョンを更新する」をご参照ください。
EC2でアプリケーションのセッションを保持している場合には、ダウンタイムが発生する可能性がある。
マネージドプラットフォーム更新は変更不可能な環境の更新(Immutable)を採用しています。
この方式は更新の間に新旧のインスタンスが混在するため、EC2内でセッションを保持しているような場合はダウンタイムが発生する場合があります。
解決策としては、マネージドプラットフォーム更新は設定せず、既存環境とは別に新しく環境を作成するBlue/Green デプロイでの実行を行いましょう。設定方法はこちらの記事が参考になります。
カスタムAMIを使用している場合は使用できない。
Elastic BeanstalkにはAutoScaling機能が実装されているため、設定でこのようにAMI IDが指定されています。
ちなみにEC2インスタンスでAMIの選択する画面で、AMI IDで検索をかけるとこのようにElastic Beanstalkで管理しているAMIだということがわかります。
そのためAMIをカスタムAMIにしていた場合、マネージドプラットフォーム更新でAMIが置き換わってしまいます。
カスタムAMIでパッチ適用を行いたい場合は、このような方法が取れます。
ただし、ElasticBeanstalkはマネージドサービスのため、あまり推奨される方法ではありません。。
- マネージドプラットフォームを無効にする
- 手動でパッチ適用後のEC2インスタンスからカスタムAMIを作成する
- カスタムAMIをAutoScalingのAMIとして設定する
- ElasticBeanstalk環境の設定更新を行う。
最後に
AWS Elastic Beanstalkのマネージドプラットフォーム更新についてご紹介しました。
注意事項もありますが、アプリケーションを起動したまま自動でパッチ適用を行ってくれる、なんて魅力的なサービスだろうとより好きになりました。(照)
最後までお読みいただきありがとうございました! この記事が誰かのお役に立てば幸いです。
以上、おつまみ(@AWS11077)でした!
参考文献
Elastic Beanstalk 環境のプラットフォームバージョンの更新 - AWS Elastic Beanstalk
マネージドプラットフォーム更新 - AWS Elastic Beanstalk