Unirech阿里云国际版云服务器代充-使用Python批量创建实例

陈和裕
2023-12-01


当您对海外云服务器有需求时,可选择Unirech阿里云代充,那么在注册好账户之后,下面将介绍如何通过RunInstances批量创建实例接口,可以帮助您一次创建多个阿里云国际版海外云服务器实例来完成应用程序的开发和部署,并方便灵活的资源创建。

一、准备阶段。

1.在调用API之前,您需要创建AccessKey。与 CreateInstance 接口相比,RunInstances 接口可以一次创建多达100个阿里云国际版云服务器实例,以避免重复调用。实例进行创建工作之后,实例会以及自动学习变成Starting状态,然后可以变成Running状态,不需要您调用StartInstance的操作。

2.如果在创建实例时指定了InternetMaxBandwidthOut,则公共网络IP将自动分配给您,而无需调用分配IP的操作。

3.您还可以一次创建100个抢占式实例,从而提供所需的灵活性。

4.创建参数与CreateInstance兼容,增加了Amount参数设置创建次数,增加了AutoReleaseTime参数设置自动释放时间,所以不需要设置自动释放时间。

5.创建返回一个InstanceIdSets会记录进行相关的InstanceIds,您只需我们要根据实例ID轮询实例状态信息即可。

二、安装阶段。

下面提供了一个完整的代码示例,用于批量创建ECS实例。

1.安装ECS Python SDK

首先,确保您有 Python 的 Runtime,2.7或更高版本。

Python SDK应该是4.4.3及以上版本。如果使用的是旧版本的SDK,则需要更新它。

pip install aliyun-python-sdk-ecs

如果一个提示您没有进行权限,请切换sudo继续工作执行。

sudo pip install aliyun-python-sdk-ecs

完整代码

#  coding=utf-8# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'# make sure the sdk version is 4.4.3, you can use command 'pip show aliyun-python-sdk-ecs' to checkimport jsonimport loggingimport timefrom aliyunsdkcore import clientfrom aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequestfrom aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest logging.basicConfig(level=logging.INFO,                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',                    datefmt='%a, %d %b %Y %H:%M:%S')# 您的access key Id。ak_id = "your-access-key-id"# 您的access key secret。ak_secret = "your-access-key-secret"# 设置地域。region_id = "cn-hangzhou"clt = client.AcsClient(ak_id, ak_secret, region_id)# 设置实例规格。instance_type = "ecs.g6.large"# 选择的交换机。vswitch_id = "vsw-bp1ddbrxdlrcbim46****"# 使用的镜像信息。image_id = "<imageid>"# 当前VPC类型的安全组。security_group_id = "sg-bp1i4c0xgqxadew2****"# 批量创建ECS实例的数量, 取值范围:1-100, 默认值:1。amount = 2;# 自动释放时间。使用UTC时间,格式为 yyyy-MM-ddTHH:mm:ssZ。最短释放时间为当前时间半小时之后;最长释放时间不能超过当前时间三年。auto_release_time = "2020-04-17T18:20:00Z"# 创建ECS实例并启动。def create_multiple_instances():    request = build_request()    request.set_Amount(amount)    _execute_request(request)# 创建ECS实例并分配公网IP。def create_multiple_instances_with_public_ip():    request = build_request()    request.set_Amount(amount)    request.set_InternetMaxBandwidthOut(1)    _execute_request(request)# 创建ECS实例并设置自动释放时间。def create_multiple_instances_with_auto_release_time():    request = build_request()    request.set_Amount(amount)    request.set_AutoReleaseTime(auto_release_time)    _execute_request(request)def _execute_request(request):    response = _send_request(request)    if response.get('Code') is None:        instance_ids = response.get('InstanceIdSets').get('InstanceIdSet')        running_amount = 0        while running_amount < amount:            time.sleep(10)            running_amount = check_instance_running(instance_ids)    print("ecs instance %s is running", instance_ids)def check_instance_running(instance_ids):    request = DescribeInstancesRequest()    request.set_InstanceIds(json.dumps(instance_ids))    response = _send_request(request)    if response.get('Code') is None:        instances_list = response.get('Instances').get('Instance')        running_count = 0        for instance_detail in instances_list:            if instance_detail.get('Status') == "Running":                running_count += 1        return running_countdef build_request():    request = RunInstancesRequest()    request.set_ImageId(image_id)    request.set_VSwitchId(vswitch_id)    request.set_SecurityGroupId(security_group_id)    request.set_InstanceName("Instance-Name")    request.set_InstanceType(instance_type)    return request# 发送API请求def _send_request(request):    request.set_accept_format('json')    try:        response_str = clt.do_action(request)        logging.info(response_str)        response_detail = json.loads(response_str)        return response_detail    except Exception as e:        logging.error(e)if __name__ == '__main__':    print ("hello ecs batch create instance")    # 创建ECS实例并启动。    create_multiple_instances()    # 创建绑定公网IP的ECS实例。    # create_multiple_instances_with_public_ip()    # 创建ECS实例并设置自动释放时间。

   # create_multiple_instances_with_auto_release_time()

