EC2インスタンスを業務時間のみ起動させる実装のメモです。
平日は9:00に起動、18:00に停止。土日祝日は停止したまま。
祝日はGoogleカレンダーのデータをChange Calendarに反映。
◎主な使用サービス
・Change Calendar
・Step Functions
・EventBridge
0.概要
各サービスの使い方です。
①Change Calendar
・土日祝日用(「デフォルトで開く」)
土日に「イベント」作成
Googleカレンダーのデータから祝日反映
・業務時間用(「デフォルトで閉じる」)
9:00〜18:00に「イベント」作成
②Step Functions
・EC2の条件に合ったら起動する設定
③EventBridge
・平日9:00と18:00に起動する設定

1.祝日データのエクスポート
Googleカレンダーから祝日データであるcsvファイルをエクスポート。
csvファイルをChangeCalendarの祝日カレンダーに反映する。
①csvファイルのエクスポート
Google画面からGoogleカレンダーを開く。
左ペインの「他のカレンダー」>「 関心のあるカレンダーを探す」を選択。
「日本の祝日」を選択し「祝日」にチェックを入れる。
「その他の行事」はチェックしない。
「日本の祝日」を追加して「設定」を選ぶ。
「 iCal 形式の公開 URL」URL から「.ics ファイル」をダウンロード
②csvファイルの成形
そのままだと順番が日付順じゃないようなので直します。
こちらのページに成形用Pyhonスクリプトを置きました。
全祝日が記載されているかなども確認します。
2.Change Calendar
Change Calendarの多くのネット記事を見ました。
その中でも、こちらの記事が一番参考になりました。
特にStep Functionsとの組み合わせで以下の項目です。
『
ANDの場合
「締め日は基本実行するけど、休日だったら実行しない」
』
参考記事
カレンダー作成
Change Calendarでカレンダーを2つ用意します。
Systems ManagerからChange Calendarに入ります。
<カレンダー>
①営業時間用
⇒営業時間なら処理を実行する
(「デフォルトで閉じる」)
②土日祝用
⇒祝日なら処理を実行しない
(「デフォルトで開く」)
イベント作成
①営業時間用
・例)月〜金:AM12:00〜PM11:59
②土日祝用
・土日例)土〜日:AM12:00〜PM11:59
・祝日例)天皇誕生日:AM12:00〜PM11:59

3.Step Functions
Step Functionsの作成も上述の記事を主に参考にしました。
基本的には記事にあるJSONコードを書き換えるだけです。
リソース部分を使っているものに変えましょう。
ステートマシン作成
EC2自動起動のJSONコードはGitHubページに置いています。
コード内の「カレンダー名」を書き換えて使います。
コピーしてステートマシン作成時の「JSONコード」欄に貼ります。
完成後のフローイメージは上の画像です。
そのコードで動くかどうか実行して試してみましょう。

4.EventBridge
ステートマシンを自動で実行させるには起動させます。
EventBridgeで指定の時間に実行させます。
「スケジュール」作成の際に cron式で指定します。
(執筆中)
