2016-09-26 11 views
1

よりも古い削除するスナップショット私は現在、私のデータベースのスナップショットを作成し、6日より古いスナップショットを削除するには、AWSラムダを利用しています。私はBoto3ライブラリをAWS APIとのインターフェイスに使用しています。私はCloudWatchルールを使用して毎日削除コードをトリガーしています。Boto3とAWSラムダ -

通常、これはうまくいきますが、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'] 
     ) 

答えて

1

コードが完全に正常に見えるとyou are following the documentation

私は単純にループのために、ログは何が起こっているのかすぐにわかりますで

print(i['SnapshotCreateTime'], retentionDate) 

を追加します毎月の始めに。

ところで、あなたはAWSからRDSを使用していますか? RDSは自動スナップショット作成をサポートし、保存期間も定義できます。カスタムラムダスクリプトを作成する必要はありません。

+0

はい、私はRDSからAWSを使用しています。ラムダスクリプトの理由は、データベースから取った毎時のスナップショットが必要なことです。私は自動RDSのスナップショットのみを毎日起こると考えているので、その理由はいくつかの追加のバックアップをしたいと思います。 – user2067803

0

によりCloudWatchのイベントと対象サービスの分散性に、スケジュールされたルールがトリガされる時間と時間の間の遅延ターゲットサービス優等対象リソースの実行は数秒かもしれません。あなたのスケジュールされたルールは、その分内に起動されますが、正確な0秒には起動されません。その場合

、あなたのUTCは、今も数秒を見逃す可能性が保持期限であり、実行時に数秒を逃すことがあります。これは非常に小さいはずですが、まだ削除されていない可能性があります。それに続いて、後続の実行では、以前に実行されなかったものを削除する必要があります。