当前位置: 首页 > 知识库问答 >
问题:

如何使用bot3 waiters从大型RDS实例中获取快照

徐昕
2023-03-14

我开始将我的代码迁移到boto 3,我注意到一个不错的补充是服务员。

我想从db实例创建一个快照,并在继续使用代码之前检查它的可用性。

我的做法如下:

# Notice: Step : Check snapshot availability [1st account - Oregon]
print "--- Check snapshot availability [1st account - Oregon] ---"
new_snap = client1.describe_db_snapshots(DBSnapshotIdentifier=new_snapshot_name)['DBSnapshots'][0]
# print pprint.pprint(new_snap) #debug


waiter = client1.get_waiter('db_snapshot_completed')
print "Manual snapshot is -pending-"
sleep(60)
waiter.wait(
                DBSnapshotIdentifier = new_snapshot_name,
                IncludeShared = True,
                IncludePublic = False
            )

print "OK. Manual snapshot is -available-"

,但文件上说,它每15秒对状态进行40次轮询。那是10分钟。然而,一个相当大的数据库将需要更多。

我怎么能用服务员来减轻这一点呢?

共有3个答案

微生昌胤
2023-03-14

我认为另一个答案暗示了这一解决办法,但在这里它是明确的。

[snip]
...
# Create your waiter
waiter_db_snapshot = client1.get_waiter('db_snapshot_completed')

# Increase the max number of tries as appropriate
waiter_db_snapshot.config.max_attempts = 120

# Add a 60 second delay between attempts
waiter_db_snapshot.config.delay = 60

print "Manual snapshot is -pending-"
....
[snip]
卢黎昕
2023-03-14

如果你愿意的话,你可以不用服务员。

根据该服务员的文档:每隔15秒轮询RDS.Client.description_db_snapshots(),直到达到成功状态。检查失败40次后返回错误。

基本上,这意味着它可以执行以下操作:

RDS = boto3.client('rds')
RDS.describe_db_snapshots()

您可以直接运行它,但要过滤到快照id,下面是语法。http://boto3.readthedocs.io/en/latest/reference/services/rds.html#RDS.Client.describe_db_snapshots

response = client.describe_db_snapshots(
    DBInstanceIdentifier='string',
    DBSnapshotIdentifier='string',
    SnapshotType='string',
    Filters=[
        {
            'Name': 'string',
            'Values': [
                'string',
            ]
        },
    ],
    MaxRecords=123,
    Marker='string',
    IncludeShared=True|False,
    IncludePublic=True|False
)

这将最终看起来像这样:

snapshot_description = RDS.describe_db_snapshots(DBSnapshotIdentifier='YOURIDHERE')

然后您可以循环,直到返回可用的快照。所以这里有一个非常粗略的想法。

 import boto3
 import time
 RDS = boto3.client('rds')
 RDS.describe_db_snapshots()
 snapshot_description = RDS.describe_db_snapshots(DBSnapshotIdentifier='YOURIDHERE')
 while snapshot_description['DBSnapshots'][0]['Status'] != 'available' :
     print("still waiting")
     time.sleep(15)    
     snapshot_description = RDS.describe_db_snapshots(DBSnapshotIdentifier='YOURIDHERE')
琴俊人
2023-03-14

服务员有配置参数'延迟'和'max_attempts'如下:

waiter = rds_client.get_waiter('db_instance_available')
print( "waiter delay: " + str(waiter.config.delay) )

waiter.pygithub

 类似资料:
  • 问题内容: 有一个ArrayList存储整数值。我需要在此列表中找到最大值。例如,假设arrayList存储的值为:,最大值为。 寻找最大值的有效方法是什么? @Edit:我只是找到一个不确定的解决方案 这将返回最大值。 比较每个值的另一种方法,例如 问题答案: 你可以使用轻松实现所需的内容- 高效阅读 -足够的 Javadoc for Collections.max 根据其元素的自然顺序返回给定

  • RDS实例即虚拟化的关系型数据库服务器。 RDS实例即虚拟化的关系型数据库服务器。用户可以在RDS实例中创建或管理多个数据库。目前 云联壹云 平台已支持对接并创建阿里云、华为云、腾讯云、谷歌云和HCSO的RDS实例;AWS、Azure、京东云、腾讯云TDSQL暂只支持同步。其他平台正在陆续支持中。 使用流程 在 云联壹云 平台上创建阿里云、华为云、腾讯云、谷歌云、HCSO的RDS实例,请参考新建R

  • 在Spring中,如果我定义了一个原型bean,我可以在Spring Framework4.3.0.Release的当前时间使用查找方法注入来注入它。 在Grails中,如何在运行时注入原型bean?Grails 2.5.4文档展示了如何设置和,但实际上并没有给出如何注入非单件bean的示例。

  • 我需要下载一些大文件( 据我所读,有两种联系。数据和控制通道,其中数据通道似乎工作正常(我可以完全下载文件),但控制通道同时超时。我还了解到ftplib(和其他python ftp库)不适合大文件,可能只支持1GB左右的文件。这里有一个与此主题类似的问题:如何通过ftp(带监控)下载python中的大文件 我当前的代码如下所示: 我可以使用它或其他支持大文件的库吗?

  • 坦率地说,我甚至不知道这是否可能。但我想做的是如下所示。 > 我通过终端中的javac命令从ClassFile.java制作了一个类文件。 然后我想从. java文件或. class文件中获取一个实例。 接下来,我在eclipse中做了另一个项目,因为你猜这个项目路径和上面的文件路径完全不同。例如,ClassFile.java/class文件可以位于“下载”文件夹中,另一方面,新的eclipse项

  • 我有以下类桥联图: 我将JUnit测试用例编写为: 但我不知道该断言什么: