LoginSignup
0
0

More than 1 year has passed since last update.

LambdaによるEC2のステータスチェックの構築

Posted at

はじめに

EC2が停止した場合にチェックをするLambdaを構築してみました。
本当はDirectConnectのStatusチェックをしてみようと考えてたのですが、会社の環境にDirectConnectの構築がなかったもので、まず手始めにEC2のStatusチェックをするLambdaを構築しました。

構築概要図

リソース構築

"state"を取得しようとしているEC2の構築はスコープ外にします

Lambdaの構築(デフォルトからの変更部分のみ記述)

IAMロール

既存のCloudWatchのロールに追加して、AWS管理のAmazonEC2ReadOnlyAccessを付与(下記画像あり)

コード部分

import boto3

def lambda_handler(event, context):
    ec2 = boto3.client('ec2')

#取得したいEC2のインスタンスの情報を入力(i-XXXXXXXXXX)部分は自分のEC2リソースを確認して入力
    mystatus= ec2.describe_instances(
        Filters=[{'Name':'instance-id', 'Values':['i-XXXXXXXXXX']}] 
    )["Reservations"][0]["Instances"][0]['State']['Name'] 
    print(mystatus)

CloudWatchLogs

Lambdaの出力ログについての画面(EC2が停止中の状態での画面)

停止しているのでLambdaでStateを取得していると、赤枠のような”stopped”が出力される

メトリクスフィルターの設定

ログの"stopped"をメトリクスフィルターに設定して、CloudWatchアラームに紐づけます

CloudWatchの設定内容

"stopped"をトリガーにしてアラームへ通知がなされ、1度以上の場合にアラームを鳴らすように設定しました。
他にもSNSを利用してメールを通知するなども設定が可能です(スクショ撮り忘れ)。

CloudWatchアラームでの見え方

上記設定後にLambdaを動かしてみると、アラーム状態に表示が変更されることが確認できました。

SNSを利用した通知メール

こちらにもアラームが鳴っていることが通知されています。

さいごに

定期的に動作させるためにEventBridgeのCronを利用すれば良さそうです。
DirectConnectの場合ならclient = boto3.client('directconnect')にLambdaを変更すれば、ステータスを確認することも問題なさそうです。

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