Amazon EventBridgeで任意時間にEC2を停止させる

AWS
この記事は約5分で読めます。
記事内に広告が含まれています。

初歩的な内容となりますが、今回は「EventBridge」を利用して、任意EC2を任意時刻に停止させる方法をご紹介します。

昼間、不定期で開始させるEC2があるのだけど、停止忘れを防ぐために「毎日17時に必ず停止させたい・・・。」

Amazon EventBridge

Amazon EventBridge はサーバーレスイベントバスであり、アプリケーション、統合された Software-as-a-Service (SaaS) アプリケーション、および AWS のサービスから生成されたイベントを使用して、イベント駆動型アプリケーションを大規模に構築することを容易にします。

Amazon EventBridge (サーバーレスイベントバスでアプリ同士を簡単に接続) | AWS
Amazon EventBridge は、独自のアプリケーション、SaaS アプリケーションや AWS のサービスからデータを取り込み、そのデータをターゲットにルーティングする、サーバーレスイベントバスです。

ということで、今回はEventBridge内のcronによってイベントを発火させて、任意EC2を停止させます。

設定方法

次の流れで進めます。

  1. EventBridgeのルールで利用するIAMロールを作成
  2. EventBridgeでルールを作成

EventBridgeのルールで利用するIAMロールを作成

事前に、ルール登録の際に必要なIAMロールを作成しておきます。(EventBridgeから呼び出せて、EC2停止操作等が行えるIAMロールとなります。)

★以降、実際の手順です。
IAMメニューより「ロールを作成」をクリックし、ステップ毎に進めていきます。

■ステップ1

  • 信頼されたエンティティ:AWSサービス
  • ユースケースの選択:EC2
ロールを作成します。

■ステップ2

  • ポリシー選択:AmazonSSMAutonationR
ポリシーを選択。

■ステップ3

お好みでタグを設定してください。

■ステップ4

ロール名を入力して作成を完了させます。


続いて、作成したIAMロールに対して信頼関係「events.amazonaws.com」を追加していきます。(本操作が抜けるとEventBridgeのルール作成におけるロール選択肢に表示されません

作成したロールを表示し「信頼関係」タブ→ 「信頼関係の編集」をクリックします。

信頼関係の編集をクリック。

以下のように「”Service”: “events.amazonaws.com”」を追加して信頼ポリシーの更新を行います。(直前の行に「,」も忘れずに追加します。)

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

次のように「IDプロバイダー events.amazonaws.com」が追加されればOKです。

追加されたことを確認します。

以上で「IAMロール」の作成完了です。

EventBridgeでルールを作成

続いて「Amazon EventBridge」サービスでEC2停止用のルールを作成していきます。

ルールメニューより「ルールを作成」をクリックします。

ルール画面。

パターンを定義において、

  • 「スケジュール」を選択します。
  • 「Cron式」を選択してCRON式を入力します。「10 08 ? * * *」の場合は、毎日17時10分(JST)にルールが発動します。
スケジュールとcronの設定。

「イベントバスを選択」は特に変更しません。

イベントバスは変更なし。

ターゲット選択では次のようにします。

  • ターゲット:Systems Manager オートメーション
  • ドキュメント:AWS-StopEC2Instance
  • 定義@InstanceId:対象EC2のインスタンスIDを入力します。[“インスタンスID”] のように入力します。また、[“インスタンスID1”, “インスタンスID2”]のようにカンマ区切りで複数インスタンスを指定することも出来ます!
ターゲットの設定。

ロールの部分は「既存のロールを使用」を選択し、先ほど作成したIAMロールを選択します。(ここでロールが選択できない場合はIAMロールに信頼関係が与えられていません)

ロールの選択。

設定は以上となります。後は時間になると、EC2停止APIがコールされ、該当EC2が停止されます。

ありがたい(これで無駄に課金して怒られることも減るかな)

補足説明

・EC2「開始」の場合は別途イベントを作成し、ターゲットのドキュメント指定部で「AWS-StartEC2Instance」を選択して後は同じように設定すればOKです。IAMロールは使いまわし可能です。

・開始と停止用のイベントを組み合わせることで毎日決まった時間(営業時間など)にEC2を稼働させることが出来ます。

・停止済みEC2に対して、停止命令が発行されても問題は生じません。(逆に、開始済みEC2に対して、開始命令も同様に問題なし。)

まとめ

Amazon EventBridgeを利用したEC2停止方法について記載しました。簡単に設定できるため稼働時間管理の観点でも使いこなせるようになると便利です。

最後までご覧いただき、ありがとうございました。

コメント

Top
タイトルとURLをコピーしました