簡體   English   中英

Boto3和AWS Lambda - 刪除早於的快照

[英]Boto3 and AWS Lambda - deleting snapshots older than

我目前正在使用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']
        )

代碼看起來非常好, 您正在關注文檔

我只想補充一下

    print(i['SnapshotCreateTime'], retentionDate)

在for循環中,日志會快速告訴您每個月初的情況。

順便說一下,您使用的是AWS的RDS嗎? RDS支持自動快照創建,您還可以定義保留期。 無需創建自定義lambda腳本。

由於CloudWatch Events和目標服務的分布式特性,觸發預定規則的時間與目標服務執行目標資源的時間之間的延遲可能是幾秒鍾。 您的預定規則將在該分鍾內觸發,但不會在精確的第0秒觸發。

在這種情況下,你的utc現在可能會在執行期間錯過幾秒鍾,保留日期也可能會錯過幾秒鍾。 這應該是非常小的,但仍然有可能錯過刪除。 除此之外,后續運行應該刪除早期運行中遺漏的那些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM