48 lines
2.0 KiB
Python
Raw Normal View History

2025-12-04 10:09:04 +08:00
import os
import time
from aliyunsdkecs.request.v20140526.JoinResourceGroupRequest import JoinResourceGroupRequest
from aliyunsdkcore.client import AcsClient
from utils.logger import log_action
def transfer_instance_to_group(instance_id: str, resource_group_id: str, region_id: str, access_key: str, secret_key: str):
try:
print(f"🚀 开始绑定实例 {instance_id} 到资源组 {resource_group_id},区域:{region_id}")
# 设置 SDK 超时时间(毫秒)
os.environ["ALIBABA_CLOUD_SDK_CONNECTION_TIMEOUT"] = "15000"
os.environ["ALIBABA_CLOUD_SDK_READ_TIMEOUT"] = "15000"
# 创建客户端
print("🔑 初始化 AcsClient 中...")
client = AcsClient(access_key, secret_key, region_id)
for i in range(15):
try:
print(f"🔁 第 {i+1}/15 次尝试转移实例至资源组...")
req = JoinResourceGroupRequest()
req.set_ResourceId(instance_id)
req.set_ResourceType("instance")
req.set_ResourceGroupId(resource_group_id)
result = client.do_action_with_exception(req)
log_action(f"✅ 实例 {instance_id} 成功转移到资源组 {resource_group_id}")
print(f"✅ 成功转移实例 {instance_id} 至资源组 {resource_group_id}")
return
except Exception as e:
print(f"⚠️ 第 {i+1} 次尝试失败,错误:{e}")
if "InvalidResourceGroup.NotFound" in str(e) or "timeout" in str(e):
print("⏳ 资源组可能未同步或超时,等待 3 秒后重试...")
time.sleep(3)
else:
import traceback
traceback.print_exc()
raise
raise RuntimeError(f"❌ ECS 中资源组未同步成功: {resource_group_id}")
except Exception as e:
import traceback
traceback.print_exc()
raise RuntimeError(f"❌ 资源组转移失败: {e}")