2.批量创建实例

首先创建RunInstancesRequest的实例,然后填写所需的参数。

下面的示例创建两个海外云服务器实例,并自动添加10秒钟的实例运行状态检查。创建过程结束,直到实例状态变为 Running。

# 您的access key Id。ak_id = "your-access-key-id"# 您的access key secret。ak_secret = "your-access-key-secret"# 设置地域。region_id = "cn-hangzhou"clt = client.AcsClient(ak_id, ak_secret, region_id)# 设置实例规格。instance_type = "ecs.g6.large"# 选择的交换机。vswitch_id = "vsw-bp1ddbrxdlrcbim46****"# 使用的镜像信息。image_id = "<imageid>"# 当前VPC类型的安全组。security_group_id = "sg-bp1i4c0xgqxadew2****"# 批量创建ECS实例的数量, 取值范围:1-100, 默认值:1。amount = 2;# 自动释放时间。使用UTC时间,格式为 yyyy-MM-ddTHH:mm:ssZ。最短释放时间为当前时间半小时之后;最长释放时间不能超过当前时间三年。auto_release_time = "2020-04-17T18:20:00Z"# 创建ECS实例并启动。def create_multiple_instances():    request = build_request()    request.set_Amount(amount)    _execute_request(request)def _execute_request(request):    response = _send_request(request)    if response.get('Code') is None:        instance_ids = response.get('InstanceIdSets').get('InstanceIdSet')        running_amount = 0        while running_amount < amount:            time.sleep(10)            running_amount = check_instance_running(instance_ids)    print("ecs instance %s is running", instance_ids)def check_instance_running(instance_ids):    request = DescribeInstancesRequest()    request.set_InstanceIds(json.dumps(instance_ids))    response = _send_request(request)    if response.get('Code') is None:        instances_list = response.get('Instances').get('Instance')        running_count = 0        for instance_detail in instances_list:            if instance_detail.get('Status') == "Running":                running_count += 1        return running_countdef build_request():    request = RunInstancesRequest()    request.set_ImageId(image_id)    request.set_VSwitchId(vswitch_id)    request.set_SecurityGroupId(security_group_id)    request.set_InstanceName("Instance-Name")    request.set_InstanceType(instance_type)    return request# 发送API请求def _send_request(request):    request.set_accept_format('json')    try:        response_str = clt.do_action(request)        logging.info(response_str)        response_detail = json.loads(response_str)        return response_detail    except Exception as e:        logging.error(e)

创建批处理实例并自动分配公共IP

相比可以批量进行创建一个海外云服务器实例的代码,只需要通过添加一行数据属性,指定公网的带宽即可。下面的例子中默认给实例都分配了1 M的按流量带宽。

# 创建ECS实例并分配公网IP。def create_multiple_instances_with_public_ip():    request = build_request()    request.set_Amount(amount)    request.set_InternetMaxBandwidthOut(1)    _execute_request(request)

批量创建实例并自动设置自动发布时间

不需要批量创建实例,只需要添加一行属性来指定实例的自动释放时间。自动发布时间用 ISO 8601表示,并要求 UTC 时间为 yyyy-MM-ddTHH:mm:ssZ格式。最低限度为当前时间后半小时,最高限度为当前时间后不超过三年。

# 创建ECS实例并设置自动释放时间。def create_multiple_instances_with_auto_release_time():    request = build_request()    request.set_Amount(amount)    request.set_AutoReleaseTime(auto_release_time)    _execute_request(request)

Unirech提供多渠道海外云服务器代充:阿里云国际站、腾讯云国际站、AWS、微软云等众多海外云厂商代充值,无需绑定paypal,支持多币种支付,充值越多优惠越多 TG @aliyundcz

 类似资料: