0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

☁️ AWS Lambda と EventBridge で EC2 を毎晩自動停止する手順

Posted at

📌 概要

AWS上で動いているEC2を AWS Lambda と EventBridge で毎晩自動停止する仕組みを作ります。

📌 なぜ作ろうと思ったのか

プライベートの開発で利用しているインスタンスを立ち上げっぱなしにしていたところ、 1週間で約 120ドル(=約18,000円)の請求額となりました 😱

「やばい、これ無駄すぎる...」と思い、夜中の午前3時に全インスタンスを自動で停止することにしました。

📌 手順の全体像

  1. IAMロールを設定
  2. Lambda関数を作成
  3. EventBridge Schedulerで定期実行を設定(毎日3時に実行)

📌 Step 1. IAMロールを作成

Lambda 専用の IAM ロール lambda-ec2-stop-role を新規作成します。

項目 設定値
サービス Lambda
ロール名 lambda-ec2-stop-role
アタッチするポリシー AWSLambdaBasicExecutionRole, AmazonEC2FullAccess

image.png

image.png

📌 Step 2. Lambda関数を作成

全ec2を停止するLambda関数を作成します。

設定項目

項目 設定値
サービス名 AWS Lambda
関数名 stop-ec2
ランタイム Python 3.x
アーキテクチャ arm64
実行ロール 既存のロールを使用する
既存のロール lambda-ec2-stop-role

コードソース

import boto3

def lambda_handler(event, context):
    ec2 = boto3.client('ec2', region_name='ap-northeast-1')
    instances = ec2.describe_instances(
        Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]
    )

    ids = []
    for reservation in instances['Reservations']:
        for instance in reservation['Instances']:
            ids.append(instance['InstanceId'])

    if ids:
        ec2.stop_instances(InstanceIds=ids)
        print(f"Stopped instances: {ids}")
    else:
        print("No running instances found.")

    return {"statusCode": 200, "body": "EC2 stop process complete"}

image.png

📌 Step 3. EventBridge Scheduler で自動実行

Lambda 関数 stop-ec2 を毎日自動で実行するために EventBridge Scheduler でスケジュールを作成します。

項目 設定内容
スケジュール名 daily-stop-ec2
説明 毎日EC2を自動停止するスケジュール
スケジュールタイプ 定期的なスケジュール
スケジュール方式 cron ベースのスケジュール
cron式 cron(0 3 * * ? *)(毎日 午前3時 JST)
タイムゾーン Asia/Tokyo (UTC+09:00)
開始日時 2025/10/14 00:00
終了日時 指定なし(無期限)
フレックスタイムウィンドウ オフ
ターゲットサービス AWS Lambda
Lambda関数 stop-ec2
ペイロード 空欄(不要)
スケジュールの状態 有効
スケジュール完了後のアクション なし(削除しない)
再試行ポリシー 有効(最大24時間再試行)
デッドレターキュー(DLQ) なし
暗号化 デフォルト(AWS管理キー)
アクセス許可ロール 既存のロールを使用 → lambda-invoke-role

image.png

image.png

image.png

image.png

image.png

📌 まとめ

これで「うっかりEC2つけっぱなし課金」とおさらばできます 🚀

夜中にこっそり動く仕組みを、今日からあなたの環境にも 💪

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?