CloudWatch Events から Systems Manager 経由で Windows バッチを実行してみる
0.はじめに
これまで、ジョブ管理に「Zabbix」の Add-On の「Job Arranger for Zabbix」というものを使って、Windows バッチを定期実行していましたが、
出来れば AWS 内で完結出来ないかなぁ、と考えていて、
どうやら CloudWatch Events → SSM RunCommand で出来るみたいなので試してみました。
1.CloudWatch Events のルールを作成する
- CloudWatch Events のコンソールにアクセスし、「ルールの作成」を押下します。
- 「ステップ 1: ルールの作成」画面が表示されるので、以下の項目を設定し、「設定の詳細」ボタンを押下します。
- イベントソース : ※任意。今回は、スケージュールドリブンの設定を例として記載。
- ● 「スケジュール」
- Cron 式 : 「45 15 * * ? *」 ※日本時間で、毎日 00:45 に実行。
- ※ UTC なので注意!!
- ターゲット : 「SSM Run Command」
- ドキュメント : 「AWS-RunPowerShellScript (Windows,Linux)」
- ターゲットキー : 「InstanceIds」
- ターゲット値 : ※実行先の EC2 のインスタンス ID
- パラメータの設定 :
- ● 「定数」
- Commands : ※実行する Windows バッチスクリプト (フルパス)
- 例) 「C:\xxxx\xxxx.bat」
- WorkingDirectory : ※Windows バッチスクリプトの実行ディレクトリ (フルパス)
- 例) 「C:\xxxx\」
- ExecutionTimeout : ※任意
- ロール : ※任意。今回は、新しいロールを作成。
- ● 「この特定のリソースに対して新しいロールを作成する」
- 例) 「SSMRunCommand-MaintenanceEC2」
- ※ IAM ロールと IAM ポリシーをきちんと管理しておきたいのであれば、デフォルトのままにしておかない方がいいかも。
-
※ あと、後述しますが、IAM のコンソールから同様のロールを作成出来なかったので、注意です。
-
- 「ステップ 2: ルールの詳細を設定する」画面が表示されるので、以下の項目を設定し、「ルールの作成」ボタンを押下します。
2.IAM ポリシーの作り直し
- イベントソース : ※任意。今回は、スケージュールドリブンの設定を例として記載。
- ● 「スケジュール」
- Cron 式 : 「45 15 * * ? *」 ※日本時間で、毎日 00:45 に実行。
- ※ UTC なので注意!!
- ● 「スケジュール」
- ターゲット : 「SSM Run Command」
- ドキュメント : 「AWS-RunPowerShellScript (Windows,Linux)」
- ターゲットキー : 「InstanceIds」
- ターゲット値 : ※実行先の EC2 のインスタンス ID
- パラメータの設定 :
- ● 「定数」
- Commands : ※実行する Windows バッチスクリプト (フルパス)
- 例) 「C:\xxxx\xxxx.bat」
- WorkingDirectory : ※Windows バッチスクリプトの実行ディレクトリ (フルパス)
- 例) 「C:\xxxx\」
- ExecutionTimeout : ※任意
- ロール : ※任意。今回は、新しいロールを作成。
- ● 「この特定のリソースに対して新しいロールを作成する」
- 例) 「SSMRunCommand-MaintenanceEC2」
- ※ IAM ロールと IAM ポリシーをきちんと管理しておきたいのであれば、デフォルトのままにしておかない方がいいかも。
-
※ あと、後述しますが、IAM のコンソールから同様のロールを作成出来なかったので、注意です。
- ● 「この特定のリソースに対して新しいロールを作成する」
-
自動で作成された IAM ポリシーを参考に別の IAM ポリシーを作成し、IAM ロールにアタッチし、元の IAM ポリシーをデタッチ・削除します。
※ IAM ロールと IAM ポリシーを毎回作成しても良いのであれば、当手順は不要ですので、飛ばして下さい。
- IAM ポリシーのコンソールにアクセスし、自動で作成された IAM ポリシーを確認します。IAM ロールと同じ名前になっているはずです。
-
確認すると、以下の様になっていると思います。
{ "Version": "2012-10-17", "Statement": [ { "Action": "ssm:SendCommand", "Effect": "Allow", "Resource": [ "arn:aws:ec2:ap-northeast-1:********:instance/[EC2のインスタンスID]", "arn:aws:ssm:ap-northeast-1:*:document/AWS-RunPowerShellScript" ] } ] }
-
IAM ポリシーのコンソールから「ポリシーの作成」ボタンを押下し、以下の内容の IAM ポリシーを作成します。
- ※ EC2のインスタンスID (i-〜) を「*」に変更しただけ。
{ "Version": "2012-10-17", "Statement": [ { "Action": "ssm:SendCommand", "Effect": "Allow", "Resource": [ "arn:aws:ec2:ap-northeast-1:********:instance/*", "arn:aws:ssm:ap-northeast-1:*:document/AWS-RunPowerShellScript" ] } ] }
-
IAM ロールのコンソールにアクセスし、自動で作成された IAM ロールにおいて、古い IAM ポリシーをデタッチし、新しく作り直した IAM ポリシーをアタッチします。
古い IAM ポリシーを削除します。
99.ハマりポイント
- ハマったのは、IAM ロールと IAM ポリシーのところです。CloudWatch Events のルール作成時に IAM ロールを作成するのが嫌で、IAM のコンソールから色々試したんですが、どうにもうまくいきませんでした…。
- どなたか、教えて頂けると非常に助かります…。
- あと、別の投稿に記載しましたが、ログの確認にもハマってかなりの時間を無駄にしました。
XX.まとめ
CloudWatch に関しては、
EC2 の運用・メンテナンスに絡んで、色々と試したことが他にもあるので、また別の投稿あげようかと思います。
参考になれば。
Author And Source
この問題について(CloudWatch Events から Systems Manager 経由で Windows バッチを実行してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/kusokamayarou/items/65092844c8b64d00760e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .