【AWS】 費用節約のためEC2を夜間停止する2023年4月版【備忘録】
おはこんばんにちは、ビショップです。
AWS、高いですよね。毎月の費用に辟易しております。やべぇ、たっけぇってなる前に、昼間しか使わないものは夜間とか土日は停止しておきましょう。Webのサービスはなんでもそうですが、AWSもちょいちょい管理コンソールの画面とか表現が変わるので、直近、2023年4月現在の管理コンソールでの設定方法を備忘録にしておきます。
手順は下記のように進めます。
使用する画面はこの2つです。
- IAM Management Console
- Amazon EventBridge
以前はLambdaとか使ってましたが、今はEventBridgeだけでちゃちゃっとできます。
今回は、「平日(月曜~金曜)の朝8時に起動、夕方18時に停止」というスケジュールにして、土日と平日夜間は停止、昼間のみ利用するように組んで行きます。
設定開始
ロールを作る
自動停止と自動起動を行うためのロールを作成します。
IAM ManagementConsoleから、「アクセス管理」→「ロール」でロールの管理画面を開きます。画面右上の「ロールを作成」
カスタム信頼ポリシー
ロール作成の画面に移るので、まずは信頼されたエンティティタイプで、「カスタム信頼ポリシー」を選択します。
すると、すぐ下のポリシーがJSON形式で記述するものに変わります。
ので、下記のように編集します。Seviceだけ追加すればいいと思います。その後、次へ。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
許可ポリシー
続いて、「許可を追加」画面になります。
検索等を活用して、下記どちらかのポリシーを追加します。どっちでも大丈夫です。
- AmazonEC2FullAccess
- AmazonSSMAutomationRole
こんな感じでポリシー左側のチェックを入れて、「次へ」
ロールの作成完了
ロール名の設定と、諸々の確認画面になるので分かりやすい名前をつけて、画面下部の「ロールを作成」ボタンを押して作成を完了しましょう。今回の名前は適当に「Auto_stop_start_role」としました。
メッセージが表示され、ロールの一覧に表示されていれば成功です。
自動停止スケジュールを作る
続いて、スケジュールを作っていきます。停止と開始はそれぞれでスケジュールを作ります。まずは停止のスケジュールを作りましょう。別にどっちからでもいいんですけど。
EventBridgeの「スケジューラ」→「スケジュール」と遷移し、「スケジュールを作成」します。
スケジュールの設定
最初にスケジュールの名前を設定しますが、割愛します。適当にわかり易い名前をつけましょう。そのすぐに下にスケジュールを具体的に設定する部分があります。Linuxのcron式で記述します。こんな感じに設定しましょう。
これで月曜から金曜の間、毎日18時になったら処理が実行されます。ちなみに、ちゃんと日本時間なので、タイムゾーンを気にする必要はないです。たぶん最近そうなった。
すぐ下にトリガー日が表示されるので、それを見てスケジュールが問題ないか確認しましょう。「フレックスタイム」はとりあえずオフで。
他は特に設定する必要はないのでそのまま「次へ」
ターゲットの選択
次にスケジュールによって起動する処理とそのターゲットを指定します。先に停止したいEC2のインスタンスIDをコピーしておきましょう。「すべてのAPI」を選択して、検索を駆使してAmazonEC2の「StopInstances」を発見、クリックして選択します。
すぐ下のウィンドウで、停止したいインスタンスをJSONで記述します。ダブルクォーテーションでくくって、カンマ区切りで複数記述できます。いい感じに書けたら「次へ」
ロールの設定
他の設定画面に移ります。画面下の方のアクセス許可で、最初に作成したロールを設定します。「既存のロールを使用」を選択して、プルダウンリストで先程作成したロールを探しましょう。
スケジュールの作成完了
その後はスケジュールの確認と作成完了になります。表示されている内容を確認して問題なければ完了しましょう。
自動開始スケジュールを作る
停止と同じように作る
基本の作成方法は自動停止スケジュールと同じです。
開始スケジュールのcron式のサンプルを一応おいておきます。
ターゲットは、AmazonEC2の「StartInstances」を選択して、インスタンスIDをJSONに記述していきます。
動作確認
ここまでで一通りの設定は完了です。
あとは時間になって、指定したインスタンスが問題なく停止すること、次の日ちゃんと起動していることを確認します。
注意事項
インスタンスの「停止保護」が有効になっていると自動的に停止しません。一応確認しておきましょう。
まとめ
EC2インスタンスの費用は起動時間がほぼすべてみたいなもんです。本番環境のサービスであろうとも夜中は利用できなくていいサービスもいっぱいあると思います。起動と停止をうまく活用していい感じに節約しましょう。