3
2

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.

Amazon EventBridgeでスケジュールを有効化・無効化!(おまけ付き)

3
Posted at

はじめに

 以下の記事でAmazon EventBridge Schedulerの有効化・無効化を行いました。この有効化・無効化をEC2の状態で変更したいです。例えば、EC2が起動したら有効化、EC2が停止したら無効化、というように。
 しかも、人の手を介さずに自動で行いたいです。

アーキテクチャ

 さて、どうしたものか。単純に考えると、こんな感じでしょうか。

名称未設定-eventbridge.drawio.png

 定期的にLambdaを実行
  → EC2の状態を確認
    → Amazon EventBridge Schedulerを有効化/無効化

 ということは考えられますが、Lambdaの費用は発生しますし、イベント駆動ではないですね。もっとシンプルにEC2の状態が変わった時に処理したい、そんなあなたにAmazon EventBridgeのイベントパターンを持つルールです。

名称未設定-ページ5.drawio.png

Amazon EventBridgeとは

 AWSサービス、独自アプリケーション、Software as a Service (SaaS) アプリケーションのデータの変更を検知して、次の処理へ繋ぐサービスになります。EventBridgeにもいくつか機能がありますが、今回はルールを使用します。

Amazon EventBridge Rules

 ルールはイベントパターンと呼ばれるイベントの構造、またはスケジュールのいずれかに基づいて、イベントを次の処理(ターゲット)へ繋げます。今回でいうと、EC2の状態変化に伴うイベントが、「EC2起動」状態かというルールに合致した際に、Amazon EventBridge Schedulerを有効化する、という流れになります。

「Amazon EventBridgeのイベントパターン」のページに記載がありますが、イベントによってAWSリソースの自動修復するような仕組みを使った場合でバグっていると無限ループになるので、気をつけてね、とありました。気をつけましょう。。利用料の閾値超過のアラーム設定は忘れずに!

やってみる

 では、実際にやってみます。実現する内容は「EC2が起動したら、スケジュールを有効化する」です。

ルール設定

 Amazon EventBridgeのページより、左メニューの「バス」-「ルール」を選択後、「ルールを作成」をクリックします。

image.png

ルールの詳細

 次にルールの名前、イベントバス(今回は、default)、ルールタイプ「イベントパターンを持つルール」を選択します。

image.png

イベントソース

 次にイベントソースで「AWSイベントまたはEventBridgeパートナーイベント」を選択します。

image.png

 イベントソースの下の欄には、サンプルイベント - オプションがあります。ここでAWSイベント等を確認することができます。

スクリーンショット 2023-03-16 18.25.31.png
 
 例えば、EC2のイベントを選択すると以下のように確認することができます。これ便利です。どうやって設定したら良いかわからない時は、これですね。

スクリーンショット 2023-03-16 18.27.29.png

作成のメソッド

 今回は、「パターンフォームを使用する」を選択します。

image.png

イベントパターン

 次にイベントパターンでイベントソース、イベントタイプ、状態、対象を選択することで、右枠に表示されるようにイベントパターンを作成することができます。めっちゃ簡単です。

スクリーンショット 2023-03-16 18.37.09.png

 イベントソースとして「AWSのサービス」を選択すると、サービスの選択肢がながーくでてきます。EventBridgeパートナーを選択しても数多くのサービスが選択できます。使いたいものがあるか見てみてください。
image.png

 イベントタイプについては、EC2の状態をトリガーにしたいので、今回は「EC2 Instance State-chage Notification」を選択しました。
image.png

 さらに、特定の状態を選択できまして、状態の一覧が出てきます。複数選択可能です。
image.png

 最後は、トリガーとしたいインスタンスを設定します。これだけでできるとは。

ターゲット

 次にターゲットの設定を行います。ターゲットは複数設定もできますが、今回は1つだけ設定します。複数設定する場合は、1番下に「別のターゲットを追加」というボタンがありますので、クリックして追加してください。

 今回は、以下の記事で作成したAWS Systems Manager Automationのドキュメントをターゲットとします。

image.png

タグ

 必要に応じてタグを追加してください。

スクリーンショット 2023-03-16 19.02.27.png

レビューと作成

 最後に設定内容を確認して、「ルールの作成」をクリックして、完成です。

スクリーンショット 2023-03-16 19.07.45.png

できあがり

 ルールができあがりました。

スクリーンショット 2023-03-16 19.12.09.png

実行結果

 動作を確認してみます。まずは、有効化するAmazon EventBridge Schedulerのスケジュールの状態が「無効」であることを確認します。

スクリーンショット 2023-03-16 19.14.23.png

 次にトリガーとなるEC2を起動します。
スクリーンショット 2023-03-16 19.16.13.png

 停止状態から起動!
スクリーンショット 2023-03-16 19.17.04.png

 起動しました。
image.png

 無事、有効化されました!めでたしめでたし。
image.png

まとめ

 単純に考えると、LambdaとEventBridgeで実現できそうなことがEventBridgeだけ実現できました。最初は、難しそうだなーと思っていたのですが、AWSマネジメントコンソール上でやってみると結構簡単でした。AWSのサービスを活用できれば、いろいろ便利になりますし、費用も低減できるので、どんどん活用したいですね。
 

おまけ

 Amazon EventBridgeのルールを作成すると、なんとCloudFormationテンプレートが生成できるのです。
 ルールのページで生成したいルールを選択し、「CloudFormation テンプレート」より、JSONまたはYAMLを選択します。

スクリーンショット 2023-03-16 19.49.29.png
image.png

 YAMLを選択すると、以下が表示され、コピーまたはダウンロードが可能です。これまた便利ですね。

スクリーンショット 2023-03-16 19.50.31.png

CloudFormation テンプレート

 
 ダウンロードしたテンプレートを載せておきます。(※一部、マスキング)

EventBridgeRules.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: CloudFormation template for EventBridge rule 'enable-scheduler'
Resources:
  EventRule0:
    Type: AWS::Events::Rule
    Properties:
      EventBusName: default
      EventPattern:
        source:
          - aws.ec2
        detail-type:
          - EC2 Instance State-change Notification
        detail:
          state:
            - running
          instance-id:
            - i-XXXXXXXXXX [EC2のインスタンスIDを指定します。]
      Name: enable-scheduler
      State: ENABLED
      Targets:
        - Id: Id17fc9703-d2e2-446a-9f7b-db3f50ca2c2b
          Arn: >-
            arn:aws:ssm:ap-northeast-1:[アカウントID]:automation-definition/ChangeStateEventBridgeScheduler:$DEFAULT
          RoleArn: >-
            arn:aws:iam::[アカウントID]:role/service-role/Amazon_EventBridge_Scheduler_LAMBDA [Automation実行用Role]
          Input: '{"SchedulerName":["execute-sync"],"State":["ENABLED"]}'

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?