ES2インスタンスを自動で起動停止する処理を、作成したのでメモ書します。
手順はこちら↓(AWSの公式資料)
参考:
Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および起動するにはどうすればよいですか?
ほぼ手順通りに作れてしまったので、私が解説するまでもないとは思いましたが、
備忘として作業概要と作業中に迷ったところについて、まとめておきたいと思います。
ざっくり言うと以下の3つの作業を行います。
- IAMポリシーとLambda 関数実行のためのロール作成
- Lambdaで、EC2 インスタンスの起動停止関数を作成
- CloudWatch EventsでLambdaの実行日時をスケジューリングする
IAMポリシーとLambda 関数実行のためのロール作成
まず、EC2の起動停止を許可するIAMポリシーを作成し、そのAIMポリシーを実行ロールに付与する作業を行います。
IAMポリシーとロールの説明については、こちらの記事を読めば分かります。
簡単にまとめるとこんな感じです。
・IAMポリシー → AWSの操作権限もろもろ
・ロール → もろもろの権限たちの中で、使用したいものをグループ化するやつ
ここで作ったロールをLambdaの関数に設定する訳です。
ちなみに、LambdaのAWSリソースに権限を付与する場合は、ロールを使用することが必須のようです。(IAMポリシーを直接付与することはできない)
Lambdaで、EC2 インスタンスの起動停止関数を作成
一番楽しみにしていた作業だったが、テンプレのコピペで終了した。残念。。
唯一書き換えるのは、EC2インスタンスのIDと所属リージョンのところ。
AZじゃなくて、「リージョン」を書き換えます。
いや、ちゃんと書いてあるんだけどね。
あと、Lambdaが始めてだったので、どうやってソースを書き始めたら良いか若干迷った。
画面の「lambda_function.py」をクリックすればいいだけなのだが、他にもたくさん触れるところがあって目移りしてしまった。(汗
CloudWatch EventsでLambdaの実行日時をスケジューリングする
Linuxのcronと同じ感覚で起動停止日時を設定する。
ただ、タイムゾーンがUTCしか対応していないようなので、
時刻設定は今の時間から-9時間して設定する必要がある。
これもちゃんと読めば書いてあるが、まあ、普通に日本時間だと思って設定しちゃいましたね。
「あれ、動かない?」と思ってマニュアルを読んだらこういうオチだったという。
初見だと引っかかる人多そう。。