ちょっと話題の記事

AWS Systems Manager Change Calendarで祝日を設定したジョブ実行が可能になりました

AWS 内でジョブ実行する際に祝日設定したいと以前から感じていました
2021.09.08

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな ネクストモード株式会社 の吉井です。

SSM Change Calendar にサードパーティのカレンダーをインポート可能になりました。
執筆日時点で以下のカレンダーから ics 形式でインポートできます。

  • Google Calendars
  • Microsoft Outlook Calendars
  • Apple iCloud Calendars

SSM Change Calendar とは

Systems Manager で Automation や RunCommand を実行する際に、実行する日しない日をカレンダーで指定できるサービスです。
例えば、開発検証環境の EC2 を平日業務時間帯だけ自動起動停止するといった使い方をします。

従来だと自分で日本の祝日を登録しなければならなかったのですが、カレンダーのインポートで少しだけ楽になりました。
祝日だけではなく自社の業務カレンダーなども登録可能だと思います。

何が嬉しいのか

SSM Automation や RunCommand では定型的な手順実行、つまり、ジョブ実行が可能です。
上のリンクでは EC2 の起動を自動化する方法を紹介してもらっていますが、
他にも AWS API で実現できることはほぼジョブ化できますし、OS 内のコマンドやシェルスクリプトを実行することも可能です。

ジョブネットを必要としない簡易的なジョブスケジューラーなら AWS のサービスだけで実現できます。
ジョブスケジューラーには祝日設定欲しいとみなさん思っているはずです。

やってみた

Google カレンダーのエクスポート

Google カレンダーから「日本の祝日」をエクスポートしてみます。

Google カレンダーの左側メニューから 他のカレンダー関心のあるカレンダーを探す をクリックします。

日本の祝日 を選択します。

「日本の祝日」を自分のカレンダーに追加した後、設定を開くと iCal 形式の公開 URL が記載されています。
この URL から .ics ファイルをダウンロードします。

ics ファイルのタイムゾーン変更

ダウンロードした .ics ファイルをテキストエディタで開きます。
7行目付近にタイムゾーンの記述があるはずです。ここを Asia/Tokyo に変更します。

X-WR-TIMEZONE:Asia/Tokyo

SSM Change Calendar の作成

Change Calendar を作成し「日本の祝日」をインポートします。

マネージメントコンソールで SSM Change Calendar を開きます。

カレンダーを作成 をクリックします。

次の画面で Import calendar という項目が出ます。
ここにダウンロードしてタイムゾーンを変更した ics ファイルをインポートします。

祝日の表示

無事に祝日が表示されました。
9月24日に有給休暇を取ると4連休ですね。今気が付きました。

祝日の更新

残念ながら祝日の自動更新・追加は利用者側で行う必要があります。
毎年インポートをするか、内閣府が公開している CSV を iCal に変換してインポートさせる処理を自動化するか、
何れにもして利用者側の作業になります。

「国民の祝日」について

まとめ

EC2 や RDS を平日日中帯だけ使いたい、という需要はとても多いです。
EventBridge の cron や今までの Change Calendar では土日設定は出来ても日本の祝日までは NG でした。

このアップデートにより、祝日や自社カレンダーに合わせた柔軟な自動化ジョブを組むことが可能になったと思います。

参考

AWS Systems Manager Change Calendar

以上、吉井 亮 がお届けしました。