Python AWS Lambda:RDS快照-密钥错误

Python AWS Lambda:RDS快照-密钥错误,python,amazon-web-services,backup,aws-lambda,boto3,Python,Amazon Web Services,Backup,Aws Lambda,Boto3,我正在设置一个Lambda函数,以便根据需要每天拍摄RDS实例的快照。我正在运行python3解释器 import boto3 import datetime def lambda_handler(event, context): print("Connecting to RDS") client = boto3.client('rds') # Instance to backup dbInstances = ['testdb'] for dbIn

我正在设置一个Lambda函数,以便根据需要每天拍摄RDS实例的快照。我正在运行python3解释器

import boto3
import datetime


def lambda_handler(event, context):
    print("Connecting to RDS")
    client = boto3.client('rds')

    # Instance to backup
    dbInstances = ['testdb']

    for dbInstance in dbInstances:
        print("RDS snapshot backups started at %s...\n" % datetime.datetime.now())

        client.create_db_snapshot(
            DBInstanceIdentifier=dbInstance,
            DBSnapshotIdentifier=dbInstance+'{}'.format(datetime.datetime.now().strftime("%y-%m-%d-%H")),
            Tags=[
                {
                    'Key': 'Name',
                    'Value': 'dbInstace'

                },
            ]
        )


        for snapshot in client.describe_db_snapshots(DBInstanceIdentifier=dbInstance, MaxRecords=50)['DBSnapshots']:
            createTs = snapshot['SnapshotCreateTime'].replace(tzinfo=None)
            if createTs < datetime.datetime.now() - datetime.timedelta(days=30):
                print("Deleting snapshot id:", snapshot['DBSnapshotIdentifier'])
                client.delete_db_snapshot(
                    DBSnapshotIdentifier=snapshot['DBSnapshotIdentifier']
                )
问题似乎特别在于这一行:

createTs = snapshot['SnapshotCreateTime'].replace(tzinfo=None)

为什么会发生这种情况?

我怀疑您看到的是KeyError,因为快照仍在进行中,而SnapshotCreateTime尚未填充到返回的dict中

在这种情况下,进度百分比将小于100

for snap in snapshots['DBSnapshots']:
    if ('SnapshotCreateTime' in snap):
        print snap['SnapshotCreateTime']
    else:
        print 'No create time available'

    if ('PercentProgress' in snap):
        print snap['PercentProgress']

这就是问题所在。最好的办法是在那里睡觉吗?不过,这似乎会增加成本。通过快速查看您的代码,您正在尝试清除超过30天的快照,这样您就可以安全地忽略没有SnapshotCreateTime的快照,因为它们显然不到30天,甚至还不存在。
for snap in snapshots['DBSnapshots']:
    if ('SnapshotCreateTime' in snap):
        print snap['SnapshotCreateTime']
    else:
        print 'No create time available'

    if ('PercentProgress' in snap):
        print snap['PercentProgress']