【问题标题】:Boto3 and AWS Lambda - deleting snapshots older thanBoto3 和 AWS Lambda - 删除早于
【发布时间】:2016-09-27 07:56:16
【问题描述】:

我目前正在使用 AWS Lambda 来创建我的数据库的快照并删除超过 6 天的快照。我正在使用 Boto3 库与 AWS API 交互。我每天都在使用 CloudWatch 规则触发删除代码。

通常这可以正常工作,但我遇到了一个问题,即在月初(前 6 天)删除脚本似乎没有删除任何快照,即使存在超过 6 天的快照。

代码如下:

import json
import boto3
from datetime import datetime, timedelta, tzinfo

class Zone(tzinfo):
    def __init__(self,offset,isdst,name):
        self.offset = offset
        self.isdst = isdst
        self.name = name
    def utcoffset(self, dt):
        return timedelta(hours=self.offset) + self.dst(dt)
    def dst(self, dt):
        return timedelta(hours=1) if self.isdst else timedelta(0)
    def tzname(self,dt):
        return self.name

UTC = Zone(10,False,'UTC')

# Setting retention period of 6 days
retentionDate = datetime.now(UTC) - timedelta(days=6)

def lambda_handler(event, context):
    print("Connecting to RDS")
    rds = boto3.setup_default_session(region_name='ap-southeast-2')
    client = boto3.client('rds')
    snapshots = client.describe_db_snapshots(SnapshotType='manual')
    print('Deleting all DB Snapshots older than %s' % retentionDate)

    for i in snapshots['DBSnapshots']:
        if i['SnapshotCreateTime'] < retentionDate:
            print ('Deleting snapshot %s' % i['DBSnapshotIdentifier'])
              client.delete_db_snapshot(DBSnapshotIdentifier=i['DBSnapshotIdentifier']
        )

【问题讨论】:

    标签: python aws-lambda boto3


    【解决方案1】:

    代码看起来非常好,you are following the documentation

    我会简单地添加

        print(i['SnapshotCreateTime'], retentionDate)
    

    在 for 循环中,日志会快速告诉您每个月初发生的事情。

    顺便说一句,您使用的是 AWS 的 RDS 吗? RDS 支持自动创建快照,您还可以定义保留期。无需创建自定义 lambda 脚本。

    【讨论】:

    • 是的,我正在使用来自 RDS 的 AWS。使用 lambda 脚本的原因是我想要每小时对数据库进行一次快照。我相信自动 rds 快照只会每天发生一次,因此需要一些额外的备份。
    【解决方案2】:

    由于 CloudWatch Events 和目标服务的分布式特性,触发计划规则的时间与目标服务执行目标资源的时间之间的延迟可能是几秒钟。您的预定规则将在那一分钟内触发,但不会在精确的第 0 秒触发。

    在这种情况下,您的 UTC 现在在执行期间可能会在保留日期之前错过几秒钟,也可能会错过几秒钟。这应该非常小,但仍有可能错过删除。这样一来,后续运行应该会删除之前运行中丢失的那些。

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2021-08-15
      • 2020-07-04
      • 1970-01-01
      相关资源
      最近更新 更多