LoginSignup
4
3

More than 5 years have passed since last update.

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

Posted at

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

参考になれば。

4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3