痛いところは煙に巻く

製造業のしがない社内SEが日記代わりにいろいろ書く

Hello,World

Üben Sie es nur recht fleißig, so wird es schon gehen

【AWS】 費用節約のためEC2を夜間停止する2023年4月版【備忘録】

おはこんばんにちは、ビショップです。

AWS、高いですよね。毎月の費用に辟易しております。やべぇ、たっけぇってなる前に、昼間しか使わないものは夜間とか土日は停止しておきましょう。Webのサービスはなんでもそうですが、AWSもちょいちょい管理コンソールの画面とか表現が変わるので、直近、2023年4月現在の管理コンソールでの設定方法を備忘録にしておきます。

手順は下記のように進めます。

使用する画面はこの2つです。

  • IAM Management Console
  • Amazon EventBridge

以前はLambdaとか使ってましたが、今はEventBridgeだけでちゃちゃっとできます。
今回は、「平日(月曜~金曜)の朝8時に起動、夕方18時に停止」というスケジュールにして、土日と平日夜間は停止、昼間のみ利用するように組んで行きます。

設定開始

ロールを作る

自動停止と自動起動を行うためのロールを作成します。
IAM ManagementConsoleから、「アクセス管理」→「ロール」でロールの管理画面を開きます。画面右上の「ロールを作成」

IAM
カスタム信頼ポリシー

ロール作成の画面に移るので、まずは信頼されたエンティティタイプで、「カスタム信頼ポリシー」を選択します。

信頼されたエンティティタイプ

すると、すぐ下のポリシーがJSON形式で記述するものに変わります。

カスタム信頼ポリシー

ので、下記のように編集します。Seviceだけ追加すればいいと思います。その後、次へ。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
許可ポリシー

続いて、「許可を追加」画面になります。

許可を追加

検索等を活用して、下記どちらかのポリシーを追加します。どっちでも大丈夫です。

  • AmazonEC2FullAccess
  • AmazonSSMAutomationRole

こんな感じでポリシー左側のチェックを入れて、「次へ」

ロールの作成完了

ロール名の設定と、諸々の確認画面になるので分かりやすい名前をつけて、画面下部の「ロールを作成」ボタンを押して作成を完了しましょう。今回の名前は適当に「Auto_stop_start_role」としました。

ロールの詳細

メッセージが表示され、ロールの一覧に表示されていれば成功です。

自動停止スケジュールを作る

続いて、スケジュールを作っていきます。停止と開始はそれぞれでスケジュールを作ります。まずは停止のスケジュールを作りましょう。別にどっちからでもいいんですけど。

EventBridgeの「スケジューラ」→「スケジュール」と遷移し、「スケジュールを作成」します。

EventBridge
スケジュールの設定

最初にスケジュールの名前を設定しますが、割愛します。適当にわかり易い名前をつけましょう。そのすぐに下にスケジュールを具体的に設定する部分があります。Linuxのcron式で記述します。こんな感じに設定しましょう。

停止スケジュール

これで月曜から金曜の間、毎日18時になったら処理が実行されます。ちなみに、ちゃんと日本時間なので、タイムゾーンを気にする必要はないです。たぶん最近そうなった。
すぐ下にトリガー日が表示されるので、それを見てスケジュールが問題ないか確認しましょう。「フレックスタイム」はとりあえずオフで。

他は特に設定する必要はないのでそのまま「次へ」

ターゲットの選択

次にスケジュールによって起動する処理とそのターゲットを指定します。先に停止したいEC2のインスタンスIDをコピーしておきましょう。「すべてのAPI」を選択して、検索を駆使してAmazonEC2の「StopInstances」を発見、クリックして選択します。

ターゲットの選択

すぐ下のウィンドウで、停止したいインスタンスをJSONで記述します。ダブルクォーテーションでくくって、カンマ区切りで複数記述できます。いい感じに書けたら「次へ」

ロールの設定

他の設定画面に移ります。画面下の方のアクセス許可で、最初に作成したロールを設定します。「既存のロールを使用」を選択して、プルダウンリストで先程作成したロールを探しましょう。

アクセス許可
スケジュールの作成完了

その後はスケジュールの確認と作成完了になります。表示されている内容を確認して問題なければ完了しましょう。

自動開始スケジュールを作る

停止と同じように作る

基本の作成方法は自動停止スケジュールと同じです。
開始スケジュールのcron式のサンプルを一応おいておきます。

ターゲットは、AmazonEC2の「StartInstances」を選択して、インスタンスIDをJSONに記述していきます。

動作確認

ここまでで一通りの設定は完了です。
あとは時間になって、指定したインスタンスが問題なく停止すること、次の日ちゃんと起動していることを確認します。

注意事項

インスタンスの「停止保護」が有効になっていると自動的に停止しません。一応確認しておきましょう。

まとめ

EC2インスタンスの費用は起動時間がほぼすべてみたいなもんです。本番環境のサービスであろうとも夜中は利用できなくていいサービスもいっぱいあると思います。起動と停止をうまく活用していい感じに節約しましょう。

スポンサーリンク