AWS EventBridgeスケジューラーでEC2の起動・停止を自動化する | アントレプログラマー

AWS EventBridgeスケジューラーでEC2の起動・停止を自動化する

AWS

こんにちは、ニキです。

今回の記事では、以下の疑問を解決します。

  • EC2インスタンスの料金を抑えるには?
  • EventBridgeスケジューラー用のIAMロールを作成するには?
  • EventBridgeスケジューラーでEC2の停止・起動を自動化するには?

EC2インスタンスは実行中のみ料金が発生するので、停止すればコストを抑えられます。主なユースケースとして、業務時間外の基幹システムや開発環境のインスタンスを停止させる等が考えられます。

注)EBS料金は停止中も発生します。

EC2インスタンスを自動停止・起動するために、EventBridgeスケジューラーを使用します。

EventBridgeスケジューラーの発表以前は、EventBridgeのルールを追加するのが一般的でした。これからは、ルールタイプがスケジュールであればEventBridgeスケジューラーを、イベントパターンを持つルールであればEventBridgeのルールを使うことをおすすめします。EventBridgeスケジューラーの方がより柔軟にスケジュールの設定が可能です。

それでは、解説していきます。

Takaharu Niki

・Webエンジニア6年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする

EC2を起動・停止するEventBridgeスケジューラー用IAMロールを作成

まず、IAMコンソールへ移動し、ロールを作成 を選択します。

信頼されたエンティティタイプとして、カスタム信頼ポリシーを選択します。

執筆時点(2023/9/16)ではAWSのサービスにEventBridgeスケジューラーは用意されていませんでしたが、今後追加されればAWSのサービスから選択する方が簡単です。

カスタム信頼ポリシーは以下のように設定します。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Effect": "Allow",
			"Principal": {
				"Service": "scheduler.amazonaws.com"
			},
			"Action": "sts:AssumeRole"
		}
	]
}

次へ を選択します。

許可ポリシーにAmazonEC2FullAccessを追加して、次へ を選択します。

本来は権限を弱くしたポリシーを作成する方がいいですが、今回は簡単のためにAmazonEC2FullAccessを使用します。

ロール名と説明を任意の内容で入力し、前ページで指定した内容に間違いがないかを確認します。

間違いなければ、ロールを作成 を選択します。

これで、IAMロールは作成できました。

EventBridgeスケジューラーでEC2の停止を自動化する

EventBridgeスケジューラーのコンソールへ移動し、スケジュールを作成 を選択します。

スケジュール名と説明に任意の値を入力します。

以下のように設定します。

  • 頻度: 定期的なスケジュール
  • スケジュールの種類: cronベースのスケジュール
  • cron式: 0 22 ? * * *。業務要件に合わせて任意の値に変更します。
  • フレックスタイムウィンドウ: オフ

時間枠については、デフォルトから変更ありません。

次へ を選択します。

APIとしてStopInstancesを選択すると、EC2インスタンスの自動停止ができます。

以下のようにインスタンスIDを指定し、次へ を選択します。

今回は1インスタンスだけですが、複数指定も可能です。

以下のように設定します。

  • スケジュールの状態: 有効化。作成直後からスケジュールしたいかどうかで判断します。
  • スケジュール完了後のアクション: DELETE。今回はスケジュールに期限がないので、選択内容による差分はありません。

デフォルトから変更ありません。

さきほど作成したIAMロールを指定して、次へ を選択します。

設定内容を確認し、問題なければ スケジュールを作成 を選択します。

以下のように作成できました。

EventBridgeスケジューラーでEC2の起動を自動化する

続いて、自動起動させるために スケジュールを作成 を選択します。

使用するAPIだけ異なりますが、自動停止と要領は同じなので省略します。

APIはStartInstancesです。

これで自動起動の設定も完了です。おつかれさまでした。

まとめ

今回の記事では、以下の疑問を解決できるように、執筆しました。

  • EC2インスタンスの料金を抑えるには?
  • EventBridgeスケジューラー用のIAMロールを作成するには?
  • EventBridgeスケジューラーでEC2の停止・起動を自動化するには?
Takaharu Niki

・Webエンジニア6年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする
AWS
Takaharu Nikiをフォローする
アントレプログラマー
タイトルとURLをコピーしました