5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS EC2インスタンスの起動・停止をスケジュール実行してみた

Posted at

はじめに

テスト環境など、常時起動しておく必要のないインスタンスは、コスト削減の観点などから、決まった時間に起動、停止するようにしたいと考える人は多いと思います。

以前は、λでコードを書いたりする必要があったりしましたが、最近では、CloudWatch Eventsの後継のEventBridgeとSystemsManagerのオートメーションドキュメントを利用する事で、簡単にEC2インスタンスのスケジュール実行ができるようになっているので、改めて確認してみました。

IAMロールの作成

事前にIAMロールを作成しておきます。
image.png
EventBridgeには、オートメーションドキュメントとパラメータを使用して、SSM Start Automation Execution を呼び出すための権限が必要です。

EventBridgeで自動起動・停止設定をする際に、必要なロールを自動作成できるような選択肢がありますが、それだけではSystemsManagerのオートメーションが起動できずエラーになります。

必要なロールを作成していきます。
image.png
信頼されたエンティティを選択で、「カスタム信頼ポリシー」を選択し、エディターで以下のように編集します(Principalに"Service": "events.amazonaws.com"を追記)。

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

編集後、「次へ」をクリックします。
image.png
許可を追加で、AWS管理ポリシーAmazonSSMAutomationRoleを追加し、「次へ」をクリックします。
image.png
ロール名を入力(この例では「events-ssm-ec2-start-and-stop-role」)し、信頼されたエンティティ、追加する許可ポリシーを確認後、「ロールを作成」をクリックします。

EC2インスタンスの自動起動設定

EventBridgeで、イベントルールを作成します。
image.png
まず、インスタンスの起動ルールを作成していきます。
image.png
以下のように設定し、「次へ」をクリックします。

  • 名前:「EC2-instance-Start」※任意
  • イベントバス:default
  • ルールタイプ:スケジュール

image.png
スケジュールを定義していきます。

スケジュールパターンには、「特定の時刻(毎月第1月曜日の午前8時(PST)など)に実行されるきめ細かいスケジュール」を選択し、Cron式でスケジュールのCron式を定義します。

この例では、「2022年の8月、9月の月曜日から金曜日の日本時間10時」を指定しました。

※Cron式については、以下を参照してください。

Cron式の指定が正しい場合、以後10回のトリガー日に指定した日時が表示されます。何も表示されない場合、Cron式の指定が間違っているので、指定内容を見直してみてください。

次に、イベント発生時に実行するターゲットを指定します。
image.png
ターゲットには、以下を設定します。

項目 設定値
ターゲットタイプ AWSのサービス
ターゲットを選択 System Manager オートメーション
ドキュメント AWS-StartEC2Instance
ドキュメントのバージョン デフォルト

続いて、パラメータの設定と実行ロールを指定します。
image.png
自動化パラメータを設定で、「定数」を選択し、InstanceIdに起動させたいインスタンスのインスタンスIDを指定します。

複数のインスタンスIDを指定したい場合は、["i-XXXXXXXXXXXXXXXXX", "i-YYYYYYYYYYYYYYYYY"] のように指定します。

実行ロールには、事前に作成しておいた既存のロール、「events-ssm-ec2-start-and-stop-role」を選択します。

全ての設定が終わったら、「次へ」をクリックします。
image.png
必要に応じてタグを設定します。

最後に、レビューと作成で設定内容を確認します。
image.png
image.png
ルールタイプおよびスケジュール設定、ターゲットの設定に問題が無ければ、ルールを作成します。

EC2インスタンスの自動停止設定

インスタンスの起動ルールと同様に、停止ルールを作成します。
image.png
以下のように設定し、「次へ」をクリックします。

  • 名前:「EC2-instance-Stop」※任意
  • イベントバス:default
  • ルールタイプ:スケジュール
    image.png
    スケジュールを定義します。
    この例では、「2022年の8月、9月の月曜日から金曜日の日本時間22時」を指定しました。
    image.png
    ターゲットには、以下を設定します。
項目 設定値
ターゲットタイプ AWSのサービス
ターゲットを選択 System Manager オートメーション
ドキュメント AWS-StopEC2Instance
ドキュメントのバージョン デフォルト

image.png
自動化パラメータを設定で、「定数」を選択し、InstanceIdに停止させたいインスタンスのインスタンスIDを指定します。

複数のインスタンスIDを指定したい場合は、["i-XXXXXXXXXXXXXXXXX", "i-YYYYYYYYYYYYYYYYY"] のように指定します。

実行ロールには、事前に作成しておいた既存のロール、「events-ssm-ec2-start-and-stop-role」を選択します。

全ての設定が終わったら、「次へ」をクリックします。

必要に応じてタグを設定し、レビューと作成で設定内容を確認します。
image.png
image.png
設定内容に問題が無ければ、ルールを作成します。

動作確認

管理コンソールのEC2のインスタンス一覧で、ターゲットに指定したインスタンスが、指定した時間に起動、停止するかを確認します。

もしくは、Systems managerのオートメーションからも確認する事ができます。
image.png
指定した時間にオートメーションドキュメントが実行され、ステータスが「成功」になっていれば、動作確認完了です。

おわりに

EC2インスタンスの起動・停止をスケジュール実行してみました。

AWSのサービス改善により、以前より簡単に設定ができるようになっている事が確認できました。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?