Staging環境はエンジニアが開発している時間帯のみ稼働していれば良い。9:00〜21:00ぐらいまで稼働していれば十分で深夜帯は停止していても問題ないはず。Instanceは従量課金なので不要な時は稼働させないのがコスト的にうれしい。
とはいえ、engineerが毎日stopしてstartしていたらそれだけでけっこう面倒だし、イヤなタスク。
そのため、dailyで定時にstop、startのbatch処理が作れれば完結する。
そのためにはLambdaをつかうのがよさそう。Lambda、node.isのv16、cloud watch eventsを使う。
もちろんIAMでEC2ReadOnlyPolocyやstopInstance、startInstanceができるポリシーをアタッチしたユーザーグループを作る必要があるがそれについては割愛。
nodeは18もあるが、18はjsがv3になり、ちょっと書き方が変わるので、v2が使えるnode16がとっつきやすい。
ちなみにIAMのSeceretKeyやAccessKey、InstanceIDはハードコーディングするのではなく、Lambdaの環境変数に登録しておくのがベストプラクティスっぽいので登録した。cloud watch eventsの設定はcorn っぽく設定できるのでとても簡単。
これでAWSの請求金額が少なること間違いなし。間違えてproductionのInstanceIDを指定すると死亡するので気をつける。