日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ECS开放批量创建实例接口RunInstances

發布時間:2024/8/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ECS开放批量创建实例接口RunInstances 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要: 為了更方便的實現彈性的資源創建,方便您一次運行多臺ECS按量實例來完成應用的開發和部署,我們開放了ECS的批量創建實例接口RunInstances。和目前的CreateInstance相比,RunInstances有下面的優點: 批量提交一定的ECS實例數目,如果庫存不足,則直接失敗,避免您創建的實例數目不能滿足需求而額外產生費用。

為了更方便的實現彈性的資源創建,方便您一次運行多臺ECS按量實例來完成應用的開發和部署,我們開放了ECS的批量創建實例接口RunInstances。和目前的CreateInstance相比,RunInstances有下面的優點:

單次可以最多創建100臺實例,避免重復調用。
批量提交一定的ECS實例數目,如果庫存不足,則直接失敗,避免您創建的實例數目不能滿足需求而額外產生費用。
實例創建之后,會自動的開始Start,實例會變成Starting狀態,直至Running,不需要您調用Start的操作。
創建實例的時候指定了InternetMaxBandwidthOut,則自動為您分配公網IP,不需要您再調用分配IP的操作。
您可以在創建的時候指定自動釋放時間,自動釋放,不需要您再額外設置自動釋放時間。
您也可以一次創建100臺的SpotInstance,充分滿足您的彈性需求。
創建的參數保持和CreateInstance保持兼容,提供了Amount來設定創建的個數,提供了AutoReleaseTime來設定自動釋放時間。
創建返回一個InstanceIdSets會記錄相關的InstanceIds,您只需要根據實例ID輪詢實例狀態即可。
下文以Python為示例,其他的版本SDK都需要大于4.4.3即可。

安裝ECS Python SDK
首先確保您已經具備Python的Runtime,本文中使用的Python版本為2.7+。

pip install aliyun-python-sdk-ecs

如果提示您沒有權限,請切換sudo 繼續執行。

sudo pip install aliyun-python-sdk-ecs

本文使用的sdk版本為4.4.3, 如果您使用是舊版本的sdk,需要你更新下。

批量創建實例
首先創建RunInstancesRequest的實例,然后填入相關需要的參數即可。

下面的例子創建了2臺實例,并且添加了自動每隔10秒鐘檢查一次實例的運行狀態。直到實例狀態變成Running結束創建流程。

# your access key Id ak_id = "YOU_ACCESS_KEY_ID" # your access key secret ak_secret = "YOU_ACCESS_SECRET" region_id = "cn-beijing"# your expected instance type instance_type = "ecs.n4.small" # 選擇的vswitchId vswitch_id = "vws-xxxxx" # 使用的鏡像信息 image_id = "centos_7_03_64_20G_alibase_20170818.vhd" # 當前vpc類型的安全組 security_group_id = "sg-xxxxx"# instance number to lunch, support 1-100, default value is 100 amount = 2;# instance auto delete time 按照 ISO8601 標準表示,并需要使用 UTC 時間。格式為 yyyy-MM-ddTHH:mm:ssZ 。 最短在當前時間之后半小時。最長不能超過當前時間起三年 auto_release_time = "2017-12-05T22:40:00Z"clt = client.AcsClient(ak_id, ak_secret, 'cn-beijing')# create instance automatic running def batch_create_instance():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 = 0while 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 = 0for instance_detail in instances_list:if instance_detail.get('Status') == "Running":running_count += 1return 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("Instance12-04")request.set_InstanceType(instance_type)return request# send open api request 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_detailexcept Exception as e:logging.error(e)

批量創建實例并自動分配公網IP
相比上面的代碼,我們只需要添加一行屬性,指定公網的帶寬即可。下面的例子中我們默認給實例都分配了1M的按流量帶寬。

# create instance with public ip. def batch_create_instance_with_public_ip():request = build_request()request.set_Amount(amount)request.set_InternetMaxBandwidthOut(1)_execute_request(request)

批量創建實例并自動設置自動釋放時間
相比上面的代碼,我們只需要添加一行屬性,實例的自動釋放時間即可。 自動釋放時間按照 ISO8601 標準表示,并需要使用 UTC 時間。格式為 yyyy-MM-ddTHH:mm:ssZ 。 最短在當前時間之后半小時。最長不能超過當前時間起三年。

# create instance with auto release time. def batch_create_instance_with_auto_release_time():request = build_request()request.set_Amount(amount)request.set_AutoReleaseTime(auto_release_time)_execute_request(request)

完整代碼如下

# 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 json import logging import timefrom aliyunsdkcore import client from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequestlogging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S')# your access key Id ak_id = "YOU_ACCESS_KEY_ID" # your access key secret ak_secret = "YOU_ACCESS_SECRET" region_id = "cn-beijing"# your expected instance type instance_type = "ecs.n4.small" # 選擇的vswitchId vswitch_id = "vws-xxxxx" # 使用的鏡像信息 image_id = "centos_7_03_64_20G_alibase_20170818.vhd" # 當前vpc類型的安全組 security_group_id = "sg-xxxxx"# instance number to lunch, support 1-100, default value is 100 amount = 2;# instance auto delete time 按照 ISO8601 標準表示,并需要使用 UTC 時間。格式為 yyyy-MM-ddTHH:mm:ssZ 。 最短在當前時間之后半小時。最長不能超過當前時間起三年 auto_release_time = "2017-12-05T22:40:00Z"clt = client.AcsClient(ak_id, ak_secret, 'cn-beijing')# create instance automatic running def batch_create_instance():request = build_request()request.set_Amount(amount)_execute_request(request)# create instance with public ip. def batch_create_instance_with_public_ip():request = build_request()request.set_Amount(amount)request.set_InternetMaxBandwidthOut(1)_execute_request(request)# create instance with auto release time. def batch_create_instance_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 = 0while 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 = 0for instance_detail in instances_list:if instance_detail.get('Status') == "Running":running_count += 1return 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("Instance12-04")request.set_InstanceType(instance_type)return request# send open api request 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_detailexcept Exception as e:logging.error(e)if __name__ == '__main__':print "hello ecs batch create instance"# batch_create_instance()# batch_create_instance_with_public_ip()# batch_create_instance_with_auto_release_time()

通過RunInstances將簡化您的資源創建和運行管理。

總結

以上是生活随笔為你收集整理的ECS开放批量创建实例接口RunInstances的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。