Amazon EventBridge と AWS Systems Manager オートメーション を使用したEC2インスタンスの起動、停止の自動化

2022.08.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

自動的にEC2インスタンスを起動、停止することでEC2インスタンスの停止忘れや、 使わない時間は停止することにより使用量を減らすことができます。

今回は、Amazon EventBridge を使用したトリガーでAWS Systems Manager オートメーションを実行しEC2インスタンスの起動と停止する方法をご紹介します。

事前に、自動化したいEC2インスタンスを準備しておきます。 US West (Oregon) us-west-2で作成しました。 また、作業はAdministrator権限を持つIAMユーザーを使用しています。

image

IAM ロールを作成する

AWS managedのポリシーのAmazonSSMAutomationRoleを持つIAMロールを作成し、 EventBridgeがこのロールを実行できるようにTrust relationshipsを設定します。

Identity and Access Management (IAM)のコンソールで Roles -> Create Role から IAMロールを作成します。

image

Step 1 Select trusted entity

  • Trusted entity type: AWS service
  • Use case: EventBridgeを選択したいところですが、Step2の Add permissions でAWS managed policyを選択できないので、EC2を選択しNextをクリック。

image

Step 2 Add permissions

検索バーにAmazonSSMAutomationRoleと入力し、 AWS managedのポリシーのAmazonSSMAutomationRoleにチェックを入れNextをクリック。

image

Step 3 Name, review, and create

Role name: ec2-start-stop-role を入力し Create role をクリック。

image

IAM Roleが作成されたら、 View role をクリック、もしくは、Roles で ec2-start-stop-role を検索しクリック、 Amazon EventBridge がこのロールを使うことができるように Trust relationships を変更します。選択します。

image

Trust relationships -> Edit trust policy をクリック。

image

"Service": "ec2.amazonaws.com"

から、

"Service": "events.amazonaws.com"

に変更し、Update policyをクリック。

image

こちらで、IAMロールの作成は完了です。

Amazon EventBridge を設定する

次に、Amazon EventBridgeコンソールに移動してEventBridgeの設定をします。

平日9時にEC2インスタンスを起動するルールを作成します。

ナビゲーションペインで、Rules -> Create ruleをクリック。

image

Step 1 Define rule detail

  • Name: EC2-start-weekdays
  • Description - optional: Start EC2 at 9:00 a.m. on weekdays
  • Scheduleを選択し、Next

image

Step 2 Define schedule

Cron Expressionsを参考に平日9時に起動するcronを設定します。UTCで設定しますが入力するとLocal time zoneNext 10 trigger date(s)をローカル時間で確認することができます。 問題なければNextをクリックします。

0 16 ? * MON-FRI *

image

Step 3 Select target(s)

  • Target types: AWS service
  • Select a target: System Manager Automation
  • Document: AWS-StartEC2Instanceを選択します。
  • InstanceId: 複数インスタンスの場合は配列で入力します。
["i-***","i-***","i-***"]

image

  • Execution role: 先ほど作成したIAM Roleec2-start-stop-roleを選択し、Next

image

Step 4 - optional Configure tags

  • Next

image

Step 5 Review and create

設定を確認してCreate ruleをクリックして完了です。

image image

同様に毎日17時にEC2インスタンスを停止するルールを作成します。

こちらは設定内容だけ記載します。

Rules -> Create ruleをクリックし設定していきます。

Step 1 Define rule detail

  • Name: EC2-stop-weekdays
  • Description - optional: Stop EC2 at 5:00 p.m. on weekdays
  • Scheduleを選択

Step 2 Define schedule

  • 平日5時に停止するcronを設定します。0 0 ? * TUE-SAT *

Step 3 Select target(s)

  • Target types: AWS service
  • Select a target: System Manager Automation
  • Document: AWS-StopEC2Instance
  • InstanceId:
["i-***","i-***","i-***"]
  • Execution role: 先ほど作成したIAM Roleec2-start-stop-roleを選択

Step 4 - optional Configure tags

  • Next

Step 5 Review and create

  • Create rule

これで、起動、停止の Amazon EventBridge ルールの作成完了です。

image

実行確認

AWS Systems Managerコンソールで確認してみます。

AWS Systems Manager -> Automation から確認。

image

CloudTrail -> Event history から確認。

停止

image

起動

image

まとめ

Amazon EventBridgeとAWS Systems Manager オートメーションを使用したEC2インスタンスの自動化についてご紹介しました。 AWSナレッジセンターには Lambda を使用したEC2 インスタンスの起動、停止の方法がありますので 興味がある方はこちらもご覧ください。

ありがとうございました。

References