CloudWatch Events から Systems Manager 経由で Windows バッチを実行してみる

More than 1 year has passed since last update.


0.はじめに

これまで、ジョブ管理に「Zabbix」の Add-On の「Job Arranger for Zabbix」というものを使って、Windows バッチを定期実行していましたが、

出来れば AWS 内で完結出来ないかなぁ、と考えていて、

どうやら CloudWatch Events → SSM RunCommand で出来るみたいなので試してみました。


1.CloudWatch Events のルールを作成する


  1. CloudWatch Events のコンソールにアクセスし、「ルールの作成」を押下します。



  2. 「ステップ 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 のコンソールから同様のロールを作成出来なかったので、注意です。











    • 0002.png






  3. 「ステップ 2: ルールの詳細を設定する」画面が表示されるので、以下の項目を設定し、「ルールの作成」ボタンを押下します。


    • 名前 : ※任意

    • 説明 : ※任意




    • 0003.png




2.IAM ポリシーの作り直し

自動で作成された IAM ポリシーを参考に別の IAM ポリシーを作成し、IAM ロールにアタッチし、元の IAM ポリシーをデタッチ・削除します。

※ IAM ロールと IAM ポリシーを毎回作成しても良いのであれば、当手順は不要ですので、飛ばして下さい。


  1. IAM ポリシーのコンソールにアクセスし、自動で作成された IAM ポリシーを確認します。IAM ロールと同じ名前になっているはずです。




  2. 確認すると、以下の様になっていると思います。

    {
    
    "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"
    ]
    }
    ]
    }





  3. 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"
    ]
    }
    ]
    }





  4. IAM ロールのコンソールにアクセスし、自動で作成された IAM ロールにおいて、古い IAM ポリシーをデタッチし、新しく作り直した IAM ポリシーをアタッチします。



  5. 古い IAM ポリシーを削除します。



99.ハマりポイント


  • ハマったのは、IAM ロールと IAM ポリシーのところです。CloudWatch Events のルール作成時に IAM ロールを作成するのが嫌で、IAM のコンソールから色々試したんですが、どうにもうまくいきませんでした…。




  • どなたか、教えて頂けると非常に助かります…。




  • あと、別の投稿に記載しましたが、ログの確認にもハマってかなりの時間を無駄にしました。




XX.まとめ

CloudWatch に関しては、

EC2 の運用・メンテナンスに絡んで、色々と試したことが他にもあるので、また別の投稿あげようかと思います。

参考になれば。