
【第13回】AWS Systems Manager攻略マニュアル「Maintenance Windows基本編 基本知識、導入方法」
Ops Todayでは「面倒なAWSシステム運用を効率化しよう!」をテーマに、AWSリソースを含むシステムの運用をする際に便利なサービス「AWS Systems Manager」に関する記事を複数回にわたってご紹介しています。(記事一覧はこちら)
今回は、オペレーティングシステムのパッチ適用、ドライバーの更新、ソフトウェアやパッチのインストールなど、ノードに対して破壊的になり得るアクションを実行するスケジュールを定義できるAWS Systems Manager「Maintenance Windows」の概要と導入方法をご紹介します。
Maintenance Windowsとは
Maintenance Windowsは、メンテナンスタスクの実行をスケジューリングできる機能で、Systems Managerの「変更管理ツール」に分類されます。

メンテナンスタスクの必要性
システムの継続的な運用において、メンテナンスタスクの実施は重要な作業です。
メンテナンスタスクは、一般的に次のような目的で実施します。
- システムのパフォーマンスを維持する
- 将来的な問題を未然に防ぐ
具体的なタスクの内容として、下記に思いつく例を挙げてみます。
- パッチの適用やソフトウェアのバージョンアップ
- 不要なファイルの削除や移動
- ファイルやデータベース等のバックアップ
- データベースの整合性チェックやチューニング
- サーバの再起動
- ウィルス対策スキャン
- 性能情報等の収集
これらのメンテナンスタスクを日々実施することで、システムのパフォーマンス低下やハードウェアの故障に繋がるような予兆に気付く可能性があり、システムの信頼性を高めることに繋がります。
メンテナンスタスクの実施における課題
メンテナンスタスクは、その内容によってはシステムの稼働に影響を及ぼすことがあります。
例えば、サーバの再起動をする場合、再起動処理中はシステムがサービスを提供できない状態になります。バックアップや性能情報を収集する場合も、それらの処理を行うのにハードウェアやネットワーク等かなりのリソースを消費することになるので、システム全体のパフォーマンスを占有してしまうなどの影響が考えられます。
したがって、これらメンテナンスタスクの実施に対しては、次のような要望が考えられます。
システムの稼働率が低い、あるいはシステムの停止可能な時間に実施したい
夜間やアクセスが集中しない時間帯などにメンテナンスタスクを実施することで、システムやユーザーに及ぼす影響を最小限にします。
夜間に行うとなると、スケジュールによる自動実行によって、システム保守担当者の負担や人件費も削減したいところです。
決められた時間の中でタスクを完了させたい
業務が開始してシステムへのアクセスが始まる頃には、メンテナンスタスクを完了させたいです。
予定通りタスクが終わらない場合は、業務への影響を考慮して、実行を予定していたタスクを取りやめることも考えます。
実行するタスクを一元的に管理したい
システムの規模が大きくなると、メンテナンスタスクの管理が煩雑になります。
システムのどこにどのようなメンテナンスタスクが存在するのか、実行予定日時や実行結果を一元的に管理できると担当者の負担は減るでしょう。
Maintenance Windowsの特徴
ここまで説明してきたメンテナンスタスクに対する様々な要望について、AWSクラウド環境で実現する場合、 MaintenanceWindows はベストな選択肢になり得ます。
Maintenance Windowsは、メンテナンスタスクの実行をスケジューリングできる機能です。”メンテナンスウィンドウ”という言葉は “メンテナンスが可能な領域” を意味し、開始時刻と終了時刻によって特定されるメンテナンス可能な時間枠を意味します。
Maintenance Windowsには、次の特徴があります。
- 開始時刻と終了時刻により、タスクを実行するのに最適な時間帯を選択できる
- 複数のメンテナンスタスクを実行できる
- 無料で利用できる
- AWS Step Functions やSystems Manager Automationと連携でき、複雑なタスクも実行可能である
StateManagerとの違い
Maintenance Windowsと似た機能として、Systems Manager StateManagerがあります。
StateManagerでも、Maintenance Windowsと同様の目的を実現することができますが、AWSでは次のような使い分けをするように案内されています。
Maintenance Windows | ・時間的制約のあるタスクを複数実行したい ・ノードの停止を伴うタスクを実行したい ・LambdaやStepFunctionsと連携したい |
StateManager | ・リソースを定義された状態に維持したい ・コンプライアンスマネージャと連携したい ・マネージドノードのブートストラップが可能 |
Maintenance Windowsの概要
下に示す図は、Maintenance Windowsの動作イメージです。

図の左上にあるメンテナンスウィンドウ(Maintenance Windows)では、主にタスク(Task)の実行タイミングを定義します。タスクは、メンテナンスウィンドウ内で実行するアクションです。
一方、図の右下にあるターゲット(Targets)は、タスクの実行対象となるリソースのグループです。
設定の流れとしては、まずメンテナンスウィンドウを設定し、メンテナンスウィンドウにターゲットを登録後、タスクを作成する過程でターゲットを指定します。
- メンテナンスウィンドウの作成
- ターゲットの登録
- タスクの作成およびターゲットの指定
※以降、英語表記の “Maintenance Windows”はサービス名、カタカナ表記の “メンテナンスウィンドウ” はMaintenance Windows のコンポーネント名であるメンテナンスウィンドウとして使い分けます。
Maintenance Windowsの導入方法
ここからは、Maintenance Windowsを使い始める導入編です。
実際にメンテナンスウィンドウを作成するところから始めてみます。
メンテナンスウィンドウの作成
マネージドコンソールにて、Systems Managerのナビゲーションメニューより「変更管理ツール」の「メンテナンスウィンドウ」をクリックすることでアクセスできます。
初めてMaintenance Windowsにアクセスすると、次の画面が表示されます。

画面右上にある「Create Maintenance Window」をクリックします。

「メンテナンスウィンドウの作成」画面が表示されます。

メンテナンスウィンドウの設定項目について、一通り見ていきましょう。
メンテナンスウィンドウの詳細の入力

新規作成するメンテナンスウィンドウの「名前」、「説明」、未登録ターゲットの許可について設定する項目です。
「未登録ターゲットを許可する」にチェックを入れた場合、ターゲットに登録していないマネージドノードもタスクのターゲットとして指定することができます。タスク作成において、ターゲットに登録していないマネージドノードを対象にしない場合は、チェックを外します。
スケジュール

ここでは、スケジュールビルダーやメンテナンスウィンドウの期間、タスクの開始を停止する時間やオフセットに関する設定が可能です。
スケジュールビルダーは、CronかRate、もしくはCRON/Rate式の3種類から選択できます。

「Cron スケジュールビルダー」を選択した場合、「デフォルト」、「時間単位」、「日単位」の3つの選択肢から指定します。
「デフォルト」を選択した場合は、作成するメンテナンスウィンドウが30分ごとに開始されます。
「時間単位」を選択すると、以下赤枠で囲った箇所のように、何時間ごとに開始するか指定するプルダウンボックスが表示されるようになります。

プルダウンボックスの選択肢は、次の通りです。
- 1時間ごと
- 2時間ごと
- 4時間ごと
- 8時間ごと
- 12時間ごと
「日単位」を選択すると、以下赤枠で囲った箇所のように、実行する日間隔を指定するプルダウンボックスと、実行時刻(hh:mm)を指定するテキストボックスが表示されるようになります。

プルダウンボックスの選択肢は、次の通りです。
- 日ごと
- 日曜日ごと
- 月曜日ごと
- 火曜日ごと
- 水曜日ごと
- 木曜日ごと
- 金曜日ごと
- 土曜日ごと
「Rate スケジュールビルダー」を選択した場合、「分」単位、「時間」単位、「日」単位のいずれかでメンテナンスウィンドウの開始間隔を指定できます(既定値は”30分ごと” です)。

テキストボックスには、正の数(0より大きい実数)しか指定できません。
また、プルダウンボックスの選択肢は、次の通りです。
- 分
- 時間
- 日
「CRON/Rate 式」を選択した場合、CRON式かRate式のいずれかでウィンドウの開始間隔を指定できます。

メンテナンスウィンドウのCRON式については前回記事で解説しているので、そちらを参考にしてください。
Rate式は、先述の Rate スケジュールビルダーの内容を式で指定するということです。
したがって、「分」単位、「時間」単位、「日」単位のいずれかでしか指定できない点に注意してください。
例えば、12時間ごとにメンテナンスウィンドウを開始したいとします。
その場合、Rate式は以下のようになります。
rate(12 hours)
ポイントは、rate()のカッコ内でスケジュールを指定することです。
Rate式は「Value」と「Unit」の2つのフィールドがあります。
Unit | Value |
---|---|
minute | 1 |
minutes | 正の数(0より大きい実数) |
hour | 1 |
hours | 正の数(0より大きい実数) |
day | 1 |
days | 正の数(0より大きい実数) |
注意点は、Valueが 1 の場合、Unitは単数形(minute、hour、day)になることです。
詳しくは、AWS公式ドキュメントのRate式に関するページを参照してください。
「期間」では、メンテナンスウィンドウの実行時間数を 1 ~ 24の範囲で指定します。
CRONやRATEで指定した「メンテナンス開始時間」に基づき、ここで指定した時間数を経過した時刻が「メンテナンス終了時間」となります。

「タスクの開始を停止する」では、メンテナンスウィンドウの終了前に、システムが新しいタスクをスケジュール実行するのを抑止する時間数を 0 ~ 23 の範囲で指定します。

例えば、CRONやRATEで「メンテナンス開始時間」を “22:00” とし、「期間」に “5(時間)” を指定している場合を考えます。
このケースで「タスクの開始を停止する」に 2 を指定した場合、1:00~3:00の間は実行を予定しているメンテナンスタスクが実際に実行されることはありません。

「ウィンドウ開始日」および「ウィンドウ終了日」では、メンテナンスウィンドウが有効となる期間を指定します。「メンテナンス開始時間」、「メンテナンス終了時間」とは、意味が異なる設定項目であることに注意してください。

