Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Lambdaで社内AWS環境のリソース棚卸を効率化してみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
武田麻奈
July 27, 2024
480
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Lambdaで社内AWS環境のリソース棚卸を効率化してみた
武田麻奈
July 27, 2024
More Decks by 武田麻奈
See All by 武田麻奈
Comparison of Amazon API Gateway access control methods
manatakeda
0
32
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
210
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
170
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
Deep Space Network (abreviated)
tonyrice
0
210
Thoughts on Productivity
jonyablonski
76
5.2k
Discover your Explorer Soul
emna__ayadi
2
1.1k
The Invisible Side of Design
smashingmag
301
52k
Docker and Python
trallard
47
3.9k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
740
Transcript
Lambdaで社内AWS環境の リソース棚卸を効率化してみた 2024/07/24 JAWS-UG 初心者支部#61 武田麻奈
自己紹介 名前:武田 麻奈(たけだ まな) 社会人歴:3年目 業務: • OSSを使用した認証、ID管理システム構築支援 • API
Gateway(OSS)の調査 • 部内の検証環境のAWSを整備 その他: • 2024 Japan AWS Jr. Champions
皆さんの利用しているAWS環境に 不要なリソースはありませんか? • 私の使っている部内のAWS環境にはたくさんあります。 • 社内などで検証用やトレーニング用に用意されたAWS環境は、 多くのユーザに様々な目的で利用されており、 放置しておくと不要なリソースが増え続けます。 • 今回はそんな環境で、定期的なリソースの棚卸を自動化することで、
管理効率を上げたお話をします。
棚卸を自動化しようと思った経緯 • 棚卸をするにあたってのネック • 単純作業だが、作業量が多い(複数環境実施する必要がある)。 • 定期的に実行する必要がある。 • 作業内容を引き継いでいくことを考えると、棚卸手順を作成する必要がある。 →
引継ぎ手順書を作るなら、手順を自動化してロボットにやってもらおう!
リソースごとの棚卸方法 リソース 棚卸方法 EC2インスタンス 利用者に以下を依頼: • 使用中のもの → 使用しない期間(夜間や休日)は自動停止などを検討 •
直近で使用しないもの → AMI化 • 不要なもの → 削除 AMI 利用者に以下を依頼: • 不要なもの → 削除 EBSボリューム EC2インスタンス棚卸後に、 • 不要のもの → 管理者が削除 ※今回はNameタグが付いていないものを不要とする EBSスナップショット AMI棚卸後に、 • 不要なもの → 管理者が削除 ※今回はNameタグが付いていないものを不要とする RDS 利用者に以下を依頼: • 不要なもの → 削除 • 直近で使用しないもの → 自動停止
EC2インスタンスとEBSボリューム、 AMIとEBSスナップショットの棚卸について • EC2インスタンスとEBSボリュームの関係 • EC2インスタンス作成時に、EBSボリュームが自動作成される。 • 基本的にEC2インスタンスの削除時にEBSボリュームは自動削除されるが、 自動削除しない設定にしたものは残り続ける。 •
AMIとEBSスナップショットの関係 • AMI作成時に、EBSスナップショットが自動作成される。 • AMIを削除しても関連付けられているEBSスナップショットは削除されない。 →自動作成後、自動削除されないものは、 本人すら分からない管理者不明のボリュームやスナップショットとなってしまう。 →誰も削除する判断ができないので、管理者が消してしまおう。 ↑管理コンソールから見ても、自動作成されたものは、どこで何のために利用されているリソースか分かりづらい。
自動化する内容 チャットへ棚卸の 依頼連絡を送る チャットへ棚卸〆切の リマインドを送る (棚卸でEC2インスタンスやAMIが削除された後に) EBSボリューム、スナップショットを自動削除する 半年ごとに 繰り返す
構成図 社内チャット Lambda (社内チャット通知用) Lambda (棚卸用) EventBridge 棚卸依頼やリマインド のメッセージ送信 不要なEBSボリューム、
EBSスナップショット削除
通知内容
ソースコード # =============================EC2インスタンス============================= # 棚卸条件:最終起動日が180日以上前。 ec2 = boto3.client('ec2') ec2_instances_response =
ec2.describe_instances() ec2_instances = [] for reservation in ec2_instances_response["Reservations"]: for instance in reservation["Instances"]: launch_time = instance["LaunchTime"] if (now - launch_time).days > 180 or instance["State"]["Name"] == "running": ec2_instances.append({ "name": get_tag_value("Tags", instance, "Name"), "id": instance["InstanceId"], "project": get_tag_value("Tags", instance, "Project"), "state" : instance["State"]["Name"], "launch_time": instance["LaunchTime"], }) instances_sorted = sorted(ec2_instances, key=lambda x: (x['project'], x['name'])) ec2_instances_table = ( "| インスタンス名 | インスタンスID | プロジェクトタグ | 状態 | 最終起動日時 | ¥¥n" "| --- | --- | --- | --- | --- | ¥¥n " ) for i in instances_sorted: link_id = "[" + i["id"] + "](https://ap-northeast-1.console.aws.amazon.com/ec2/home?#InstanceDetails:instanceId=" + i["id"] +")" ec2_instances_table += "| {} | {} | {} | {} | {} | ¥¥n ".format(i["name"], link_id, i["project"], i["state"], i["launch_time"]) message = ( "#### EC2インスタンス棚卸のお願い【neutral-7022】 ¥¥n" + “〇〇環境(neutral-7022)の不要なEC2インスタンスの棚卸をお願いいたします! ¥¥n" + "特に、起動中のインスタンスと最終起動日が180日以上前のインスタンスをリストアップしたので、各自以下の対応をお願いいたします。 ¥¥n" + "* 使用している場合 → 使用していない期間(夜間や休日)の停止を検討(参考:自動起動・停止機能の設定))¥¥n" + "* 直近で使用予定が無い場合 → AMI化してインスタンスは削除 ¥¥n" + "* 不要な場合 → 削除 ¥¥n" + ec2_instances_table ) response = client.invoke( FunctionName='mattermost-bot', InvocationType='RequestResponse', Payload='{¥"message¥":¥"' + message + '¥",¥"webhook¥":¥"' + os.environ['WEBHOOK_URL'] + '¥"}' ) AWSのEC2インスタンスの情報を条件に基づい てフィルタリングし、必要な情報を取得。 取得した情報から、 チャットへ送信するメッセージを作成。 チャットへメッセージを送信してくれるLambda へ、メッセージを含んだリクエストを送る。
まとめ • AWS環境におけるリソース棚卸の自動化は、コスト削減と管理効率の 向上に繋がりました。 • LambdaやEventBridgeを活用し、チャット通知と不要リソースの自動 削除を実現しました。 • 今後も自動化の範囲を広げ、さらなる効率化を目指していきます!
ご清聴ありがとうございました