AWS Sysmtems Manager OpsCenterで増えすぎたOpsItemを一括で解決済みにする


AWSCLI ワンライナー

以下をご使用ください。

$ aws ssm describe-ops-items --ops-item-filters '{"Key":"Status","Values":["Open"],"Operator":"Equal"}' --query 'OpsItemSummaries[*].OpsItemId' --output table | grep "oi-" | awk '{print $2}' | while read line; do echo update item: $line; aws ssm update-ops-item --status Resolved --ops-item-id $line; done

ステータスが未解決(Open)の Item を何も考えずに一括で解決済み(Resolved)に
変更してしまうのでご注意ください。
以降は解説です。

OpsCenter とは

2019年6月に追加された Systems Manager の新しい機能です。
CloudWatch Events と連携して AWS リソースの運用上の問題、イベント、アラート等を
OpsItems として集中管理する機能を提供します。

AWS Systems Manager OpsCenter
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/OpsCenter.html

OpsItem の作成のしくみと蓄積

OpsItem を作成するには大きくわけると2つの方法があります。

  • コンソールや OpsCenter API を通して手動で作成する
  • CloudWatch Events で各種イベントを検知し、自動作成する

後者の CloudWatch Events ルールは自身で作成してもよいのですが、基本的なルールは
AWS 側であらかじめ用意されており、OpsCenter のコンソールから設定することが可能です。

基本的な運用イベントが網羅されていてとても便利なのですが、アカウントの用途によっては
EC2 の停止または終了は頻繁に発生するため、これがノイズになってしまうこともあります。

実際に開発用の環境で OpsCenter を検証していたところ
未解決イベントが大量に溜まってしまいました。

各 OpsItem を手動で解決済みにしていってもよいのですが、数が増えてくると大変辛い。

対策

CloudWatch Events ルールの無効化

基本設定で不要なルールは、CloudWatch Events で個別にルールを無効化すれば
Item の自動登録を止めることができます。

AWSCLI によるステータス変更

冒頭のコマンドを改行ありで記載すると以下のような感じになります。

$ aws ssm describe-ops-items \
> --ops-item-filters '{"Key":"Status","Values":["Open"],"Operator":"Equal"}' \
> --query 'OpsItemSummaries[*].OpsItemId' --output table |
> grep "oi-" |
> awk '{print $2}' |
> while read line;
> do echo update item: $line; 
> aws ssm update-ops-item --status Resolved --ops-item-id $line;
> done
update item: oi-xxxxxxxxxxxx
update item: oi-yyyyyyyyyyyy
update item: oi-zzzzzzzzzzzz
.
.
以下略

describe-ops-items コマンドでステータスが Open の OpsItemId を抜き出し、
各IDに対して、update-ops-item コマンドでステータスを Resolved に変更しています。

注意点としては describe-ops-items が一度に最大で50件までしかリストできないので
上記のコマンドも50件しか処理できません。
50件以上溜まっている場合、Open状態のアイテムが無くなるまで繰り返し実行する必要があります。

以上です。
参考になれば幸いです。