如何使用 Boto3 根据名称查找和删除 RDS 快照?
How can use Boto3 to find and delete an RDS snapshot based on it's name?
我正在尝试创建一个 Lambda 函数来删除旧的 RDS 快照。但是,似乎通配符不是 Boto3 describe_db_snapshots 支持的功能。我有一个函数可以创建每周 RDS 快照,其名称具有日期和时间 (weekly-2021-05-05-15-19)。但是,我想创建一个 Lambda 函数,在一周后删除旧快照,然后再创建具有相似名称的新快照。我使用的代码打印出特定数据库的所有 DBSnapshotIdentifier,但我只希望它打印出类似于“weekly-*”的 DBSnapshotIdentifier。一旦打印工作正常,我将对其进行编辑以删除快照。现在,代码 return 什么都没有。我只希望 return 以“weekly-”开头的快照。
import boto3
client = boto3.client('rds')
DB = 'mytestdatabase'
#-----Define Lambda function-----#
def lambda_handler(event, context):
snapshots = client.describe_db_snapshots(
DBInstanceIdentifier=DB,
SnapshotType='manual'
)
for i in snapshots['DBSnapshots']:
if (i['DBSnapshotIdentifier']) == 'weekly-*':
print(i['DBSnapshotIdentifier'])
您可以在 Lambda 函数中使用此函数来检查以“weekly-”开头的快照名称,如下所示:
def snap_check(text):
result = text.startswith('weekly-')
return result
text = "weekly-2021-05-05-15-19"
print(snap_check(text))
输出:
True
True - 表示您的快照以“weekly-”开头,
False - 表示您的快照不是以“weekly-”开头的
您的代码将如下所示:
import boto3
def snap_check(text):
result = text.startswith('weekly-')
return result
client = boto3.client('rds')
DB = 'mytestdatabase'
#-----Define Lambda function-----#
def lambda_handler(event, context):
snapshots = client.describe_db_snapshots(
DBInstanceIdentifier=DB,
SnapshotType='manual'
)
for i in snapshots['DBSnapshots']:
if snap_check(str(i['DBSnapshotIdentifier'])):
print(i['DBSnapshotIdentifier'])
我使用了类似的功能,它打印出所有需要的快照,但是我现在需要在其中放置一个删除逻辑,以便它删除 1 周之前的所有快照。因为我们只想保留 7 天的快照
我正在尝试创建一个 Lambda 函数来删除旧的 RDS 快照。但是,似乎通配符不是 Boto3 describe_db_snapshots 支持的功能。我有一个函数可以创建每周 RDS 快照,其名称具有日期和时间 (weekly-2021-05-05-15-19)。但是,我想创建一个 Lambda 函数,在一周后删除旧快照,然后再创建具有相似名称的新快照。我使用的代码打印出特定数据库的所有 DBSnapshotIdentifier,但我只希望它打印出类似于“weekly-*”的 DBSnapshotIdentifier。一旦打印工作正常,我将对其进行编辑以删除快照。现在,代码 return 什么都没有。我只希望 return 以“weekly-”开头的快照。
import boto3
client = boto3.client('rds')
DB = 'mytestdatabase'
#-----Define Lambda function-----#
def lambda_handler(event, context):
snapshots = client.describe_db_snapshots(
DBInstanceIdentifier=DB,
SnapshotType='manual'
)
for i in snapshots['DBSnapshots']:
if (i['DBSnapshotIdentifier']) == 'weekly-*':
print(i['DBSnapshotIdentifier'])
您可以在 Lambda 函数中使用此函数来检查以“weekly-”开头的快照名称,如下所示:
def snap_check(text):
result = text.startswith('weekly-')
return result
text = "weekly-2021-05-05-15-19"
print(snap_check(text))
输出:
True
True - 表示您的快照以“weekly-”开头,
False - 表示您的快照不是以“weekly-”开头的
您的代码将如下所示:
import boto3
def snap_check(text):
result = text.startswith('weekly-')
return result
client = boto3.client('rds')
DB = 'mytestdatabase'
#-----Define Lambda function-----#
def lambda_handler(event, context):
snapshots = client.describe_db_snapshots(
DBInstanceIdentifier=DB,
SnapshotType='manual'
)
for i in snapshots['DBSnapshots']:
if snap_check(str(i['DBSnapshotIdentifier'])):
print(i['DBSnapshotIdentifier'])
我使用了类似的功能,它打印出所有需要的快照,但是我现在需要在其中放置一个删除逻辑,以便它删除 1 周之前的所有快照。因为我们只想保留 7 天的快照