环境需求
单位现在每隔一段时间需要核对一下 AWS 正在运行的 EC2 资源清单,为了避免核对失误以及重复性的工作,打算用脚本来解决这一重复性的工作。大概思路为 通过 AWS AK、SK 来索取 AWS EC2 list 的权限,然后通过 Python 把正在运行的 EC2 实例筛选出来,然后提取出来想要的一些内容 写入到 CSV 表格中,通过附件的方式发送到邮箱中.
运行脚本所需
Python3、pip3
Python3 所需模块
boto3
csv
codecs
smtplib
脚本内容
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import boto3
import csv
import codecs
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from smtplib import SMTP
ec2 = boto3.client(
'ec2',
aws_access_key_id="AKIAUO5xxxxxxxxxxxxxxxxxxx",
aws_secret_access_key="0wcg69IbHT/5xxxxxxxxxxxxxxxxxxxxxx",
region_name='cn-north-1',
)
response = ec2.describe_instances()
with open("/home/bsh/scripts/running.csv", "w", encoding="utf-8", newline="") as csvf:
writer = csv.writer(csvf)
csv_head = ["Up time", "Project", "Instance Name", "Instance ID", "Public IP", "Privite IP", "Key Name", "State"]
writer.writerow(csv_head)
for i in response['Reservations']:
if i['Instances'][0]['State']['Name'] == 'running':
for j in i['Instances']:
if 'PublicIpAddress' not in j:
j['PublicIpAddress'] = ""
if 'Tags' not in j:
j['Tags'] = []
if 'InstanceId' not in j:
j['InstanceId'] = []
if 'KeyName' not in j:
j['KeyName'] = []
print(j['Tags'])
for dic in j['Tags']:
if dic['Key'] == 'Name':
print(dic['Value'])
v = dic['Value']
for dic in j['Tags']:
if dic['Key'] == 'Project':
print(dic['Value'])
p = dic['Value']
row_cvs = [j['LaunchTime'], p, v, j['InstanceId'], j['PublicIpAddress'], j['PrivateIpAddress'], j['KeyName'], 'running']
writer.writerow(row_cvs)
print(j['LaunchTime'], p, v, j['InstanceId'], j['PublicIpAddress'], j['PrivateIpAddress'], j['KeyName'], 'running')
mailto_list=['xuewenlong93@189.com']
mail_host="smtp.189.cn"
mail_user="xuewenlong93@189.cn"
mail_pass="xxxx"
def make_mpa_msg():
email = MIMEMultipart('alterbative')
text = MIMEText(open('/home/bsh/scripts/running.csv', 'rb').read(), 'base64', 'utf-8')
text["Content-Disposition"] = 'attachment; filename="running.csv"'
email.attach(text)
return email
def send_mail(to_list,sub,content):
me="awsEC2"+"<"+mail_user+">"
msg = make_mpa_msg()
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception as e:
print (str(e))
return False
for i in range(1): #发送1封
if send_mail(mailto_list,"awsec2list","msg.as_string()"):
print ('发送成功')
else:
print ('发送失败')
[root@ip-10-0-10-243 scripts]# python awsout.py
发送成功
[root@ip-10-0-10-243 scripts]#