先のスケジュール設定では、メンテナンスウィンドウの実行間隔を日単位や時間単位で指定しますが、そのメンテナンスウィンドウが実際に適用される期間を指定するのが「ウィンドウ開始日」、「ウィンドウ終了日」です。
現実時間が「ウィンドウ開始日」を過ぎないとスケジュールしたメンテナンスタスクは実行されず、また現実時間が「ウィンドウ終了日」を過ぎた場合もメンテナンスタスクは実行されません。
“メンテナンスウィンドウが有効な期間” と解釈すると分かりやすいでしょうか。
「スケジュールのタイムゾーン」では、メンテナンスウィンドウを実行する基準として利用するタイム ゾーンを指定します。プルダウンボックスをクリックすると、指定可能なタイムゾーンのリストが表示され、その中から1つを選択します。

「スケジュールのオフセット」では、CRON式またはRate式で指定された日時からメンテナンスウィンドウを実行するまでの待機日数を 1 ~ 6 の間で指定できます。
この項目は、スケジュールの指定方法で「CRON/Rate式」を選択した場合のみ指定可能です。また、月の特定の週の特定の日を対象とする CRON 式に対してのみ指定できます。

タグの管理
メンテナンスウィンドウに対して、タグを追加することができます。

すべての項目を設定し、画面最下部にある「メンテナンスウィンドウの作成」をクリックすると、メンテナンスウィンドウの作成処理が開始します。

その後、メンテナンスウィンドウの一覧画面が表示されます。
作成処理が完了すると、画面上部に次のメッセージが表示されます。

ターゲットを登録
続いて、タスクの実行対象となるリソースグループであるターゲットを登録します。
メンテナンスウィンドウの一覧画面にて、ターゲットを登録するメンテナンスウィンドウのチェックボックスにチェックを入れ、画面右上にある「アクション」をクリックし、表示されるメニューより「ターゲットの登録」をクリックします。

ターゲットの登録(Register target)画面が表示されます。

ちなみに、ターゲットの登録画面はメンテナンスウィンドウ詳細画面からも起動可能です。
メンテナンスウインドウ一覧画面にて、メンテナンスウィンドウの「ウィンドウID」リンクをクリックすると、クリックしたIDのメンテナンスウィンドウに関する詳細画面が表示されます。
「説明」タブ画面にて、先述の手順と同様に「アクション」メニューから「ターゲットの登録」を開始できます。

また、「ターゲット」タブ画面では、画面右上の「ターゲットを登録」をクリックすることで、ターゲットの登録画面を起動することができます。

以降より、ターゲットの登録画面における設定項目を見ていきます。
Maintenance window target details

まずは、ターゲットの詳細情報として「ターゲット名(Target name)」、「説明(Description)」、「所有者情報(Owner Information)」を設定します。
所有者情報は、対象のメンテナンスウィンドウでターゲットにおけるタスク実行中に発生した Amazon EventBridge イベントに含まれる情報です。
ターゲット

ここでは、ターゲットとするマネージドノードの指定方法を選択します。
選択できる指定方法は、インスタンスタグで指定する方法、手動で指定する方法、リソースグループを指定する方法の3種類が用意されています。
インスタンスタグを指定 | メンテナンスウィンドウが実行されると、指定したタグが付与された全てのマネージドノードでタスクが実行されます。 |
リソースグループを選択 | 指定したリソースグループに属するマネージドノードでタスクが実行されます。 |
インスタンスを手動で選択 | 指定したマネージドノードでタスクが実行されます。 |
上の図はインスタンスタグを指定する方法ですが、別の選択肢を指定すると設定項目の表示内容が切り替わります。
▼「リソースグループを選択」を選択した場合
※選択するリソースグループは、あらかじめ作成しておく必要があります。

▼「インスタンスを手動で選択」を選択した場合

すべての項目を設定し、画面最下部にある「Register target」をクリックすると、ターゲットの登録処理が開始します。

その後、ターゲットの一覧画面が表示されます。
登録処理が完了すると、画面上部に次のメッセージが表示されます。

タスクの作成
タスクの作成についても、ターゲットと同様に作成画面を起動する操作プロセスは複数あります。
メンテナンスウィンドウの一覧画面、あるいは詳細画面より「アクション」メニューを開いて起動する方法か、メンテナンスウィンドウ詳細画面の「タスク」タブ画面より、画面右上の「タスクの登録」をクリックする方法です。
タスクは、次のいずれかのツールを利用して作成します。
- AWS Systems Manager Run Command
- AWS Systems Manager Automation
- AWS Lambda
- AWS Step Functions
それぞれの設定フローおよび設定項目に関しては、ボリュームも多いので次回に分けて解説することにします。
さいごに
今回は「AWS Systems Managerフル攻略マニュアル」の第13回ということで、Maintenance Windowsの基本知識と導入について解説しました。
タスクの登録はボリュームが大きいので次回での解説としますが、Maintenance Windowsの基本的な知識と設定の流れについてはイメージを持っていただけたかと思います。
次回の「Maintenance Windows実践編」では、メンテナンスウィンドウへのタスク登録について解説します。上手に使い分けてタスクを登録できれば、メンテナンスタスク運用が大幅に効率化すること間違い無しなので、ぜひご覧ください。