LoginSignup
6
0

More than 1 year has passed since last update.

Amazon EventBridgeを使ってEC2の状態変更(Stop)を検知しLambdaで自動起動を実行する。

Last updated at Posted at 2022-12-21

はじめに

アイレット株式会社 22新卒 Advent Calendar 2022に投稿される22日目の記事になります。

本記事は、Amazon EventBridge、Lambdaを使用しEC2の状態変更(Stop)を検知しLambdaで自動起動を実行するまでのハンズオンをまとめたものになります。
上記サービスに加え、IAMの概要を簡単に説明していきながら進めていきます。
また、AWS SOA試験ラボの対策にもなると思いますので、最後まで読んでいただけたら幸いです。

1. EC2インスタンスの起動

スクリーンショット_2022-12-13_22_15_50.png

2. Lambda関数を実行するためのIAM role, policy作成

IAM roleとはLambda等の様々なAWSサービスに対して付与するものと考えてください。付与することで、対象のAWSサービスがその権限を持って様々な処理を実行することができます。その際に、どのような処理を実行するのかということをIAM policyに記述し、IAM roleにアタッチすることで対象のAWSサービスがIAM policyに基づいた処理を実行することができるようになります。
今回は、LambdaにIAM roleを付与し、EC2インスタンスを起動するというIAM policyをIAM roleに付与します。
まずは、IAM policyを作成します。
スクリーンショット 2022-12-13 22.10.56.png
次にIAM roleを作成し、作成したIAM policyをアタッチします。
これで、lambdaがec2インスタンスに対してStartアクションを実行する権限を作成できたので、Lambda関数にこのIAM roleをアタッチしていきます。
スクリーンショット_2022-12-13_22_12_08.png

3. Lambda関数の作成

lambdaとはサーバーを準備することなくコードを実行できるサーバレスなサービスです。また、lambda APIを使用してlambda関数を呼び出したり、今回のように他のAWSサービスのイベントに応じたlambda関数を実行したりできます。
スクリーンショット 2022-12-13 22.20.32.png
インスタンスIDとRegionは適宜変更してください。

lambda_function.py
import boto3
region = 'ap-northeast-1'
instances = ['i-0be705780a4e875d1']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    print('started your instances: ' + str(instances))

4. EventBridgeの作成

イベントバスはデフォルトのままで大丈夫です。デフォルトイベントバスとは、現在使用しているAWSアカウント内のAWSサービスによって発生したイベント通知の受け皿的な役割を果たしています。なお、独自のアプリケーションからのイベントを監視したい場合は、カスタムイベントバスを作成する必要があります。
今回はデフォルトイベントバスを使用して、ルールを作成します。
ルールの機能はイベントパターンとターゲットの二つに分類されます。
イベントパターン:どのAWSイベントを監視するのかを指定する機能
ターゲット:検知したイベントに対して後続の処理を決定する機能
スクリーンショット 2022-12-13 22.29.37.png
スクリーンショット 2022-12-13 22.29.50.png
スクリーンショット 2022-12-13 22.30.13.png
スクリーンショット 2022-12-13 22.30.37.png

以上でEC2の停止をEventBridgeで検知し、lambdaで自動起動を実行する準備が整ったので、想定通りの動作になるかEC2インスタンスを停止させて確認したいと思います。

EC2インスタンスの停止

EventBridgeを実行させるためにEC2インスタンスを停止します。
スクリーンショット 2022-12-13 22.35.26.png

停止後に実施された自動起動の確認

こちらでEC2インスタンスの自動起動を確認していましたが、スクリーンショットでは伝わらないと思うので、下記でLambdaの実行ログのスクリーンショットを記載します。
スクリーンショット 2022-12-13 22.36.29.png

Lambdaの実行ログの確認

スクリーンショット 2022-12-13 22.39.32.png

終わりに

以上のように、 EventBridgeを使用してEC2の状態変更を検知し準備していたlambdaによって自動起動を実行することができました。
EventBridgeは豊富な機能を持っており、システムの開発・構築・運用の全ての段階で活躍できる素晴らしいサービスだと実感しました。

アドカレを企画し、Qiitaに記事を投稿する機会を作ってくれた@Michinosukeには感謝です:smiley:
アイレット株式会社 22新卒 Advent Calendar 2022企画の23日目は@haru-nkが担当です!
よろしくお願いします:smile:

参考
https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus-perms.html
https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-eventbridge/
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html

6
0
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
6
0