python脚本中超过特定天数的aws磁盘大小的总和

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

如果天数早于某个值,则无法获取总卷数示例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
    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天大的时候才算总数,这是正确的。我只是演示如何计算卷大小,这似乎是您的问题。对不起,我将编辑并更新问题以正确反映