Amazon Web Services ブログ

AWS Systems Manager Automation と CloudWatch アラームで、ディスク容量不足によるパッチ適用の失敗を回避する

全ての組織はパッチを適用してシステム群を最新の状態に保つ必要がある一方、パッチ適用がビジネスやワークロードに影響を与えてはなりません。運用チームにとってのチャレンジの 1 つは、本番環境のソフトウェアに影響を与えずにパッチを適用する事です。パッチ適用が失敗する最も一般的な理由は、ディスク容量の不足、CPU 使用率の急上昇、メモリ使用率の高騰です。失敗を避けるためには、パッチ適用中のワークロードを監視する必要があります。AWS Systems Manager Automation と Amazon CloudWatch アラームを組み合わせる事で、これを実現できます。AWS Systems Manager に、タスク制御の為の CloudWatch アラーム設定を追加すると、CloudWatch アラームがアラーム状態の時にパッチの自動適用を停止させる事が出来る様になります。マルチリージョン・マルチアカウント構成でも、この機能を利用する事が出来ます。

このブログでは、AWS アカウント内のマネージドインスタンスに対して AWS Systems Manager Automation を実行する前に、利用可能なディスク容量を CloudWatch アラームでチェックする方法について学びます。CloudWatch アラームがアラーム状態であればパッチの自動適用は実行されず、ディスク容量不足のエラーを回避できます。ルートボリュームで利用可能なディスク容量を監視する為に、CloudWatch アラームを設定する方法を説明します。その後、CloudWatch アラームがアラーム状態の時に自動実行を防ぐ安全対策として、AWS System Manager Automation でアラームを参照します。
AWS Systems Manager Automation は、AWS のリソースをデプロイ、設定、管理する自動化ソリューションの構築を手助けしてくれるサービスです。300 以上の定義済み AWS automation runbook (旧オートメーションドキュメント) があり、Custom Automation runbook を作成する事もできます。これらのドキュメントは、Systems Manager の Automation コンソールから確認できます。 Systems Manager オートメーションランブックリファレンスは、定義済み runbook のリストです。
Amazon CloudWatch は AWS 上のアプリケーションやクラウドリソースの監視を可能にする、モニタリング/オブザーバビリティサービスです。CloudWatch アラームは指定した期間にわたってメトリクスを監視し、メトリクスに設定した閾値に基づいて、1 つまたは複数のアクションを実行します。

ソリューションの概要

このソリューションのステップは以下の通りです。

  1. Step 1: Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動し、Amazon CloudWatch Agent をインストールします。
  2. Step 2: ディスクの空き容量を監視する、CloudWatch アラームを設定します。
  3. Step 3: 安全制御の為に CloudWatch アラームを参照先として追加し、Automation コンソールからパッチを適用します。
  4. Step 4: テストと検証を行います。

Step 1: EC2 インスタンスの起動

EC2 インスタンスを起動します。このブログでは、スモールインスタンス(t3.small)の Amazon Linux 2 を利用しています。インスタンス起動中はコストが発生しますので、ご注意ください。https://aws.amazon.com/premiumsupport/knowledge-center/delete-terminate-ec2/

Step 2: CloudWatch アラームを設定し、ディスクの使用量を監視

まず、ディスク容量を監視する為に、CloudWatch アラームの設定を行います。

  1. EC2 インスタンスに CloudWatch エージェントをインストールします。CloudWatch エージェントは、Amazon Linux 2 のパッケージとして提供されています。以下のコマンドを実行すると、パッケージをインストールする事が出来ます。
sudo yum install amazon-cloudwatch-agent

Windows の場合

Invoke-WebRequest -Uri https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi -OutFile amazon-cloudwatch-agent.msi
msiexec /i amazon-cloudwatch-agent.msi
msiexec /i amazon-cloudwatch-agent.msi

AWS Systems Manager を使用して、CloudWatch エージェントをインストールする事も出来ます。

  1. マネージドポリシーである CloudWatchAgentServerPolicy を持った IAM ロールをインスタンスにアタッチしておく必要があります (訳者注 : AmazonSSMManagedInstanceCore がアタッチされていなければ、合わせてアタッチしてください)。詳細は Amazon EC2 インスタンスの CloudWatch エージェントで使用する IAM ロールを作成するSystems Manager の IAM インスタンスプロファイルを作成する を参照して下さい。
  2. インストール後、手動またはウィザードを利用して設定ファイルを作成します。
  3. コマンドラインを使用して、CloudWatch エージェントを起動します。
    ※ configuration-file-path は、ウィザード内の出力で確認する事ができます
    (例) The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.

Linux の場合

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-
agent-ctl -a fetch-config -m ec2 -s -c file:configuration-file-
path

