嗨, 我试图从AWS账户获取所有快照详细信息和卷详细信息。我的代码工作得很完美但我不知道它出于某种原因它显示的是'us-east-1'和'ap-southeast-1'区域的快照和音量。但是我也有其他地区的资源。
import xlsxwriter
import boto3
import collections
import datetime
from time import gmtime, strftime
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os
#lambda function beginning
def worker_handler(event, context):
date_fmt = strftime("%Y_%m_%d", gmtime())
#Give your file path
filepath ='/tmp/CM_AWS_Resources_' + date_fmt + '.xlsx'
#Give your filename
filename ='CM_AWS_Resources_' + date_fmt + '.xlsx'
# xlsx_file = open(filepath,'w+')
workbook = xlsxwriter.Workbook(filepath)
worksheet1 = workbook.add_worksheet('snapshots')
worksheet2 = workbook.add_worksheet('volumes')
volumeHeader = ['volume id','snapshot id','creation date','Description','size','Region']
snapshotsHeader=['volume id','state','size','Region']
headVolSize=1
row=0
col=0
while headVolSize <= len(volumeHeader):
for i in volumeHeader:
worksheet1.write(row,col,i)
col+=1
headVolSize=headVolSize+1
headSnapSize=1
row=0
col=0
while headSnapSize <= len(snapshotsHeader):
for i in snapshotsHeader:
worksheet2.write(row,col,i)
col+=1
headSnapSize=headSnapSize+1
while headVolSize <= len(volumeHeader):
for i in volumeHeader:
worksheet1.write(row,col,headVolSize)
worksheet1.write(row,col+1,i)
row +=1
headVolSize=headVolSize+1
j=j+1
ec = boto3.client('ec2')
s3 = boto3.resource('s3')
ec2Res = boto3.resource('ec2')
regions = ec.describe_regions().get('Regions',[] )
for region in regions:
reg=region['RegionName']
regname='REGION :' + reg
# print regname
ec2 = boto3.client('ec2',region_name=reg)
snapshots=ec2.describe_snapshots(OwnerIds=['***',],).get('Snapshots',[])
if len(snapshots) >0 :
print "snapshots : " + str(len(snapshots)) + " " + reg
j=1
while j <= len(snapshots):
row=0
col=0
for i in snapshots:
# print type(i['StartTime'])
date1 = i['StartTime'].strftime('%Y-%m-%d')
# print "row : " + str(row) + " col : " + str(col)
# print i['VolumeId'] + str(row) + "," + str(col) + " " + i['SnapshotId'] + " " +str(row) + "," + str(col+1) + " " + str(i['StartTime']) + " " + " " +str(row) + "," + str(col+2) + " " + i['Description'] + " " +" " +str(row) + "," + str(col+3) + " " + str(i['VolumeSize']) + " " +str(row) + "," + str(col+4) + " " + reg + " " +str(row) + "," + str(col+5)
worksheet1.write(row,col,i['VolumeId'])
worksheet1.write(row,col+1,i['SnapshotId'])
worksheet1.write(row,col+2,date1)
worksheet1.write(row,col+3,i['Description'])
worksheet1.write(row,col+4,i['VolumeSize'])
worksheet1.write(row,col+5,reg)
row +=1
j=j+1
# else:
# print "do nothing"
ec2volumes = ec2.describe_volumes().get('Volumes',[])
if len(ec2volumes) >0 :
#if reg=='ap-south-1':
print "volumes : " + str(len(ec2volumes)) + " " + reg
j=1
while j <= len(ec2volumes):
row=0
col=0
for i in ec2volumes:
# print type(i['StartTime'])
# print "row : " + str(row) + " col : " + str(col)
# print i['VolumeId'] + str(row) + "," + str(col) + " " + i['SnapshotId'] + " " +str(row) + "," + str(col+1) + " " + str(i['StartTime']) + " " + " " +str(row) + "," + str(col+2) + " " + i['Description'] + " " +" " +str(row) + "," + str(col+3) + " " + str(i['VolumeSize']) + " " +str(row) + "," + str(col+4) + " " + reg + " " +str(row) + "," + str(col+5)
worksheet2.write(row,col,i['VolumeId'])
worksheet2.write(row,col+1,i['State'])
worksheet2.write(row,col+2,i['Size'])
worksheet2.write(row,col+3,reg)
row +=1
j=j+1
workbook.close()
ses_user = "***"
ses_pwd = "***"
def mail(fromadd,to, subject, text, attach):
msg = MIMEMultipart()
msg['From'] = fromadd
msg['To'] = to
msg['Subject'] = subject
msg.attach(MIMEText(text))
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(attach, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition','attachment; filename="%s"' % os.path.basename(attach))
msg.attach(part)
mailServer = smtplib.SMTP("email-smtp.us-east-1.amazonaws.com", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(ses_user, ses_pwd)
mailServer.sendmail(fromadd, to, msg.as_string())
# Should be mailServer.quit(), but that crashes...
mailServer.close()
date_fmt = strftime("%Y_%m_%d", gmtime())
#Give your file path
filepath ='/tmp/CM_AWS_Resources_' + date_fmt + '.xlsx'
#Give your filename
mailTO=['***']
for i in mailTO:
mail("***",i,"Details for unimportant snapshot deletion","PFA for the AWS resource of AWS account.",filepath)
s3.Object('bucketname', filename).put(Body=open(filepath, 'rb'))
答案 0 :(得分:0)
我在代码中发现了错误。每次行值在“区域中的区域”部分中更新为1,因此我只得到两个区域值。所以我为快照循环和音量循环的行和列声明了两个不同的值。所以解决方案是我分别声明 rowSnap = 1 rowVol = 1 并且它正常工作。
rowSnap=1
rowVol=1
regions = ec.describe_regions().get('Regions',[] )
for region in regions:
reg=region['RegionName']
regname='REGION :' + reg
# print regname
ec2 = boto3.client('ec2',region_name=reg)
snapshots=ec2.describe_snapshots(OwnerIds=['**',],).get('Snapshots',[])
if len(snapshots) >0 :
print "snapshots : " + str(len(snapshots)) + " " + reg
j=1
col=0
while j <= len(snapshots):
for i in snapshots:
date1 = i['StartTime'].strftime('%Y-%m-%d')
worksheet1.write(rowSnap,col,i['VolumeId'])
worksheet1.write(rowSnap,col+1,i['SnapshotId'])
worksheet1.write(rowSnap,col+2,date1)
worksheet1.write(rowSnap,col+3,i['Description'])
worksheet1.write(rowSnap,col+4,i['VolumeSize'])
worksheet1.write(rowSnap,col+5,reg)
rowSnap +=1
j=j+1
ec2volumes = ec2.describe_volumes().get('Volumes',[])
if len(ec2volumes) >0 :
#if reg=='ap-south-1':
print "volumes : " + str(len(ec2volumes)) + " " + reg
j=1
col=0
while j <= len(ec2volumes):
# row=0
# col=0
for i in ec2volumes:
worksheet2.write(rowVol,col,i['VolumeId'])
worksheet2.write(rowVol,col+1,i['State'])
worksheet2.write(rowVol,col+2,i['Size'])
worksheet2.write(rowVol,col+3,reg)
rowVol +=1
j=j+1
workbook.close()