Lambda と EventBridge で EC2 インスタンスを自動的に停止してみた
はじめに
こんにちは!
アノテーション界の赤井直正、香園紳瑛(かぞの しんえい)です!
AWS Certified SysOps Administrator - Associate 試験の定番アーキテクチャである、Lambda と EventBridge で EC2 インスタンスを自動的に停止してみた ので紹介します。
ハンズオン
Step1. Lambda 関数の作成
- Lambda を検索し、関数の作成 を押す
- 関数名とランタイム(今回は
Python 3.12
で実行)を入力 & アーキテクチャ arm64 を選択し、関数の作成 を押す
- コードセクションで EC2 インスタンスを停止させるコードを
lambda_function.py
ファイルに入力し、Deploy を押す
インスタンスを停止する Python コード for Lambda
import boto3
def lambda_handler(event, context):
# EC2クライアントを作成
ec2 = boto3.client('ec2')
# 停止したいインスタンスのIDを指定
instance_id = 'i-1234567890abcdef0' # これを実際のインスタンスIDに置き換えてください
try:
# インスタンスを停止
response = ec2.stop_instances(InstanceIds=[instance_id])
print(f"Stopping EC2 instance: {instance_id}")
print(f"Response: {response}")
return {
'statusCode': 200,
'body': f'Successfully initiated stop for instance {instance_id}'
}
except Exception as e:
print(f"Error stopping instance {instance_id}: {str(e)}")
return {
'statusCode': 500,
'body': f'Error stopping instance {instance_id}: {str(e)}'
}
- 設定セクションの アクセス権限 を選択し、ロール名のリンクを押し、許可を追加 から ポリシーをアタッチ を選択
- AmazonEC2FullAccess を検索し、許可を追加 を押す
- 手順 5 のリンクの上にある 編集 を押し、タイムアウトを
10
秒に設定
Step2. EventBridge ルールの作成
- EventBridge を検索し、スケジューラセクションの スケジュール を選択し、スケジュールを作成 を押す
- スケジュール名 とその 説明 を入力
- 定期的なスケジュール と
cron
ベースのスケジュール を選択し、cron
式を入力して 次へ を押す(例:毎日 17:15 に停止する cron 式)
- ターゲットで AWS Lambda を Invoke で 自分で作成した Lambda 関数 を選択して 次へ を押す
- スケジュール完了後のアクションで NONE を選択して 次へ を押す
- 設定に不備がなければ スケジュールを作成 を押す
- 指定した時間に EC2 インスタンスが停止しているか確認
さいごに
これで AWS Certified SysOps Administrator - Associate 試験の合格確定ですね。
長く険しい道のり、大変お疲れ様でした。
君に幸せあれ!
最後までありがとうございました!
また会いましょーう!
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。