WindowsServerからCloudWatchカスタムメトリクスを取得してくる
検証用途だと、EC2の止め忘れを結構やっちゃう人って結構いませんか?
今回は一定時間操作が無かったEC2(Winsows)を自動で停止する仕組みを構築してみました
検証内容
カスタムメトリクスとしてActiveSessionsを取ってきて、それを元に自動でインスタンスを停止する仕組みを構築してみます。
登場するAWSサービス
・CloudWatch
・EC2
・IAM
・Amazon EC2 Systems Manager
サーバ環境
・OS
→WindowsServer2012
・EC2Config
→4.7Ver
作業上の注意
WindowsServerからカスタムメトリクスを取得してくる方法は、私が紹介する方法以外にもいくつかありますが、
WindowsAMIに初期インストールされているEC2ConfigのVerによって、できる方法とできない方法があります。
今回私が検証した方法は、EC2Config 4.XXVerでの方法ですので、EC2Config 3.XXVerのWindowsServerだと、正常に動作するか分かりません
手順
①対象のインスタンスにアタッチするIAMロールを作成する
1.IAMマネジメントコンソールの左ペインのロールをクリックし、新しいロールの作成をクリック
2.AWSサービスロールのAmazon EC2を選択
3.フィルターにCloudWatchFullAccessと入力し、出てきたポリシーを選択し、次のステップをクリック
4.適当なロール名を入力し、ロールの作成をクリック
5.先ほど作成したロールをクリック
6.ポリシーのアタッチをクリック
7.フィルターにAmazonEC2RoleforSSMと入力し、出てきたポリシーを選択し、ポリシーのアタッチをクリック
②対象のインスタンスに①で作成したIAMロールをアタッチ
※ちなみに昔は既に作成済みのインスタンスにIAMロールをアタッチすることができなかったとかなんとか
面倒だね~ (*´・д・)(・д・`*)ネー
1.EC2マネジメントコンソールの左ペインのインスタンスをクリックし、対象のインスタンスにチェックを入れ、
アクション→インスタンスの設定→Attach/Replace IAM roleをクリック
2.①で作成したIAMロールを選択し、Applyをクリック
3.正常にアタッチできたことを確認し、Closeをクリック
③Systems Manager Run Command を使用してインスタンスを CloudWatch と統合する
1.EC2マネジメントコンソールの左ペインのState Managerをクリックし、関連付けの作成をクリック
2.AWS-ConfigureCloudWatchにチェックを入れる
3.ドキュメントのバージョン、ターゲントインスタンス、スケジュールに適切な値を設定
※ターゲントインスタンス以外は、とりあえずはデェフォルトでも構いません
4.パラメータのステータスをEnableにし、PropertiesにJSON形式でパラメータを指定し、関連付けの作成をクリック
5.関連付けの作成が成功したことを確認し、閉じるをクリック
6.③の5で作成した関連付けのステータスが成功になっていることを確認、ステータスが保留中の場合は、関連付けを今すぐ適用をクリック
④CloudWatchで正常に値の取得ができているか確認
⑤今回作成したカスタムメトリクスを使用し、自動停止アクションを設定
※注意事項
Winodws側の設定で、切断されたセッションを自動終了するように設定しとかないと、セッション保持し続けるので、要設定
また、アラートを作成したCloudWatchがあるリージョンと、対象のEC2があるリージョンが異なると、自動停止アクションが失敗するみたいなので要注意
補足
今回はカスタムメトリクスのパラメータの指定を、Systems Manager Run Commandで行いましたが、
直接対象のEC2にログインし、JSONファイルを編集することでも可能です。
しかし、一台一台設定していくのは手間なのでSystems Manager Run Commandを使用することをオススメします
今回使用したJSONパラメータの補足
・③の4で記載したJSONパラメータが適応された、JSONファイルの場所
C:\Program Files\Amazon\SSM\Plugins\awsCloudWatch\AWS.EC2.Windows.CloudWatch.json
・JSONファイルの中身抜粋(分かり辛いと思うけど、許してね (・ω<) てへぺろ)
・赤枠
IsEnabled を true に設定すると、SSMエージェントを起動または再起動した直後に、エージェントから CloudWatch にデータ送信が開始される。
・青枠
ID名をFlowsで指定することによって、どの値をカスタムメトリクスとして送るかを指定している
・黄枠
Windowsのパフォーマンスモニタで取得したい値に対応するパラメータを確認し、それを指定
今回はアクティブなターミナルセッション数を取得したいので、図のようなパラメータを指定している
当然取得したい値によって、指定するパラメータは変動する
・紫枠
RegionでどこのリージョンのCloudWatchにカスタムメトリクを送るか指定する
なんで東京リージョンじゃないかっていうと、東京リージョンは対応していないからです
Amazonがジャッブを仲間外れにしてます(つд⊂)エーン
ハマリポイント
初めに見つけてきたネット上に転がっている方法が、EC2Config 3.XXVerの方法だったので、いくらやってもうまく行かずにハマリました
検証結果
この方法での自動停止、オススメですよ!