You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3调用AWS DRS start_recovery未返回recoveryInstanceID问题

AWS DRS start_recovery 响应缺失 recoveryInstanceID 的原因与解决方法

可能原因

  • 异步操作特性:start_recovery 是异步接口,启动恢复演练属于后台执行任务。接口返回时,AWS 可能还未完成恢复实例的创建流程,因此不会立即返回 recoveryInstanceID。这是 DRS 服务的正常设计,而非接口调用错误。
  • Boto3 版本兼容问题:较旧版本的 Boto3 SDK 可能未正确映射 DRS 服务的最新响应字段,导致无法解析出 recoveryInstanceID。
  • 源服务器状态异常:如果目标源服务器未处于 READY_FOR_RECOVERY 状态,恢复演练可能未正常触发,自然不会生成对应的恢复实例 ID。

解决方法

1. 异步轮询查询恢复实例

由于接口是异步的,需要通过 describe_recovery_instances 接口轮询获取结果,示例代码如下:

import boto3
import time

drs_client = boto3.client('drs')
source_server_id = 's-32fe7############'

# 启动恢复演练
drs_client.start_recovery(
    isDrill=True,
    sourceServers=[{'sourceServerID': source_server_id}]
)

# 轮询获取 recoveryInstanceID
recovery_instance_id = None
max_retries = 10
wait_interval = 30  # 每次间隔30秒查询

for attempt in range(max_retries):
    response = drs_client.describe_recovery_instances(
        filters={'sourceServerIDs': [source_server_id]}
    )
    instances = response.get('recoveryInstances', [])
    if instances:
        recovery_instance_id = instances[0]['recoveryInstanceID']
        break
    time.sleep(wait_interval)

print(f"Recovery Instance ID: {recovery_instance_id}" if recovery_instance_id else "Timeout: Failed to get recovery instance ID")

2. 检查源服务器状态

先验证源服务器是否符合恢复演练要求:

response = drs_client.describe_source_servers(
    filters={'sourceServerIDs': [source_server_id]}
)
source_server = response['sourceServers'][0]
print(f"Source Server Status: {source_server['recoveryStatus']}")

只有当 recoveryStatus 为 READY_FOR_RECOVERY 时,才能正常启动恢复演练。

3. 更新 Boto3 SDK

执行命令升级到最新版本的 Boto3,确保 SDK 能正确解析 DRS 服务的响应字段:

pip install --upgrade boto3

内容的提问来源于stack exchange,提问作者Zaid Mughal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:52:23