Windows の場合

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-
cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c 
file:configuration-file-path
  1. ディスクの空き容量が 10% 以下 (またはユースケースに応じた閾値) まで低下したらアラーム状態となる CloudWatch アラームを、アラーム名「LowDiskSpace」として作成します。

Step 3: Automation の安全制御の為に CloudWatch アラームを追加

  1. AWS Systems Manager のコンソールで、「変更管理」配下に表示されている「オートメーション」を選択します。
  2. オートメーションの実行」をクリックし、左側のナビゲーションに表示されている「Patching」を選択します。
  3. AWS-PatchInstanceWithRollback」を選択し、「次へ」をクリックします。
  4. シンプルな実行」を選択します。他の実行タイプでも、CloudWatch アラームでの安全制御を使用する事が出来ます。

Figure 1: Select Simple Execution on Execute automation runbook

図 1. 「オートメーションドキュメントの実行」で「シンプルな実行」を選択

  1. 「入力パラメータ」で、対象のインスタンスを選択します。
  2. 「CloudWatch alarm – オプション」で、Step 2 の 5 で作成した「LowDiskSpace」アラームを選択します。
    ※ CloudWatch アラームがアラーム状態の場合、選択ができません

Figure 2: Select LowDiskSpace alarm from the Alarm name dropdown list

図 2. 「Alarm name」のドロップダウンリストで、「LowDiskSpace」アラームを選択

  1. 実行」をクリックして、パッチ適用が成功する事を確認します。
    ※ アラームを選択した後から「実行」をクリックするまでの間に、対象のアラームがアラーム状態に遷移した場合は実行する事ができません

Step 4 テストと検証

AWS Systems Manager State Manager を使用して、CloudWatch アラームによる安全制御をシミュレートします。

  1. AWS Systems Manager コンソールの「ノード管理」配下に表示されている「ステートマネージャー」を選択します。
  2. 関連付けの作成」をクリックし、「TestCloudWatchAlarm」と名前を付け、「AWS-PatchInstanceWithRollback」runbook を選択します。
  3. 入力パラメーター」の「InstanceId」で対象のインスタンスを指定し、「AutomationAssumeRole」でオートメーション(自動化)がユーザーに変わって処理を実行できる権限(ロール)を選択します。
  4. スケジュールを指定」で「Rate スケジュールビルダー」を選択し、「毎 30 分」と設定します。
  5. 「CloudWatch alarm – オプション」で、Step 2 の 5 で作成した「LowDiskSpace」アラームを選択し、「関連付けの作成」をクリックします。
  6. 関連付けは即座に実行されるので、「ステータス」が「成功」に遷移するまで待ちます。
  7. CloudWatch アラームの設定に移動し、閾値を調整して強制的にアラーム状態にします。アラーム状態の間は関連付けが実行されないことを確認してください。

Figure 3. Automation skips execution due to an active alarm, as illustrated in Execution history.

図 3. 実行履歴に示されるように、アラームの状態によって実行がスキップされている

Cleanup

不要なコストを防ぐ為に、EC2 インスタンス、CloudWatch アラーム、ステートマネージャーの関連付けを削除します。EC2 インスタンスの削除は「Amazon EC2 リソースを削除または終了する方法を教えてください。」、CloudWatch アラームの削除は「CloudWatch アラームの編集または削除」、ステートマネージャーの関連付けの削除は「関連付けを削除する」を参照して下さい。

まとめ

EC2 インスタンスのディスク容量を監視する CloudWatch アラームを作成して、AWS Systems Manager オートメーションによるパッチ適用を安全制御する方法について学びました。この機能は、CloudWatch アラームがアラーム状態では無い場合のみ、オートメーションが実行できる安全制御を提供します。マルチリージョンやマルチアカウントでも、この機能を利用する事が出来ます。この機能を利用して、ビジネス上の課題を解決される事を期待しています。AWS Systems Manager Automation の詳細につきましては「AWS Systems Manager Automation」を参照して下さい。Automation runbook の書き方につきましては「Writing your own AWS Systems Manager documents」を参照して下さい。

著者について:

Eric Logeson

Eric Logeson は、World-Wide Public Sector Federal Civilian Team のシニアソリューションアーキテクトです。専門は、企業管理、クラウド運用、ガバナンスです。

Yagya Vir Singh

Yagya Vir Singh は、テネシー州ナッシュヴィルに拠点を置くシニアテクニカルアカウントマネージャです。AWSの技術に情熱を持ち、お客様の目標達成を支援することが大好きです。オフィス以外では、友人や家族と一緒にいること、そしてアウトドアで過ごすことが大好きです。

翻訳はソリューションアーキテクトの渡邊が担当しました。原文はこちら