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