この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
概要
Maintenance Windows はSystems Manager の一機能です。Maintenance Window を使用して、ソフトウェアやパッチのインストール、ドライバーの更新など、ノードに対して破壊的になり得るアクションを実行するスケジュールを定義できます。Maintenance Windowには、スケジュール、最長期間、登録されたターゲットのセット、登録されたタスクのセットがあります。ターゲットはノードまたは他のAWSリソースにすることができます。
メンテナンスウィンドウは、次のタスクタイプをサポートします:
- AWS Lambdaの関数。
- AWS Step Functionsのタスク。
- Run Command のコマンド。
- Automationのワークフロー。
この記事では、AWS CLIでEC2用のMaintenance Windowを作成してみました。ここでは、EC2をターゲットとして単一のMaintenance Windowを作成し、Maintenance Windowを実行するためのタスクを設定しました。
やってみた
EC2の作成
- 次の設定でIAMロールを作成しておきます。
- 信頼されたエンティティの種類 : AWS のサービス
- ユースケース : EC2
- ポリシー : AmazonSSMManagedInstanceCore
- この設定で EC2インスタンスを作成しておきます。
- AMI : Amazon Linux 2 AMI
- インスタンスタイプ : t2.micro
- サブネット:パブリックサブネット
- IAMロール : 以前に作成されたIAMロール。
- Security Group :
- Inbound :SSH
Maintenance Windowの作成
- 次のコマンドを使用してMaintenance Windowを作成しておきます。
- Maintenance Window10 分ごとに最大 2 時間実行します。
- cutoff 1: Maintenance Windowの終了から1時間以内に新しいタスクが開始されないことを示します。
//Create Maintenance Window
aws ssm create-maintenance-window \
--name "EC2-Maintenance-Window" \
--schedule "rate(10 minutes)" \
--duration 2 \
--cutoff 1 \
--allow-unassociated-targets \
--tags "Key=Name,Value=Maintenance-Window" \
--region us-east-1
//Output
{
"WindowId": "mw-abcd1234567efgh"
}
- 次のDescribeコマンドを使用して、Maintenance Windowの詳細を表示できます。
//Describe the Maintenance Window
aws ssm describe-maintenance-windows --region us-east-1
//Output
{
"WindowIdentities": [
{
"WindowId": "mw-abcd1234567efgh",
"Name": "EC2-Maintenance-Window",
"Enabled": true,
"Duration": 2,
"Cutoff": 1,
"Schedule": "rate(10 minutes)",
"NextExecutionTime": "2022-05-24T12:37:03.472Z"
}
]
}
Maintenance Window
Maintenance WindowのDescription
Maintenance Windowにターゲットを登録する
- 次のコマンドを使用して、EC2インスタンスをターゲットとしてMaintenance Windowに登録しておきます。
//Register EC2 as Target
aws ssm register-target-with-maintenance-window \
--window-id "mw-abcd1234567efgh" \
--resource-type "INSTANCE" \
--target "Key=InstanceIds,Values=i-00000000000000" \
--region us-east-1
//Output
{
"WindowTargetId": "abcdef123-1234-ab12-cd34-abcd12345"
}
- 次のコマンドでターゲットの詳細を取得できます。
//Describe target
aws ssm describe-maintenance-window-targets \
--window-id "mw-abcd1234567efgh" \
--region us-east-1
//Output
{
"Targets": [
{
"WindowId": "mw-abcd1234567efgh",
"WindowTargetId": "abcdef123-1234-ab12-cd34-abcd12345",
"ResourceType": "INSTANCE",
"Targets": [
{
"Key": "InstanceIds",
"Values": [
"i-00000000000000"
]
}
]
}
]
}
Maintenance Windowにタスクを登録する
- EC2インスタンスで[df]コマンドを実行する Run Command タスクを登録しておきます。
- 次のコマンドを使用して、タスクを登録しておきます。
//Register Task
aws ssm register-task-with-maintenance-window \
--window-id "mw-abcd1234567efgh" \
--task-arn "AWS-RunShellScript" \
--max-concurrency 1 --max-errors 1 \
--priority 10 \
--targets "Key=InstanceIds,Values=i-00000000000000" \
--task-type "RUN_COMMAND" \
--task-invocation-parameters '{"RunCommand":{"Parameters":{"commands":["df"]}}}' \
--region us-east-1
//Output
{
"WindowTaskId": "abcdef1245-1234-ab12-cd34-abcd12354"
}
- 次のコマンドでタスクの詳細を表示できます。
//Describe Tasks
aws ssm describe-maintenance-window-tasks \
--window-id mw-abcd1234567efgh \
--region us-east-1
//Output
{
"Tasks": [
{
"WindowId": "mw-abcd1234567efgh",
"WindowTaskId": "abcdef1245-1234-ab12-cd34-abcd12354",
"TaskArn": "AWS-RunShellScript",
"Type": "RUN_COMMAND",
"Targets": [
{
"Key": "InstanceIds",
"Values": [
"i-00000000000000"
]
}
],
"TaskParameters": {},
"Priority": 10,
"ServiceRoleArn": "arn:aws:iam::xxxxxxxxxxxxx:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM",
"MaxConcurrency": "1",
"MaxErrors": "1"
}
]
}
タスク実行の詳細を表示する
- 次のコマンドを実行して、特定のMaintenance Windowのタスク実行のリストしておきます。
//List Task Executions
aws ssm describe-maintenance-window-executions \
--window-id mw-abcd1234567efgh --region us-east-1
//Output
{
"WindowExecutions": [
{
"WindowId": "mw-abcd1234567efgh",
"WindowExecutionId": "abcd1234-ab12-cd34-a1s2-abcdef123",
"Status": "SUCCESS",
"StartTime": "2022-05-24T18:17:45.592000+05:30",
"EndTime": "2022-05-24T18:17:50.280000+05:30"
},
{
"WindowId": "mw-abcd1234567efgh",
"WindowExecutionId": "....................",
"Status": "SUCCESS",
"StatusDetails": "No tasks to execute.",
"StartTime": "2022-05-24T18:07:45.805000+05:30",
"EndTime": "2022-05-24T18:07:45.841000+05:30"
},
{
"WindowId": "mw-abcd1234567efgh",
"WindowExecutionId": ".................",
"Status": "SUCCESS",
"StatusDetails": "No tasks to execute.",
"StartTime": "2022-05-24T17:57:45.799000+05:30",
"EndTime": "2022-05-24T17:57:45.828000+05:30"
}
]
}
- ウィンドウ実行IDとタスクIDを指定して以下のコマンドを実行し、特定のタスク実行の詳細を取得しておきます。
//Get Task Execution Details
aws ssm get-maintenance-window-execution-task \
--window-execution-id "abcd1234-ab12-cd34-a1s2-abcdef123" \
--task-id "abcdef1245-1234-ab12-cd34-abcd12354" \
--region us-east-1
//Output
{
"WindowExecutionId": "abcd1234-ab12-cd34-a1s2-abcdef123",
"TaskExecutionId": "abcdef1245-1234-ab12-cd34-abcd12354",
"TaskArn": "AWS-RunShellScript",
"ServiceRole": "arn:aws:iam::xxxxxxxxxxx:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM",
"Type": "RUN_COMMAND",
"TaskParameters": [
{
"aws:InstanceId": {
"Values": [
"i-0000000000000"
]
},
"commands": {
"Values": [
"df"
]
}
}
],
"Priority": 10,
"MaxConcurrency": "1",
"MaxErrors": "1",
"Status": "SUCCESS",
"StartTime": "2022-05-24T18:17:45.807000+05:30",
"EndTime": "2022-05-24T18:17:50.238000+05:30"
}
まとめ
AWS CLIでEC2用のMaintenance Windowを作成してみました。CLIを使用して他のAWSサービスの Maintenance Windowを作成することができます。
Reference :