本文介绍如何使用Alibaba Cloud SDK for Python修改EIP的带宽峰值。
前提条件
在使用Alibaba Cloud SDK for Python前,您需要完成以下准备工作:
- 您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
- 确保您已经安装了Alibaba Cloud SDK for Python。
- 下载阿里云专有网络Python SDK场景示例的VPC Python Example库。 进入setup.py所在的目录,执行以下命令,完成环境初始化配置。
python setup.py install
背景信息
本文代码示例中包含以下操作:- 在华东1(杭州)地域创建一个EIP。
- 修改EIP的带宽峰值为50 Mbps。
- 查询修改带宽峰值后的EIP。
- 修改EIP的带宽峰值为10 Mbps。
- 查询修改带宽峰值后的EIP。
- 释放EIP。
操作步骤
- 在下载的SDK目录中,打开aliyun-openapi-python-sdk-examples\sdk_examples\examples\eip文件夹。
- 使用编辑器打开eip_modify_attribute.py文件,根据实际情况配置相关参数,保存退出。完整代码示例如下:
#encoding=utf-8 import sys import json from alibabacloud_credentials.client import Client as CredClient from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException from aliyunsdkvpc.request.v20160428 import AllocateEipAddressRequest from aliyunsdkvpc.request.v20160428 import AssociateEipAddressRequest from aliyunsdkvpc.request.v20160428 import DescribeEipAddressesRequest from aliyunsdkvpc.request.v20160428 import UnassociateEipAddressRequest from aliyunsdkvpc.request.v20160428 import ModifyEipAddressAttributeRequest from aliyunsdkvpc.request.v20160428 import ReleaseEipAddressRequest from sdk_lib.exception import ExceptionHandler from sdk_lib.check_status import CheckStatus from sdk_lib.consts import * from sdk_lib.common_util import CommonUtil """ 创建EIP->修改EIP带宽到50 Mbps->查询EIP->修改EIP带宽到10 Mbps->查询EIP->释放EIP """ class Eip(object): def __init__(self, client): self.client = client def allocate_eip_address(self, params): """ allocate_eip_address: 申请弹性公网IP(EIP) """ try: request = AllocateEipAddressRequest.AllocateEipAddressRequest() response = self.client.do_action_with_exception(request) response_json = json.loads(response) if CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME, self.describe_eip_status, AVAILABLE, response_json["AllocationId"]): return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def associate_eip_address(self, params): """ associate_eip_address: 将EIP绑定到同地域的云产品实例上 """ try: request = AssociateEipAddressRequest.AssociateEipAddressRequest() # EIP的ID request.set_AllocationId(params['allocation_id']) # 要绑定的云产品实例的类型 request.set_InstanceType(params['instance_type']) # 要绑定的实例ID request.set_InstanceId(params['instance_id']) response = self.client.do_action_with_exception(request) response_json = json.loads(response) if CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME, self.describe_eip_status, InUse, params['allocation_id']): return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def describe_eip_address(self, allocation_id): """ describe_eip_status: 查询指定地域已创建的EIP。 """ try: request = DescribeEipAddressesRequest.DescribeEipAddressesRequest() # EIP的ID request.set_AllocationId(allocation_id) response = self.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 describe_eip_status(self, allocation_id): """ describe_eip_status: 查询指定地域已创建的EIP的状态 """ # EIP的ID response = self.describe_eip_address(allocation_id) return response["EipAddresses"]["EipAddress"][0]["Status"] def unassociate_eip_address(self, params): """ unassociate_eip_address: 将EIP从绑定的云资源上解绑。 """ try: request = UnassociateEipAddressRequest.UnassociateEipAddressRequest() # EIP的ID request.set_AllocationId(params['allocation_id']) # 要解绑的资源类型 request.set_InstanceType(params['instance_type']) # 要解绑的云产品的实例ID request.set_InstanceId(params['instance_id']) response = self.client.do_action_with_exception(request) response_json = json.loads(response) if CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME, self.describe_eip_status, AVAILABLE, params['allocation_id']): return response_json return response_json except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def modify_eip_address(self, params): """ modify_eip_address: 修改指定EIP的名称、描述信息和带宽峰值 """ try: request = ModifyEipAddressAttributeRequest.ModifyEipAddressAttributeRequest() # EIP的ID request.set_AllocationId(params['allocation_id']) # EIP的带宽峰值,单位为Mbps request.set_Bandwidth(params['bandwidth']) # EIP的名称 request.set_Name(params['name']) response = self.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 release_eip_address(self, params): """ release_eip_address: 释放指定的EIP。 """ try: request = ReleaseEipAddressRequest.ReleaseEipAddressRequest() # 要释放的EIP的ID request.set_AllocationId(params['allocation_id']) response = self.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(): # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 # 本示例通过阿里云Credentials工具从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见https://help.aliyun.com/document_detail/378659.html。 cred = CredClient() access_key_id = cred.get_access_key_id() access_key_secret = cred.get_access_key_secret() # 创建AcsClient实例 client = AcsClient(access_key_id, access_key_secret, '<your-region-id>') eip = Eip(client) params = {} # 创建EIP eip_response_json = eip.allocate_eip_address(params) CommonUtil.log("allocate_eip_address", eip_response_json) params['allocation_id'] = eip_response_json["AllocationId"] #修改EIP带宽到50 Mbps params['name'] = EIP_NEW_NAME params['bandwidth'] = BANDWIDTH_50 eip_response_json = eip.modify_eip_address(params) CommonUtil.log("modify_eip_address", eip_response_json) # 查询EIP eip_response_json = eip.describe_eip_address(params['allocation_id']) CommonUtil.log("describe_eip_address", eip_response_json) # 修改EIP带宽到10 Mbps params['bandwidth'] = BANDWIDTH_10 eip_response_json = eip.modify_eip_address(params) CommonUtil.log("modify_eip_address", eip_response_json) # 查询EIP eip_response_json = eip.describe_eip_address(params['allocation_id']) CommonUtil.log("describe_eip_address", eip_response_json) # 释放EIP eip_response_json = eip.release_eip_address(params) CommonUtil.log("release_eip_address", eip_response_json) if __name__ == '__main__': sys.exit(main())
- 进入eip_modify_attribute.py所在的目录,执行如下命令,修改EIP的带宽峰值。
python eip_modify_attribute.py
执行结果
系统回显结果如下:
---------------------------allocate_eip_address---------------------------
{
"EipAddress": "47.XX.XX.225",
"ResourceGroupId": "rg-acfm4od****",
"RequestId": "9318DD7A-F065-4EA6-9EA0-20A9C46EDADC",
"AllocationId": "eip-bp15bzjk5djcs****"
}
---------------------------modify_eip_address---------------------------
{
"RequestId": "C39D55A1-6B47-489B-8614-FDB9736EDE73"
}
---------------------------describe_eip_address---------------------------
{
"TotalCount": 1,
"PageNumber": 1,
"PageSize": 10,
"EipAddresses": {
"EipAddress": [
{
"ISP": "BGP",
"ExpiredTime": "",
"InternetChargeType": "PayByBandwidth",
"IpAddress": "47.XX.XX.225",
"AllocationId": "eip-bp15bzjk5djcs****",
"PrivateIpAddress": "",
"Status": "Available",
"BandwidthPackageId": "",
"InstanceId": "",
"InstanceRegionId": "",
"RegionId": "cn-hangzhou",
"AvailableRegions": {
"AvailableRegion": [
"cn-hangzhou"
]
},
"ResourceGroupId": "rg-acfm4od****",
"HasReservationData": false,
"InstanceType": "",
"AllocationTime": "2019-04-18T04:01:28Z",
"Name": "EIP_NEW_NAME",
"OperationLocks": {
"LockReason": []
},
"Mode": "NAT",
"BandwidthPackageType": "",
"BandwidthPackageBandwidth": "",
"Bandwidth": "50",
"HDMonitorStatus": "OFF",
"ChargeType": "PostPaid",
"SecondLimited": false,
"Descritpion": ""
}
]
},
"RequestId": "51ECAB45-2518-4A46-89DC-8ADEE1AFDBE9"
}
---------------------------modify_eip_address---------------------------
{
"RequestId": "ACAB5724-D05C-46A4-8C2B-6064AEEC792B"
}
---------------------------describe_eip_address---------------------------
{
"TotalCount": 1,
"PageNumber": 1,
"PageSize": 10,
"EipAddresses": {
"EipAddress": [
{
"ISP": "BGP",
"ExpiredTime": "",
"InternetChargeType": "PayByBandwidth",
"IpAddress": "47.XX.XX.225",
"AllocationId": "eip-bp15bzjk5djcs****",
"PrivateIpAddress": "",
"Status": "Available",
"BandwidthPackageId": "",
"InstanceId": "",
"InstanceRegionId": "",
"RegionId": "cn-hangzhou",
"AvailableRegions": {
"AvailableRegion": [
"cn-hangzhou"
]
},
"ResourceGroupId": "rg-acfm4od****",
"HasReservationData": false,
"InstanceType": "",
"AllocationTime": "2019-04-18T04:01:28Z",
"Name": "EIP_NEW_NAME",
"OperationLocks": {
"LockReason": []
},
"Mode": "NAT",
"BandwidthPackageType": "",
"BandwidthPackageBandwidth": "",
"Bandwidth": "10",
"HDMonitorStatus": "OFF",
"ChargeType": "PostPaid",
"SecondLimited": false,
"Descritpion": ""
}
]
},
"RequestId": "6F653A80-AB28-4842-84A8-CD444EB81A29"
}
---------------------------release_eip_address---------------------------
{
"RequestId": "C407633A-5658-482F-AB5E-069028C3B06C"
}