关于亚马逊网络服务:Python boto清除Aws旧Ebs快照“TypeError:不支持的操作数类型 – :’unicode’和’datetime.timedelta’”

Python boto Purging Aws old Ebs Snapshots “TypeError: unsupported operand type(s) for -: 'unicode' and 'datetime.timedelta'”

我正在尝试编写一个python脚本来删除14天前的ebs快照。问题是我无法显示2周前的日期并将其与当前日期进行比较。下面是我的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import boto
import dateutil.relativedelta
from boto.exception import EC2ResponseError
from datetime import timedelta, datetime

conn = boto.ec2.connect_to_region(
    'us-east-1',
    aws_access_key_id = 'xxxxxxxxxxxxx',
    aws_secret_access_key = 'yyyyyyyyyyyyyyyyyy',
 )

snaps = conn.get_all_snapshots()

for list in snaps:
    old_date = list.start_time - timedelta(days=14)
    if list.start_time (is less than or equal to) old_date:
       print conn.delete_snapshots(list.id)

错误:

回溯(最近一次呼叫的最后一次):file"/home/swaroop/documents/my_python/display_snapshots.py",第28行,in旧日期=列表。开始时间-时间增量(天=14)类型错误:不支持-:"unicode"和"datetime.timedelta"的操作数类型

注:快照显示日期格式:2013-12-19t11:11:43.000z

谢谢

施华洛普。


在代码中,list.start_time以unicode字符串的形式返回start datetime。

您需要将其转换为datetime.timedelta

喜欢

1
from dateutil import parser

1
2
3
4
5
for snap in snaps:
    limit = datetime.now() - timedelta(days=14)
    if parser.parse(snap.start_time).date() <= limit.date():
        #do your filter stuff here
        print conn.delete_snapshot(snap.id)

注:首先可以尝试使用print snap.id,如果返回有效结果,则可以使用print conn.delete_snapshot(snap.id)