SDK開發指南
負載均衡SLB支持Java、Python、C++、Go、C#和PHP SDK開發。
下表列舉了各語言SDK的GitHub下載地址和開發指南,更多SDK的信息,請訪問阿里雲SDK平臺。
SDK | GitHub下載地址 | 說明文檔 |
---|---|---|
Java SDK | SLB Java SDK | 快速開始 |
Python SDK | SLB Python SDK | 快速開始 |
Go SDK | SLB Go SDK | 快速開始 |
C# SDK | SLB C# SDK | 快速開始 |
PHP SDK | SLB PHP SDK | 快速開始 |
安裝阿里雲Python SDK
介紹如何在本地搭建可以運行負載均衡Python SDK示例的Python開發環境。
背景信息
- 阿里雲Python SDK支持Python 2.7或更高版本。
- 要運行負載均衡的Python SDK示例,您需要安裝阿里雲Python SDK的核心庫和SLB Python SDK。
操作步驟
-
安裝Python。
- 登錄Python下載地址。
-
下載2.7或更高版本的Python。
在下載列表中選擇Window平臺安裝包,包格式爲:python-XYZ.msi 文件 , XYZ 爲你要安裝的版本號。
- 下載後,雙擊下載包,進入Python安裝嚮導,使用默認設置即可。
-
設置環境變量。
在Path行添加python安裝路徑和pip命令運行程序所在的目錄,目錄之間以;分隔。
C:\Python27;C:\Python27\Scripts
-
在cmd命令行,執行
python
命令,顯示類似如下,進入Python交互式環境,表示Python安裝成功。Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AM D64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
-
安裝阿里雲SDK核心庫。
- 如果您使用Python 2.x,執行以下命令,安裝阿里雲SDK核心庫:
pip install aliyun-python-sdk-core
- 如果您使用Python 3.x,執行以下命令,安裝阿里雲SDK核心庫:
pip install aliyun-python-sdk-core-v3
關於Python及PIP的使用說明,請參考Python文檔。
- 如果您使用Python 2.x,執行以下命令,安裝阿里雲SDK核心庫:
-
執行如下命令,安裝SLB SDK。
pip install aliyun-python-sdk-slb
-
執行如下命令,雲監控SDK。
pip install aliyun-python-sdk-cms
準備工作
在運行SLB場景功能的SDK文件前,需要先在sdk_examples\sdk_lib文件夾下完成公共文件配置。
在開始運行示例腳本前,確保您已完成以下準備工作:
- 獲取AccessKey。
確保您已經有了用於身份驗證的AccessKey ID和AccessKey Secret。如果尚未生成AK,參考創建AccessKey。
- 確保您的阿里雲賬戶金額不少於100元。
setup.py
記錄項目模塊添加到python path的規則。
setup.py中定義哪些模塊需要加入到python path和第三方依賴,安裝完成後,其他python項目可以使用setup.py中定義的模塊。
def find_version(*file_paths):
version_file = read(*file_paths)
version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]",
version_file, re.M)
if version_match:
return version_match.group(1)
raise RuntimeError("Unable to find version string.")
setup(
name='sdk_lib',
version='0.1',
license='GPL',
auxxexxil='[email protected]',
description='aliyun sdk_examples library.',
packages=['sdk_lib'
],
zip_safe=False,
py_modules=[],
package_data = {'': ['*.conf']}
)
創建和刪除SLB實例
介紹如何使用Python SDK創建一個SLB實例,創建成功後刪除該實例。
背景信息
在華北3張家口地域創建一個名爲SLB1的SLB實例,主可用區爲cn-zhangjiakou-a,備可用區爲cn-zhangjiakou-b,實例計費類型爲按量計費,規格爲slb.s1.small,監聽的帶寬峯值爲1Mbps,其他參數使用默認值。實例創建成功後,刪除該實例。
操作步驟
- 在下載的SDK目錄中,打開$aliyun-openapi-python-sdk-examples\sdk_examples\examples\slb文件夾。
-
使用編輯器打開slb_quick_start.py文件,您需要配置用戶鑑權參數ACS_CLIENT,其他參數根據實際情況配置後,保存退出。
#encoding=utf-8 import sys import json #調用AcsClient參數進行身份驗證 from aliyunsdkcore.client import AcsClient #使用阿里雲官方sdk的異常處理模塊 from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException #調用創建SLB實例API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerRequest #調用刪除SLB實例API from aliyunsdkslb.request.v20140515 import DeleteLoadBalancerRequest #異常處理邏輯 from sdk_lib.exception import ExceptionHandler #命令行打印日誌 from sdk_lib.common_util import CommonUtil #用戶身份驗證參數配置 ACS_CLIENT = AcsClient( 'your-access-key-id', #your-access-key-id 'your-access-key-secret', #your-access-key-secret 'cn-zhangjiakou', #your-region-id ) ''' 創建slb實例->刪除slb實例 ''' def create_load_balancer(params): ''' create_load_balancer:創建slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27577.html ''' try: #設置調用參數 request = CreateLoadBalancerRequest.CreateLoadBalancerRequest() request.set_MasterZoneId(params["master_zone_id"]) request.set_SlaveZoneId(params["slave_zone_id"]) request.set_LoadBalancerName(params["load_balancer_name"]) request.set_PayType(params["pay_balancer_type"]) request.set_LoadBalancerSpec(params["load_balancer_spec"]) request.set_Bandwidth(params["balancer_listener_bandwith"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def delete_load_balancer(load_balancer_id): ''' delete_load_balancer:刪除slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27579.html ''' try: request = DeleteLoadBalancerRequest.DeleteLoadBalancerRequest() #負載均衡實例的ID request.set_LoadBalancerId(load_balancer_id) response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def main(): #設置創建SLB的實例參數值 params = {} #設置新建SLB實例的主可用區爲cn-zhangjiakou-a params["master_zone_id"] = "cn-zhangjiakou-a" #設置新建SLB實例的主可用區爲cn-zhangjiakou-b params["slave_zone_id"] = "cn-zhangjiakou-b" #設置新建SLB實例的名稱爲SLB1 params["load_balancer_name"] = "SLB1" #設置新建SLB實例的計費類型爲按量計費 params["pay_balancer_type"] = "PayOnDemand" #設置新建SLB實例的規格爲slb.s1.small params["load_balancer_spec"] = "slb.s1.small" #監聽的帶寬峯值爲6Mbps params["balancer_listener_bandwith"] = "1" #創建slb實例 #獲取create_load_balancer函數返回值,load_balancer_json爲結果的json串 load_balancer_json = create_load_balancer(params) #打印 load_balancer_json結果,其中"create_load_balancer"是對json串起的名字 CommonUtil.log("create_load_balancer", load_balancer_json) #刪除slb實例 #刪除返回的LoadBalancerId對應的SLB實例 load_balancer_json = delete_load_balancer(load_balancer_json["LoadBalancerId"]) #打印 load_balancer_json結果 CommonUtil.log("delete_load_balancer", load_balancer_json) if __name__ == "__main__": sys.exit(main())
-
進入setup.py所在的目錄,執行如下命令,完成環境初始化配置。
python setup.py install
-
進入slb_quick_start.py所在的目錄,執行如下命令,運行創建和刪除SLB實例示例。
python slb_quick_start.py
系統顯示類似如下:---------------------------create_load_balancer--------------------------- { "VpcId": "", "AddressIPVersion": "ipv4", "LoadBalancerName": "SLB1", "ResourceGroupId": "rg-acfmxxxxxxxxxy", "VSwitchId": "", "RequestId": "070A9361-EA2B-4A4E-91E8-F70C1E47866A", "Address": "172.16.XX.XX", "NetworkType": "classic", "LoadBalancerId": "lb-8vbninnfxxxxxxxxxxxxx" } ---------------------------delete_load_balancer--------------------------- { "RequestId": "4825E5BB-5131-4A1E-AF67-0EF3E8E5B323" }
創建TCP監聽
使用Python SDK給SLB實例創建TCP監聽,創建完成後刪除SLB實例。
前提條件
背景信息
- 在華北3張家口地域創建一個名爲SLB1的SLB實例,主可用區爲cn-zhangjiakou-a,備可用區爲cn-zhangjiakou-b,實例計費類型爲按量計費,規格爲slb.s1.small,其他配置使用系統默認值。
- 將張家口地域的兩臺ECS實例添加到默認服務器組,用來分發流量,ECS實例的後端服務權重都爲100。
- 創建TCP監聽,SLB實例前端使用的端口爲80,後端服務器開放用來接收請求的端口爲80,健康檢查協議爲TCP,不限制監聽帶寬峯值,其他使用默認值。
- TCP監聽創建完成後,從默認服務器組中移除ECS實例。
- 刪除新建的SLB實例。
操作步驟
- 在下載的SDK目錄中,打開$aliyun-openapi-python-sdk-examples\sdk_examples\examples\slb文件夾。
-
使用編輯器打開slb_create_tcp_listener.py文件,您需要配置用戶鑑權參數ACS_CLIENT,其他參數根據實際情況配置後,保存退出。
#encoding=utf-8 import json import sys #調用AcsClient參數進行身份驗證 from aliyunsdkcore.client import AcsClient #使用阿里雲官方sdk的異常處理模塊 from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException #調用創建SLB實例API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerRequest #調用添加默認服務器組API from aliyunsdkslb.request.v20140515 import AddBackendServersRequest #調用添加TCP監聽API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerTCPListenerRequest #調用從默認服務器組中移除ECS實例API from aliyunsdkslb.request.v20140515 import RemoveBackendServersRequest #調用刪除SLB實例API from aliyunsdkslb.request.v20140515 import DeleteLoadBalancerRequest #命令行打印日誌 from sdk_lib.common_util import CommonUtil #異常處理邏輯 from sdk_lib.exception import ExceptionHandler ''' 創建slb實例->添加後端服務器->創建tcp監聽->刪除後端服務器->刪除slb實例 ''' #client參數配置 ACS_CLIENT = AcsClient( 'your-access-key-id', #your-access-key-id 'your-access-key-secret', #your-access-key-secret 'cn-zhangjiakou', #your-region-id ) TRY_TIME = 3 def create_load_balancer(params): ''' create_load_balancer:創建slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27577.html ''' try: #設置創建SLB實例的調用參數 request = CreateLoadBalancerRequest.CreateLoadBalancerRequest() request.set_MasterZoneId(params["master_zone_id"]) request.set_SlaveZoneId(params["slave_zone_id"]) request.set_LoadBalancerName(params["load_balancer_name"]) request.set_PayType(params["pay_balancer_type"]) request.set_LoadBalancerSpec(params["load_balancer_spec"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def add_backend_servers(params): ''' add_backend_servers:添加後端服務器 官網API參考鏈接: https://help.aliyun.com/document_detail/27632.html ''' counter = 0 while counter < TRY_TIME: try: #設置添加默認服務器組的調用參數 request = AddBackendServersRequest.AddBackendServersRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #要添加的後端服務器列表 request.set_BackendServers(params["backend_servers"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 def create_tcp_listener(params): ''' create_tcp_listener:創建tcp監聽 官網API參考鏈接: https://help.aliyun.com/document_detail/27594.html ''' counter = 0 while counter < TRY_TIME: try: #設置創建TCP監聽的調用參數 request = CreateLoadBalancerTCPListenerRequest.CreateLoadBalancerTCPListenerRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #負載均衡實例前端使用的端口 request.set_ListenerPort(params["listener_port"]) #負載均衡實例後端使用的端口 request.set_BackendServerPort(params["backend_server_port"]) #監聽的健康檢查協議 request.set_HealthCheckType(params["listener_health_check"]) #設置監聽的帶寬峯值 request.set_Bandwidth(params["listener_bandwidth"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 def remove_backend_servers(params): ''' add_backend_servers:刪除後端服務器 官網API參考鏈接: https://help.aliyun.com/document_detail/27633.html ''' counter = 0 while counter < TRY_TIME: try: #設置刪除後端服務器的調用參數 request = RemoveBackendServersRequest.RemoveBackendServersRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #要刪除的後端服務器列表 request.set_BackendServers(params["backend_servers"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 def delete_load_balancer(load_balancer_id): ''' delete_load_balancer:刪除slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27579.html ''' try: #設置刪除SLB實例的調用參數 request = DeleteLoadBalancerRequest.DeleteLoadBalancerRequest() #負載均衡實例的ID request.set_LoadBalancerId(load_balancer_id) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def main(): params = {} #設置創建SLB實例的參數 #設置新建SLB實例的主可用區爲cn-zhangjiakou-a params["master_zone_id"] = "cn-zhangjiakou-a" #設置新建SLB實例的主可用區爲cn-zhangjiakou-b params["slave_zone_id"] = "cn-zhangjiakou-b" #設置新建SLB實例的名稱爲SLB1 params["load_balancer_name"] = "SLB1" #設置新建SLB實例的計費類型爲按量計費 params["pay_balancer_type"] = "PayOnDemand" #設置新建SLB實例的規格爲slb.s1.small params["load_balancer_spec"] = "slb.s1.small" #設置添加到默認服務器組的ECS的實例ID和權重 params["backend_servers"] = [{"ServerId":"i-8vbe8yi8krxxxxxxxxxxw","Weight":"100"},{"ServerId":"i-8vbe8yi8kccxxxxxxxxxv","Weight":"100"}] #設置添加TCP監聽的參數 #前端使用的端口爲80 params["listener_port"] = 80 #後端服務器開放用來接收請求的端口爲80 params["backend_server_port"] = 80 #健康檢查協議爲TCP params["listener_health_check"] = "tcp" #TCP監聽的帶寬峯值爲-1,即不限制帶寬峯值 params["listener_bandwidth"] = -1 #創建slb實例 #獲取create_load_balancer函數返回值,load_balancer_json爲結果的json串 load_balancer_json = create_load_balancer(params) #打印 load_balancer_json結果,其中"create_load_balancer"是對json串起的名字 CommonUtil.log("create_load_balancer", load_balancer_json) #slb實例id params["load_balancer_id"] = load_balancer_json["LoadBalancerId"] #添加後端服務器 load_balancer_json = add_backend_servers(params) CommonUtil.log("add_backend_servers", load_balancer_json) #創建tcp監聽 load_balancer_json = create_tcp_listener(params) CommonUtil.log("create_tcp_listener", load_balancer_json) #刪除後端服務器 load_balancer_json = remove_backend_servers(params) CommonUtil.log("remove_backend_servers", load_balancer_json) #刪除slb實例 #刪除返回的LoadBalancerId對應的SLB實例 load_balancer_json = delete_load_balancer(load_balancer_json["LoadBalancerId"]) #打印 load_balancer_json結果 CommonUtil.log("delete_load_balancer", load_balancer_json) if __name__ == "__main__": sys.exit(main())
-
進入setup.py所在的目錄,執行如下命令,完成環境初始化配置。
python setup.py install
-
進入slb_create_tcp_listener.py所在的目錄,執行如下命令,運行創建TCP監聽示例。
python slb_create_tcp_listener.py
系統顯示類似如下:---------------------------create_load_balancer--------------------------- { "VpcId": "", "AddressIPVersion": "ipv4", "LoadBalancerName": "SLB1", "ResourceGroupId": "rg-acfmxazb4pxxxxx", "VSwitchId": "", "RequestId": "8E72DFDD-E510-4D65-9063-F47B62DE9887", "Address": "39.98.xx.xx", "NetworkType": "classic", "LoadBalancerId": "lb-8vbjd6pzphvjoq29xxxxx" } ---------------------------add_backend_servers--------------------------- { "RequestId": "F6BF0E0B-5837-48A3-9CEC-2EE2CED5293A", "BackendServers": { "BackendServer": [ { "ServerId": "i-8vbe8yi8krqri2axxxxx", "Type": "ecs", "Weight": 100 }, { "ServerId": "i-8vbe8yi8krqri2xxxxxx", "Type": "ecs", "Weight": 100 } ] }, "LoadBalancerId": "lb-8vbjd6pzphvjoq29xxxxx" } ---------------------------create_tcp_listener--------------------------- { "RequestId": "6FF090BD-DF9F-49C6-84A6-30F2D9F88489" } ---------------------------remove_backend_servers--------------------------- { "RequestId": "F7D62969-D7F0-4022-95FA-1710DA448B6A", "BackendServers": { "BackendServer": [] }, "LoadBalancerId": "lb-8vbjd6pzphvjoq29xxxxx" } ---------------------------delete_load_balancer--------------------------- { "RequestId": "1A8CB48F-8242-49A9-9958-E762B1E9BA4D" }
更新HTTPS證書
介紹如何使用Python SDK給一個SLB實例創建一個HTTPS監聽,並更新該實例下HTTPS監聽使用的服務器證書。
前提條件
背景信息
- 在華北3張家口地域創建一個名爲SLB1的SLB實例,主可用區爲cn-zhangjiakou-a,備可用區爲cn-zhangjiakou-b,實例計費類型爲按量計費,規格爲slb.s1.small,其他配置使用系統默認值。
- 將張家口地域的兩臺ECS實例添加到默認服務器組,用來分發流量,ECS實例的後端服務權重都爲100。
- 上傳服務器證書。
- 創建HTTPS監聽,SLB實例前端使用的端口爲80,後端服務器開放用來接收請求的端口爲443,關閉健康檢查和會話保持,監聽帶寬峯值爲6Mbps,其他使用默認值。
- 上傳新的服務器證書。
- 更新新建HTTPS監聽的服務器證書。
- 刪除新建的SLB實例。
操作步驟
- 在下載的SDK目錄中,打開$aliyun-openapi-python-sdk-examples\sdk_examples\examples\slb文件夾。
-
使用編輯器打開upload_server_certificate.py文件,您需要配置用戶鑑權參數ACS_CLIENT,其他參數根據實際情況配置後,保存退出。
#encoding=utf-8 import sys import json #調用AcsClient參數進行身份驗證 from aliyunsdkcore.client import AcsClient #使用阿里雲官方sdk的異常處理模塊 from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException #調用上傳證書的API from aliyunsdkslb.request.v20140515 import UploadServerCertificateRequest #調用創建SLB實例API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerRequest #調用添加默認服務器組API from aliyunsdkslb.request.v20140515 import AddBackendServersRequest #調用創建HTTPS監聽的API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerHTTPSListenerRequest #調用修改HTTPS監聽的API from aliyunsdkslb.request.v20140515 import SetLoadBalancerHTTPSListenerAttributeRequest #調用刪除SLB實例API from aliyunsdkslb.request.v20140515 import DeleteLoadBalancerRequest ##異常處理邏輯 from sdk_lib.exception import ExceptionHandler #命令行導入日誌 from sdk_lib.common_util import CommonUtil #用戶身份鑑權參數配置 ACS_CLIENT = AcsClient( 'your-access-key-id', #your-access-key-id 'your-access-key-secret', #your-access-key-secret 'cn-zhangjiakou', #your-region-id ) #失敗重試次數 TRY_TIME = 3 ''' 創建slb實例->上傳服務器證書->創建https監聽->上傳新的服務器證書 ->循環修改https監聽配置 ''' def create_load_balancer(params): ''' create_load_balancer:創建slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27577.html ''' try: #設置創建SLB實例的調用參數 request = CreateLoadBalancerRequest.CreateLoadBalancerRequest() request.set_MasterZoneId(params["master_zone_id"]) request.set_SlaveZoneId(params["slave_zone_id"]) request.set_LoadBalancerName(params["load_balancer_name"]) request.set_PayType(params["pay_balancer_type"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def add_backend_servers(params): ''' add_backend_servers:添加後端服務器 官網API參考鏈接: https://help.aliyun.com/document_detail/27632.html ''' counter = 0 while counter < TRY_TIME: try: #設置添加默認服務器組的調用參數 request = AddBackendServersRequest.AddBackendServersRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #要添加的後端服務器列表 request.set_BackendServers(params["backend_servers"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 def upload_server_certificate(params): ''' upload_server_certificate:上傳服務器證書 官網API參考鏈接: https://help.aliyun.com/document_detail/34181.html ''' counter = 0 while counter < TRY_TIME: try: request = UploadServerCertificateRequest.UploadServerCertificateRequest() #要上傳的公鑰證書 request.set_ServerCertificate(params["server_certificate"]) #需要上傳的私鑰 request.set_PrivateKey(params["private_key"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) finally: counter += 1 def create_https_listener(params): ''' create_https_listener:創建HTTPS監聽 官網API參考鏈接: https://help.aliyun.com/document_detail/27593.html ''' counter = 0 while counter < TRY_TIME: try: request = CreateLoadBalancerHTTPSListenerRequest.CreateLoadBalancerHTTPSListenerRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #監聽的帶寬峯值 request.set_Bandwidth(params["bandwidth"]) #負載均衡實例前端使用的端口 request.set_ListenerPort(params["listener_port"]) #是否開啓健康檢查 request.set_HealthCheck(params["health_check"]) #是否開啓會話保持 request.set_StickySession(params["sticky_session"]) #負載均衡實例後端使用的端口 request.set_BackendServerPort(params["backend_server_port"]) #服務器證書的ID request.set_ServerCertificateId(params["server_certificate_id"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) finally: counter += 1 def set_https_listener_attribute(params): ''' set_https_listener_attribute:修改HTTPS監聽的配置 官網API參考鏈接: https://help.aliyun.com/document_detail/27603.html ''' counter = 0 while counter < TRY_TIME: try: request = SetLoadBalancerHTTPSListenerAttributeRequest.SetLoadBalancerHTTPSListenerAttributeRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #監聽的帶寬峯值 request.set_Bandwidth(params["bandwidth"]) #負載均衡實例前端使用的端口 request.set_ListenerPort(params["listener_port"]) #是否開啓健康檢查 request.set_HealthCheck(params["health_check"]) #是否開啓會話保持 request.set_StickySession(params["sticky_session"]) #服務器證書的ID request.set_ServerCertificateId(params["server_certificate_id"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) finally: counter += 1 def delete_load_balancer(load_balancer_id): ''' delete_load_balancer:刪除slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27579.html ''' try: #設置刪除SLB實例的調用參數 request = DeleteLoadBalancerRequest.DeleteLoadBalancerRequest() #負載均衡實例的ID request.set_LoadBalancerId(load_balancer_id) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def main(): params = {} #設置創建SLB實例的參數 #設置新建SLB實例的主可用區爲cn-zhangjiakou-a params["master_zone_id"] = "cn-zhangjiakou-a" #設置新建SLB實例的主可用區爲cn-zhangjiakou-b params["slave_zone_id"] = "cn-zhangjiakou-b" #設置新建SLB實例的名稱爲SLB1 params["load_balancer_name"] = "SLB1" #設置新建SLB實例的計費類型爲按量計費 params["pay_balancer_type"] = "PayOnDemand" #設置添加到默認服務器組的ECS的實例ID和權重 params["backend_servers"] = [{"ServerId":"i-8vbe8yixxxxxxxxxxxxxw","Weight":"100"},{"ServerId":"i-8vbe8yxxxxxxxxxxxxxj9v","Weight":"100"}] #設置上傳服務器證書的參數 #設置創建HTTPS監聽的參數 #關閉健康檢查 params["health_check"] = "off" #設置監聽的帶寬峯值 params["bandwidth"] = 6 #負載均衡實例前端使用的端口 params["listener_port"] = 80 #設置負載均衡實例後端使用的端口 params["backend_server_port"] = 443 #關閉會話保持 params["sticky_session"] = "off" #創建slb實例 #獲取create_load_balancer函數返回值,load_balancer_json爲結果的json串 load_balancer_json = create_load_balancer(params) #打印 load_balancer_json結果,其中"create_load_balancer"是對json串起的名字 CommonUtil.log("create_load_balancer", load_balancer_json) #上傳服務器證書 #要上傳的公鑰證書 params["server_certificate"] = "-----BEGIN CERTIFICATE-----xxxxxxx-----END CERTIFICATE-----" params["private_key"] = "-----BEGIN RSA PRIVATE KEY-----xxxxxxxxxxx-----END RSA PRIVATE KEY-----" CommonUtil.log("upload_server_certificate", result_json) params["server_certificate_id"] = result_json["ServerCertificateId"] #slb實例id params["load_balancer_id"] = load_balancer_json["LoadBalancerId"] #創建https監聽 result_json = create_https_listener(params) CommonUtil.log("create_https_listener", result_json) #上傳新的服務器證書 #要上傳的新公鑰證書 params["server_certificate"] = "-----BEGIN CERTIFICATE-----xxxxxxx-----END CERTIFICATE-----" params["private_key"] = "-----BEGIN RSA PRIVATE KEY-----xxxxxxxxxxx-----END RSA PRIVATE KEY-----" result_json = upload_server_certificate(params) CommonUtil.log("upload_server_certificate", result_json) # params["server_certificate_id"] = result_json["ServerCertificateId"] #修改https監聽配置 result_json = set_https_listener_attribute(params) CommonUtil.log("set_https_listener_attribute", result_json) #刪除slb實例 #刪除返回的LoadBalancerId對應的SLB實例 load_balancer_json = delete_load_balancer(load_balancer_json["LoadBalancerId"]) #打印 load_balancer_json結果 CommonUtil.log("delete_load_balancer", load_balancer_json) if __name__ == "__main__": sys.exit(main())
-
進入setup.py所在的目錄,執行如下命令,完成環境初始化配置。
python setup.py install
-
進入upload_server_certificate.py所在的目錄,執行如下命令,運行更新HTTPS證書示例。
python upload_server_certificate.py
系統顯示類似如下:---------------------------create_load_balancer--------------------------- { "VpcId": "", "AddressIPVersion": "ipv4", "LoadBalancerName": "SLB1", "ResourceGroupId": "rg-axxxxxxxxxxxy", "VSwitchId": "", "RequestId": "1DEF72EE-CA5C-449D-9E97-2CE460DE7F7A", "Address": "39.98.97.8", "NetworkType": "classic", "LoadBalancerId": "lb-8vxxxxxxxxxxxf" } ---------------------------upload_server_certificate--------------------------- { "ExpireTimeStamp": 1732169065000, "RegionIdAlias": "cn-zhangjiakou", "AliCloudCertificateName": "", "RegionId": "cn-zhangjiakou", "CommonName": "test", "ServerCertificateName": "test", "ExpireTime": "2024-11-21T06:04:25Z", "ResourceGroupId": "rg-axxxxxxxxxxxyy", "RequestId": "D6FB8B7C-B0EA-43E7-AD8F-E0201A9E1A13", "Fingerprint": "cd:90:1b:7b:49:4d:1d:90:f6:01:de:9a:81:7d:31:a7:38:1d:84:8d", "AliCloudCertificateId": "", "IsAliCloudCertificate": 0, "ServerCertificateId": "12xxxxxxxxxxxx3_16xxxxxxxxxx6_-1xxxxxxxx13_-1xxxxxx72" } ---------------------------create_https_listener--------------------------- { "RequestId": "FC70EDC8-06EC-4E1C-97BE-D81571DA23B4" } ---------------------------upload_server_certificate--------------------------- { "ExpireTimeStamp": 1567857600000, "RegionIdAlias": "cn-zhangjiakou", "AliCloudCertificateName": "", "RegionId": "cn-zhangjiakou", "CommonName": "doc.aliyun-slb.top", "ServerCertificateName": "doc.aliyun-slb.top", "ExpireTime": "2019-09-07T12:00:00Z", "ResourceGroupId": "rg-acxxxxxxxxxxxxy", "RequestId": "913E991F-BCC9-4A3D-9802-19084E2CE271", "Fingerprint": "8c:47:1b:a7:8f:02:27:3a:35:7c:e3:47:4a:5f:55:02:ed:e3:57:1e", "SubjectAlternativeNames": { "SubjectAlternativeName": [ "doc.aliyun-slb.top" ] }, "AliCloudCertificateId": "", "IsAliCloudCertificate": 0, "ServerCertificateId": "12xxxxxxxxxxxx3_16xxxxxxx716_4xxxxxxx4_-14xxxxxxxxxx9" } ---------------------------set_https_listener_attribute------------------------- -- { "RequestId": "14275D2B-20F2-4D96-9FC8-7BB2B110155C" } ---------------------------delete_load_balancer--------------------------- { "RequestId": "2A1DF87C-842A-4C1E-AA61-23EB365EB86F" }
查看監控
介紹如何使用Python SDK查看SLB實例的監控參數並配置告警。
前提條件
背景信息
- 在華北3張家口地域新建一個名爲SLB1的按量付費實例,主可用區爲cn-zhangjiakou-a,備可用區爲cn-zhangjiakou-b。
- 爲新建SLB實例創建一個TCP監聽,SLB實例前端使用的端口爲80,後端服務器開放用來接收請求的端口爲80,健康檢查協議爲TCP,將張家口地域的兩臺ECS實例添加到默認服務器組,用來分發流量,ECS實例的後端服務權重都爲100。
- 查詢新建SLB實例QPS使用率。
- 創建告警,當新建SLB實例QPS使用率平均值大於等於35時,發起告警。
- 刪除新建實例。
操作步驟
- 在下載的SDK目錄中,打開$aliyun-openapi-python-sdk-examples\sdk_examples\examples\slb文件夾。
-
使用編輯器打開slb_monitor.py文件,您需要配置用戶鑑權參數ACS_CLIENT,其他參數根據實際情況配置後,保存退出。
#encoding=utf-8 import sys import json #調用AcsClient參數進行身份驗證 from aliyunsdkcore.client import AcsClient #使用阿里雲官方sdk的異常處理模塊 from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException #異常處理邏輯 from sdk_lib.exception import ExceptionHandler #調用創建SLB實例API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerRequest #調用添加默認服務器組API from aliyunsdkslb.request.v20140515 import AddBackendServersRequest #調用添加TCP監聽API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerTCPListenerRequest #調用雲監控的接口查看SLB的最新監控數據 from aliyunsdkcms.request.v20180308 import QueryMetricLastRequest #調用雲監控的接口爲SLB實例創建報警規則 from aliyunsdkcms.request.v20180308 import CreateAlarmRequest #調用刪除SLB實例API from aliyunsdkslb.request.v20140515 import DeleteLoadBalancerRequest #命令行導入日誌 from sdk_lib.common_util import CommonUtil #用戶身份驗證參數配置 ACS_CLIENT = AcsClient( 'your-access-key-id', #your-access-key-id 'your-access-key-secret', #your-access-key-secret 'cn-zhangjiakou', #your-region-id ) #失敗重試次數 TRY_TIME = 3 ''' 創建slb實例->創建tcp監聽->創建後端服務器-> 查詢slb實例端口當前併發連接數->創建告警規則 ''' def create_load_balancer(params): ''' create_load_balancer:創建slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27577.html ''' try: #設置創建SLB實例的調用參數 request = CreateLoadBalancerRequest.CreateLoadBalancerRequest() request.set_MasterZoneId(params["master_zone_id"]) request.set_SlaveZoneId(params["slave_zone_id"]) request.set_LoadBalancerName(params["load_balancer_name"]) request.set_PayType(params["pay_balancer_type"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def add_backend_servers(params): ''' add_backend_servers:添加後端服務器 官網API參考鏈接: https://help.aliyun.com/document_detail/27632.html ''' counter = 0 while counter < TRY_TIME: try: #設置添加默認服務器組的調用參數 request = AddBackendServersRequest.AddBackendServersRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #要添加的後端服務器列表 request.set_BackendServers(params["backend_servers"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 def create_tcp_listener(params): ''' create_tcp_listener:創建tcp監聽 官網API參考鏈接: https://help.aliyun.com/document_detail/27594.html ''' counter = 0 while counter < TRY_TIME: try: #設置創建TCP監聽的調用參數 request = CreateLoadBalancerTCPListenerRequest.CreateLoadBalancerTCPListenerRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #負載均衡實例前端使用的端口 request.set_ListenerPort(params["listener_port"]) #負載均衡實例後端使用的端口 request.set_BackendServerPort(params["backend_server_port"]) #監聽的健康檢查協議 request.set_HealthCheckType(params["listener_health_check"]) #設置監聽的帶寬峯值 request.set_Bandwidth(params["listener_bandwidth"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 def query_metric_last(params): ''' query_metric_last:查詢指定監控對象的最新監控數據 官網API參考鏈接: https://help.aliyun.com/document_detail/51939.html ''' counter = 0 while counter < TRY_TIME: try: request = QueryMetricLastRequest.QueryMetricLastRequest() #名字空間,表明監控數據所屬產品 request.set_Project(params["project"]) #監控項名稱 request.set_Metric(params["metric_name"]) #過濾項 request.set_Dimensions(params['dimensions']) response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) finally: counter += 1 def create_alarm(params): ''' create_alarm:創建報警規則,可以爲某一個實例創建報警規則,也可以爲多個實例同時創建報警規則 官網API參考鏈接: https://help.aliyun.com/document_detail/51910.html ''' counter = 0 while counter < TRY_TIME: try: request = CreateAlarmRequest.CreateAlarmRequest() #產品名稱,參考各產品對應的project request.set_Namespace(params["name_space"]) #報警規則名稱 request.set_Name(params["name"]) #相應產品對應的監控項名稱,參考各產品metric定義 request.set_MetricName(params["metric_name"]) #報警規則對應實例列表 request.set_Dimensions(params["dimensions"]) #統計方法,必須與定義的metric一致 request.set_Statistics(params["statistics"]) #報警比較符 request.set_ComparisonOperator(params["comparison_operator"]) #報警閾值,目前只開放數值類型功能 request.set_Threshold(params["threshold"]) response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) finally: counter += 1 def delete_load_balancer(load_balancer_id): ''' delete_load_balancer:刪除slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27579.html ''' try: #設置刪除SLB實例的調用參數 request = DeleteLoadBalancerRequest.DeleteLoadBalancerRequest() #負載均衡實例的ID request.set_LoadBalancerId(load_balancer_id) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def main(): params = {} #設置創建SLB實例的參數 #設置新建SLB實例的主可用區爲cn-zhangjiakou-a params["master_zone_id"] = "cn-zhangjiakou-a" #設置新建SLB實例的主可用區爲cn-zhangjiakou-b params["slave_zone_id"] = "cn-zhangjiakou-b" #設置新建SLB實例的名稱爲SLB1 params["load_balancer_name"] = "SLB1" #設置新建SLB實例的計費類型爲按量計費 params["pay_balancer_type"] = "PayOnDemand" #設置添加到默認服務器組的ECS的實例ID和權重 params["backend_servers"] = [{"ServerId":"i-8vbe8xxxxxxxxxxxw","Weight":"100"},{"ServerId":"i-8vbe8yixxxxxxxxxxxxv","Weight":"100"}] #設置添加TCP監聽的參數 #前端使用的端口爲80 params["listener_port"] = 80 #後端服務器開放用來接收請求的端口爲80 params["backend_server_port"] = 80 #健康檢查協議爲TCP params["listener_health_check"] = "tcp" #TCP監聽的帶寬峯值爲-1,即不限制帶寬峯值 params["listener_bandwidth"] = -1 #設置查詢監控項的參數 #設置監控數據所屬產品 params["project"] = "acs_slb_dashboard" #設置監控項名稱 params["traffic_tx_new"] = "InstanceQpsUtilization" #設置創建告警的參數 #設置告警規則所屬產品 params["name_space"] = "acs_slb_dashboard" #設置告警規則名稱 params["name"] = "slb_alarm" #設置告警中SLB對應的監控項名稱 params["metric_name"] = "InstanceQpsUtilization" #設置統計方法 params["statistics"] = "Average" #設置報警比較符 params["comparison_operator"] = ">=" #設置報警閾值 params["threshold"] = 35 #創建slb實例 #獲取create_load_balancer函數返回值,load_balancer_json爲結果的json串 load_balancer_json = create_load_balancer(params) #打印 load_balancer_json結果,其中"create_load_balancer"是對json串起的名字 CommonUtil.log("create_load_balancer", load_balancer_json) #slb實例id params["load_balancer_id"] = load_balancer_json["LoadBalancerId"] #創建tcp監聽 result_json = create_tcp_listener(params) CommonUtil.log("create_tcp_listener", result_json) #創建後端服務器 result_json = add_backend_servers(params) CommonUtil.log("add_backend_servers", result_json) #查詢slb實例QPS使用率 params["dimensions"] = '[{"instanceId":"' + load_balancer_json["LoadBalancerId"] + '"}]' result_json = query_metric_last(params) CommonUtil.log("query_metric_last", result_json) #創建告警規則 params["metric_name"] = "InstanceQpsUtilization" result_json = create_alarm(params) CommonUtil.log("create_alarm", result_json) #刪除slb實例 #刪除返回的LoadBalancerId對應的SLB實例 load_balancer_json = delete_load_balancer(load_balancer_json["LoadBalancerId"]) #打印 load_balancer_json結果 CommonUtil.log("delete_load_balancer", load_balancer_json) if __name__ == "__main__": sys.exit(main())
-
進入setup.py所在的目錄,執行如下命令,完成環境初始化配置。
python setup.py install
-
進入slb_monitor.py所在的目錄,執行如下命令,運行查看監控示例。
python slb_monitor.py
系統顯示類似如下:---------------------------create_load_balancer--------------------------- { "VpcId": "", "AddressIPVersion": "ipv4", "LoadBalancerName": "SLB1", "ResourceGroupId": "rg-axxxxxxxxxx", "VSwitchId": "", "RequestId": "661DDF49-FD2B-46C1-8E38-FDE5E62C8448", "Address": "39.xx.xx.xx4", "NetworkType": "classic", "LoadBalancerId": "lb-8vbtxxxxxxxxxxx1hn" } ---------------------------create_tcp_listener--------------------------- { "RequestId": "7ED453FF-7DF6-4F4F-81A0-670EED9EB997" } ---------------------------add_backend_servers--------------------------- { "RequestId": "4B730606-BD44-4A6B-BE9E-118E9606B064", "BackendServers": { "BackendServer": [ { "ServerId": "i-8xxxxxxxxxxf4z", "Type": "ecs", "Weight": 100 }, { "ServerId": "i-8xxxxxxxxxxxxx", "Type": "ecs", "Weight": 100 } ] }, "LoadBalancerId": "lb-8xxxxxxxxxxxxxx" } ---------------------------query_metric_last--------------------------- { "Code": "200", "Period": "60", "RequestId": "15FD2461-FD94-451F-ABE3-D281DB453161", "Datapoints": "[]" } ---------------------------create_alarm--------------------------- { "Code": "200", "Data": "53547DF14168E368073BE8E34E1522DE25854224", "RequestId": "8652E53F-74AD-413B-B2D9-103BFE557FAC", "Success": true } ---------------------------delete_load_balancer--------------------------- { "RequestId": "D6CCD259-41C2-4D5C-A644-19A0E96F1D4C" }
克隆實例
介紹如何使用Python SDK克隆SLB實例。
前提條件
背景信息
- 在華北3張家口地域創建一個名爲SLB1的SLB實例,主可用區爲cn-zhangjiakou-a,備可用區爲cn-zhangjiakou-b,實例計費類型爲按量計費,規格爲slb.s1.small,其他配置使用系統默認值。
- 將張家口地域的兩臺ECS實例添加到默認服務器組,用來分發流量,ECS實例的後端服務權重都爲100。
- 創建TCP監聽,SLB實例前端使用的端口爲80,後端服務器開放用來接收請求的端口爲80,健康檢查協議爲TCP,不限制監聽帶寬峯值,其他使用默認值。
- 查詢實例SLB1的信息,作爲克隆實例的入參。
- 克隆新的SLB實例。
- 刪除SLB1實例。
- 查詢克隆實例的信息。
- 刪除克隆實例。
操作步驟
- 在下載的SDK目錄中,打開$aliyun-openapi-python-sdk-examples\sdk_examples\examples\slb文件夾。
-
使用編輯器打開configration_clone.py文件,您需要配置用戶鑑權參數ACS_CLIENT,其他參數根據實際情況配置後,保存退出。
#encoding=utf-8 import sys import json #調用AcsClient參數進行身份驗證 from aliyunsdkcore.client import AcsClient #使用阿里雲官方sdk的異常處理模塊 from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException #命令行打印日誌 from sdk_lib.common_util import CommonUtil #異常處理邏輯 from sdk_lib.exception import ExceptionHandler #調用創建SLB實例API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerRequest #調用添加默認服務器組API from aliyunsdkslb.request.v20140515 import AddBackendServersRequest #調用添加TCP監聽API from aliyunsdkslb.request.v20140515 import CreateLoadBalancerTCPListenerRequest #調用查詢SLB實例信息API from aliyunsdkslb.request.v20140515 import DescribeLoadBalancerAttributeRequest #調用創建SLB實例API克隆實例 from aliyunsdkslb.request.v20140515 import CreateLoadBalancerRequest #調用刪除SLB實例API from aliyunsdkslb.request.v20140515 import DeleteLoadBalancerRequest ''' 創建slb實例->添加tcp監聽->查詢slb實例->slb實例克隆->刪除slb實例 ''' #用戶身份驗證參數配置 ACS_CLIENT = AcsClient( 'your-access-key-id', #your-access-key-id 'your-access-key-secret', #your-access-key-secret 'cn-zhangjiakou', #your-region-id ) #失敗重試次數 TRY_TIME = 3 def create_load_balancer(params): ''' create_load_balancer:創建slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27577.html ''' try: #設置創建SLB實例的調用參數 request = CreateLoadBalancerRequest.CreateLoadBalancerRequest() request.set_MasterZoneId(params["master_zone_id"]) request.set_SlaveZoneId(params["slave_zone_id"]) request.set_LoadBalancerName(params["load_balancer_name"]) request.set_PayType(params["pay_balancer_type"]) request.set_LoadBalancerSpec(params["load_balancer_spec"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def add_backend_servers(params): ''' add_backend_servers:添加後端服務器 官網API參考鏈接: https://help.aliyun.com/document_detail/27632.html ''' counter = 0 while counter < TRY_TIME: try: #設置添加默認服務器組的調用參數 request = AddBackendServersRequest.AddBackendServersRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #要添加的後端服務器列表 request.set_BackendServers(params["backend_servers"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 def create_tcp_listener(params): ''' create_tcp_listener:創建tcp監聽 官網API參考鏈接: https://help.aliyun.com/document_detail/27594.html ''' counter = 0 while counter < TRY_TIME: try: #設置創建TCP監聽的調用參數 request = CreateLoadBalancerTCPListenerRequest.CreateLoadBalancerTCPListenerRequest() #負載均衡實例的ID request.set_LoadBalancerId(params["load_balancer_id"]) #負載均衡實例前端使用的端口 request.set_ListenerPort(params["listener_port"]) #負載均衡實例後端使用的端口 request.set_BackendServerPort(params["backend_server_port"]) #監聽的健康檢查協議 request.set_HealthCheckType(params["listener_health_check"]) #設置監聽的帶寬峯值 request.set_Bandwidth(params["listener_bandwidth"]) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: if ExceptionHandler.server_exception(e): return e except ClientException as e: if ExceptionHandler.client_exception(e): return e finally: counter += 1 #查詢slb實例 def describe_load_balancer_attribute(params): ''' describe_load_balancer_attribute:查詢指定負載均衡實例的詳細信息 官網API參考鏈接: https://help.aliyun.com/document_detail/27583.html ''' counter = 0 while counter < TRY_TIME: try: request = DescribeLoadBalancerAttributeRequest.DescribeLoadBalancerAttributeRequest() #負載均衡實例的id request.set_LoadBalancerId(params["load_balancer_id"]) response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) finally: counter += 1 #克隆slb實例 def create_load_balancer_clone(params): ''' create_load_balancer:創建slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27577.html ''' counter = 0 while counter < TRY_TIME: try: request = CreateLoadBalancerRequest.CreateLoadBalancerRequest() #主可用區 request.set_MasterZoneId(params["master_zone_id"]) #備可用區 request.set_SlaveZoneId(params["slave_zone_id"]) #付費類型 request.set_PayType(params["pay_balancer_type"]) #資源組id request.set_ResourceGroupId(params["resource_group_id"]) #負載均衡實例的ip版本 request.set_AddressIPVersion(params["address_ip_version"]) #負載均衡實例的網絡類型 request.set_AddressType(params["address_type"]) #實例名稱 request.set_LoadBalancerName(params["load_balancer_name"]) response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) finally: counter += 1 def delete_load_balancer(load_balancer_id): ''' delete_load_balancer:刪除slb實例 官網API參考鏈接:https://help.aliyun.com/document_detail/27579.html ''' try: #設置刪除SLB實例的調用參數 request = DeleteLoadBalancerRequest.DeleteLoadBalancerRequest() #負載均衡實例的ID request.set_LoadBalancerId(load_balancer_id) #發送調用請求並接收返回數據 response = ACS_CLIENT.do_action_with_exception(request) response_json = json.loads(response) #返回結果 return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def main(): params = {} #設置創建SLB實例的參數 #設置新建SLB實例的主可用區爲cn-zhangjiakou-a params["master_zone_id"] = "cn-zhangjiakou-a" #設置新建SLB實例的主可用區爲cn-zhangjiakou-b params["slave_zone_id"] = "cn-zhangjiakou-b" #設置新建SLB實例的名稱爲SLB1 params["load_balancer_name"] = "SLB1" #設置新建SLB實例的計費類型爲按量計費 params["pay_balancer_type"] = "PayOnDemand" #設置新建SLB實例的規格爲slb.s1.small params["load_balancer_spec"] = "slb.s1.small" #設置添加到默認服務器組的ECS的實例ID和權重 params["backend_servers"] = [{"ServerId":"i-8vxxxxx","Weight":"100"},{"ServerId":"i-8vbe8xxxxxxxv","Weight":"100"}] #設置添加TCP監聽的參數 #前端使用的端口爲80 params["listener_port"] = 80 #後端服務器開放用來接收請求的端口爲80 params["backend_server_port"] = 80 #健康檢查協議爲TCP params["listener_health_check"] = "tcp" #TCP監聽的帶寬峯值爲-1,即不限制帶寬峯值 params["listener_bandwidth"] = -1 #創建slb實例 #獲取create_load_balancer函數返回值,load_balancer_json爲結果的json串 result_json = create_load_balancer(params) #打印 load_balancer_json結果,其中"create_load_balancer"是對json串起的名字 CommonUtil.log("create_load_balancer", result_json) #讀取新建SLB實例的ID和名稱 load_balancer_id = result_json["LoadBalancerId"] params["load_balancer_id"] = load_balancer_id params["LoadBalancerName"] = result_json["LoadBalancerName"] #創建tcp監聽 result_json = create_tcp_listener(params) CommonUtil.log("create_tcp_listener", result_json) #查詢slb實例 result_json = describe_load_balancer_attribute(params) CommonUtil.log("describe_load_balancer_attribute", result_json) #需要顯示的查詢新建SLB實例信息 params["master_zone_id"] = result_json["MasterZoneId"] params["slave_zone_id"] = result_json["SlaveZoneId"] params["pay_balancer_type"] = result_json["PayType"] params["resource_group_id"] = result_json["ResourceGroupId"] params["address_ip_version"] = result_json["AddressIPVersion"] params["address_type"] = result_json["AddressType"] params["load_balancer_name"] = result_json["LoadBalancerName"] #根據SLB1的配置,克隆一個新的實例 result_json = create_load_balancer_clone(params) CommonUtil.log("create_load_balancer_clone", result_json) #讀取克隆實例ID clone_load_balancer_id = result_json["LoadBalancerId"] #刪除第一個實例 #刪除返回的LoadBalancerId對應的SLB實例 result_json = delete_load_balancer(load_balancer_id) #打印 load_balancer_json結果 CommonUtil.log("delete_load_balancer", result_json) #查詢克隆出來的實例信息 params["load_balancer_id"] = clone_load_balancer_id result_json = describe_load_balancer_attribute(params) CommonUtil.log("describe_load_balancer_attribute", result_json) #刪除克隆出來的實例 #刪除返回的LoadBalancerId對應的SLB實例 result_json = delete_load_balancer(clone_load_balancer_id) #打印 load_balancer_json結果 CommonUtil.log("delete_load_balancer", result_json) if __name__ == "__main__": sys.exit(main())
-
進入setup.py所在的目錄,執行如下命令,完成環境初始化配置。
python setup.py install
-
進入configration_clone.py所在的目錄,執行如下命令,運行克隆實例示例。
python configration_clone.py
系統顯示類似如下:---------------------------create_load_balancer--------------------------- { "VpcId": "", "AddressIPVersion": "ipv4", "LoadBalancerName": "SLB1", "ResourceGroupId": "rg-acfxxxxxxxxxxy", "VSwitchId": "", "RequestId": "544656CD-4DC9-47CB-B4DA-9371C0098F37", "Address": "39.xx.xx.xx", "NetworkType": "classic", "LoadBalancerId": "lb-8vbermxxxxxxxxx90l" } ---------------------------create_tcp_listener--------------------------- { "RequestId": "4FCAFA1B-A6A8-4AA7-AB26-788C4F1506DA" } ---------------------------describe_load_balancer_attribute--------------------- ------ { "LoadBalancerStatus": "inactive", "HasReservedInfo": "false", "InternetChargeType": "paybytraffic", "EndTime": "2999-09-08T16:00:00Z", "VpcId": "", "RegionIdAlias": "cn-zhangjiakou", "RegionId": "cn-zhangjiakou", "ListenerPortsAndProtocal": { "ListenerPortAndProtocal": [ { "ListenerPort": 80, "ListenerProtocal": "tcp" } ] }, "ResourceGroupId": "rg-acfxxxxxxxaiy", "CreateTimeStamp": 1551254179000, "VSwitchId": "", "Address": "39.98.97.43", "AddressIPVersion": "ipv4", "LoadBalancerSpec": "slb.s1.small", "EndTimeStamp": 32493801600000, "ListenerPortsAndProtocol": { "ListenerPortAndProtocol": [ { "ListenerProtocol": "tcp", "ListenerPort": 80 } ] }, "LoadBalancerId": "lb-8vxxxxxxxxxx90l", "AddressType": "internet", "RequestId": "9D696BEF-18C2-4EFD-92F4-434580964A51", "BackendServers": { "BackendServer": [] }, "MasterZoneId": "cn-zhangjiakou-a", "PayType": "PayOnDemand", "SlaveZoneId": "cn-zhangjiakou-b", "Bandwidth": 5120, "LoadBalancerName": "SLB1", "NetworkType": "classic", "CreateTime": "2019-02-27T07:56:19Z", "ListenerPorts": { "ListenerPort": [ 80 ] } } ---------------------------create_load_balancer_clone--------------------------- { "VpcId": "", "AddressIPVersion": "ipv4", "LoadBalancerName": "SLB1", "ResourceGroupId": "rg-acxxxxxxxxxxiy", "VSwitchId": "", "RequestId": "0E051B90-1C32-4270-A653-F7FBB03E3E5C", "Address": "xx.xx.xx.xx", "NetworkType": "classic", "LoadBalancerId": "lb-8xxxxxxxxxxxxxx" } ---------------------------delete_load_balancer--------------------------- { "RequestId": "14703145-BC19-4032-A5F5-6DD49AED6885" } ---------------------------describe_load_balancer_attribute--------------------- ------ { "LoadBalancerStatus": "active", "HasReservedInfo": "false", "InternetChargeType": "paybytraffic", "EndTime": "2999-09-08T16:00:00Z", "VpcId": "", "RegionIdAlias": "cn-zhangjiakou", "RegionId": "cn-zhangjiakou", "ListenerPortsAndProtocal": { "ListenerPortAndProtocal": [] }, "ResourceGroupId": "rg-acfxxxxxxxxxiy", "CreateTimeStamp": 1551254182000, "VSwitchId": "", "Address": "39.98.97.36", "AddressIPVersion": "ipv4", "MasterZoneId": "cn-zhangjiakou-a", "EndTimeStamp": 32493801600000, "ListenerPortsAndProtocol": { "ListenerPortAndProtocol": [] }, "LoadBalancerId": "lb-8vxxxxxxxxxxx", "AddressType": "internet", "RequestId": "6345BAD4-B7EB-4280-9C7B-BB1324A77E32", "BackendServers": { "BackendServer": [] }, "PayType": "PayOnDemand", "SlaveZoneId": "cn-zhangjiakou-b", "Bandwidth": 5120, "LoadBalancerName": "SLB1", "NetworkType": "classic", "CreateTime": "2019-02-27T07:56:22Z", "ListenerPorts": { "ListenerPort": [] } } ---------------------------delete_load_balancer--------------------------- { "RequestId": "DC7C11D0-E21E-49AE-9695-F0171960D0F1" }