AWS CLIでEC2用のMaintenance Windowを作成してみた。
概要
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 :