общая сумма, если за определенный день размер диска AWS в скрипте Python - PullRequest
0 голосов
/ 30 октября 2019

не может получить общую сумму томов, если дни старше определенного значения. Пример 20, продолжает выдавать исключение

Попытка суммировать общий размер дисков в скрипте Python, если age = 20, может распечатать значения, если найдено, не может суммировать общее количество дисков, найденных по их размеру if days_old > 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")

, постоянно получая исключение, ошибка не может быть удалена

1 Ответ

0 голосов
/ 31 октября 2019

Вы можете получить доступ к значению size следующим образом:

import boto3
ec2 = boto3.resource('ec2')
volumes = ec2.volumes.filter(Filters=[{'Name': 'status', 'Values': ['available']}])

totalsize = 0
for volume in volumes:
    totalsize += volume.size

print(totalsize)

Или, более метод Pythonic:

import boto3
ec2 = boto3.resource('ec2')
volumes = ec2.volumes.filter(Filters=[{'Name': 'status', 'Values': ['available']}])

print(sum(volume.size for volume in volumes))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...