python脚本中超过特定天数的aws磁盘大小的总和
如果天数早于某个值,则无法获取总卷数示例20,持续返回异常 如果在python脚本中尝试合计磁盘总大小(如果python脚本中超过特定天数的aws磁盘大小的总和,python,python-3.x,amazon-ec2,boto3,Python,Python 3.x,Amazon Ec2,Boto3,如果天数早于某个值,则无法获取总卷数示例20,持续返回异常 如果在python脚本中尝试合计磁盘总大小(如果age=20),则可以在找到时打印值,如果使用天数>age #!/usr/bin/python import boto3 import datetime age = 20 def days_old(date): date_obj = date.replace(tzinfo=None) diff = datetime.datetime.now() - date_obj
age=20
),则可以在找到时打印值,如果使用天数>age
#!/usr/bin/python
import boto3
import datetime
age = 20
def days_old(date):
date_obj = date.replace(tzinfo=None)
diff = datetime.datetime.now() - date_obj
return diff.days
# datetime.datetime.now() to get
# current date as filename.
Available_Volumes = datetime.datetime.now()
# open a (new) file to write
outF = open("Available_Volumes_"+Available_Volumes.strftime("%d_%m_%Y_%H:%M")+".txt", "a")
#for lambda use def lambda_handler(object, context):
def main():
# Get list of regions
ec2_client = boto3.client('ec2')
regions = [region['RegionName']
for region in ec2_client.describe_regions()['Regions']]
for region in regions:
ec2 = boto3.resource('ec2', region_name=region)
print(("Region:", region))
# List only unattached volumes ('available' vs. 'in-use')
volumes = ec2.volumes.filter(
Filters=[{'Name': 'status', 'Values': ['available']}])
for volume in volumes:
v = ec2.Volume(volume.id)
create_date = (v.create_time)
day_old = days_old(create_date)
if day_old > age:
try:
outF.write("Found Available Volume that is {} days old !! Deleting EBS volume: {}, Size: {} GiB\n".format(day_old, v.id, v.size))
print (v.id)
print ("Size of Volume is ",v.size)
print ("Number of Days old is equal to {} ".format(day_old))
print("Found Available Volume that is {} days old Deleting EBS volume: {}, Size: {} GiB\n".format(day_old, v.id, v.size))
#unhash to allow delete
#v.delete()
except:
print ("can't delete")
if __name__ == '__main__':
main()
# Copy to S3 Bucket
s3 = boto3.resource('s3')
s3.meta.client.upload_file("Available_Volumes_"+Available_Volumes.strftime("%d_%m_%Y_%H:%M")+".txt", 'mybucket', "Available_Volumes_"+Available_Volumes.strftime("%d_%m_%Y_%H:%M")+".txt")
继续获取“除错误无法删除”的值。您可以按如下方式访问
大小值:
导入boto3
ec2=boto3.resource('ec2')
volumes=ec2.volumes.filter(过滤器=[{'Name':'status','Values':['available']}])
totalsize=0
对于卷中的卷:
totalsize+=卷大小
打印(总尺寸)
或者,更具python风格的方法:
导入boto3
ec2=boto3.resource('ec2')
volumes=ec2.volumes.filter(过滤器=[{'Name':'status','Values':['available']}])
打印(总和(体积。以体积表示的体积大小))
始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)进行讨论(而不是评论)。还有其他有用的信息。也许您应该删除尝试/except
以查看完整的异常消息,或者至少使用exception作为ex:print(ex)
您遇到的具体问题是什么?另外,您可以显示所有代码吗?例如,什么是年龄
,天数(
和输出
?另外,缩进是不正确的。我更新了完整的代码,当我尝试求和v.size if days__>age时,我得到了除(“无法删除”)输出,将正确的输出添加到文件中减去总数。对于此特定查询,days_old>age仅返回3个卷,直到无法对一个日期中找到的值的总数求和这忽略了所有应报告(求和)的if days old,它对区域中的总卷求和,忽略if days_old。我测试了50天的可用值,单个区域的总可用容量为80GB,返回的是740GB,这是该区域所有可用容量的总和。我只在20天大的时候才算总数,这是正确的。我只是演示如何计算卷大小,这似乎是您的问题。对不起,我将编辑并更新问题以正确反映