ازاي تمسح EBS غير مستخدمه عن طريق Lambda و EventBridge
Muhammed Ashraf
Posted on June 13, 2024
كلنا عارفين عامل ال Cost ف AWS من العوامل المهمه اللي كتير مش بناخد بالنا منها.. سواء كنت بتسخدم ال Service على مستوى شخصي كا تجربه او على مستوى Enterprise
و دي بتفرق كتير اوي ف اختياري للطريقه او Services اللي هستخدمها و انا ببني ال Solution بتاعي
اوقات كتير اوي بيبقى فيه Resources كتيره مش بنستخدمها او بننساها و دي ممكن تحسب تكلفه مع الوقت و احنا مش واخدين بالنا.. و نلاقي فاتوره كبيره اخر الشهر جايلنا و مش عارفين بتبقى بسبب ايه
علشان كده فكرت ازاي ممكن نحل الموضوع ده عن طريق Automated Solution يقدر ينفذلنا ده علشان يحافظ على الفاتوره بتاعتنا
خلينا نبدا ب ال EBS Volumes.. اه مش بيبقلى تكلفتها كبيره زي بقيت ال Services بس خلينا نبدأ ب دي كا اول السلسله
ال Solution بتاعنا انهارده بيبدأ ب كذا Service:
• Lambda Function: ودي هيبقى فيها ال Logic بتاعنا اللي بينفذ ال Code
• EventBridge: و دي هتبقى ال Service اللي بتخلي ال Lambda function تشتغل على فترات زمنيه بعرفها
• AWS SES: و دي بتبعتلي email ب ال volumes اللي حصل Action عليهم
عندنا ف ال Demo
ده 2 Lamda Functions و احده بتعمل list لل volumes و التانيه بتاخد Action
هنبدا اننا نعمل Create ل Lambda ودي ال Configuration بتاعت اول Lambda
هنشغتل Python
هنعدل ال Execution Role لل Lambda ب ال Permissions دي
ده ال Code بتاعنا
import boto3
def lambda_handler(event, context):
ec2_client = boto3.client('ec2')
ses_client = boto3.client('ses')
unused_volumes = []
CHARSET='UTF-8'
volumes = ec2_client.describe_volumes()
for volume in volumes['Volumes']:
if len(volume['Attachments']) == 0:
unused_volumes.append(volume['VolumeId'])
print(unused_volumes)
print("-------"*5)
email_body = """
<html>
<head></head>
<h1 style='text_aligned:center'>Unused Volumes in your account </h1>
<p style='color:red'>below list contains the unused volumes </p>
</html>
"""
for vol in unused_volumes:
email_body = email_body + "VolumeId {} \n".format(vol)
print(email_body)
for delete_vol in unused_volumes:
response_delete = ec2_client.delete_volume(
VolumeId=delete_vol,
DryRun=False
)
print(response_delete)
response = ses_client.send_email(
Destination={
"ToAddresses": ['x@example.com','y@example.com']
},
Message={
"Body":{
"Html":{
"Charset":CHARSET,
"Data": email_body
}
},
"Subject":{
"Charset":CHARSET,
"Data": "This email address notify you with the unused volumes into your account"
}
},
Source = "x@example.com"
)
فكره ال Code بأختصار انه بيعمل describe لل volumes و بيشوف مين attached
و فيه ال Email Body اللي هيتبعت فيه ال List
دلوقتي هنظبط AWS SES و نحط ال destintations اللي عايزينهم يستقبلوا ال email
الخطوه الجايه اننا هنعل automate عن طريق EventBridge
هنروح لل Function بتاعتنا و هنعمل ال Trigger بتاعنا يكون EventBridge زي الصوره
هنظبط ال Configration بتاعت EventBrige انها تشتغل زي ما احنا عايزين و نحط ال schedulded expression براحتنا
و دي النتيجه :)
Posted on June 13, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
October 5, 2024