This topic describes how to use Alibaba Cloud SDK for Python to modify the maximum bandwidth of an elastic IP address (EIP).

Prerequisites

Before you use Alibaba Cloud SDK for Python, make sure that the following requirements are met:
  • An Alibaba Cloud account and the AccessKey pair are obtained. You can create and view your AccessKey pair on the Security Management page of the Alibaba Cloud Management Console.
  • Alibaba Cloud SDK for Python is installed.
  • The VPC Python example library is downloaded.
    Go to the directory where the setup.py file is stored, and run the following command to initialize the environment:
    python setup.py install

Background information

The sample code in this topic includes the following operations:
  1. Create an EIP in the China (Hangzhou) region.
  2. Set the maximum bandwidth value of the EIP to 50 Mbit/s.
  3. Query the EIP for which you have modified the maximum bandwidth value.
  4. Set the maximum bandwidth value of the EIP to 10 Mbit/s.
  5. Query the EIP for which you have modified the maximum bandwidth value.
  6. Release the EIP.

Procedure

  1. In the directory of the downloaded SDK files, open the aliyun-openapi-python-sdk-examples\sdk_examples\examples\eip folder.
  2. Open the eip_modify_attribute.py file in your text editor. Set the required parameters, save the configurations, and then exit the editor.
    The following sample code is displayed:
    #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
    
    """
    1. Create an EIP. 2. Set the maximum bandwidth of the EIP to 50 Mbit/s. 3. Query the EIP. 4. Set the maximum bandwidth of the EIP to 10 Mbit/s. 5. Query the EIP. 6. Release the EIP.
    """
    class Eip(object):
        def __init__(self, client):
            self.client = client
    
        def allocate_eip_address(self, params):
            """
            allocate_eip_address: Apply for an 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: Associate the EIP with a cloud resource that is deployed in the same region.
            """
            try:
                request = AssociateEipAddressRequest.AssociateEipAddressRequest()
                # The ID of the EIP.
                request.set_AllocationId(params['allocation_id'])
                # The type of the cloud resource with which you want to associate the EIP.
                request.set_InstanceType(params['instance_type'])
                # The ID of the cloud resource with which you want to associate the EIP.
                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: Query EIPs in a region. 
            """
            try:
                request = DescribeEipAddressesRequest.DescribeEipAddressesRequest()
                # The ID of the EIP.
                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: Query the status of an EIP in a region.
            """
            # The ID of the EIP.
            response = self.describe_eip_address(allocation_id)
            return response["EipAddresses"]["EipAddress"][0]["Status"]
    
    
        def unassociate_eip_address(self, params):
            """
            unassociate_eip_address: Disassociate the EIP from an associated cloud resource. 
            """
            try:
                request = UnassociateEipAddressRequest.UnassociateEipAddressRequest()
                # The ID of the EIP.
                request.set_AllocationId(params['allocation_id'])
                # The type of cloud resource from which you want to disassociate the EIP.
                request.set_InstanceType(params['instance_type'])
                # The ID of the cloud resource from which you want to disassociate the EIP.
                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: Modify the name, description, and maximum bandwidth value of the EIP.
            """
            try:
                request = ModifyEipAddressAttributeRequest.ModifyEipAddressAttributeRequest()
                # The ID of the EIP.
                request.set_AllocationId(params['allocation_id'])
                # The maximum bandwidth value of the EIP. Unit: Mbit/s.
                request.set_Bandwidth(params['bandwidth'])
                # The name of the 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: Release a specific EIP. 
            """
            try:
                request = ReleaseEipAddressRequest.ReleaseEipAddressRequest()
                # The ID of the EIP that you want to release.
                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():
    
        # Security risks may arise if you use the AccessKey pair of an Alibaba Cloud account because the account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
        # We do not recommend that you save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of your resources may be compromised. 
        # In this example, the AccessKey pair is obtained by using the Alibaba Cloud Credentials tool to authenticate API access. For more information about how to configure the variables, see https://www.alibabacloud.com/help/alibaba-cloud-sdk-262060/latest/configure-credentials-378659. 
        cred = CredClient()
        access_key_id = cred.get_access_key_id()
        access_key_secret = cred.get_access_key_secret()
    
        # Create an AcsClient instance.
        client = AcsClient(access_key_id, access_key_secret, '<your-region-id>')
        eip = Eip(client)
    
        params = {}
    
        # Create an EIP.
        eip_response_json = eip.allocate_eip_address(params)
        CommonUtil.log("allocate_eip_address", eip_response_json)
    
        params['allocation_id'] = eip_response_json["AllocationId"]
    
        # Set the bandwidth value of the EIP to 50 Mbit/s.
        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)
    
        # Query the EIP.
        eip_response_json = eip.describe_eip_address(params['allocation_id'])
        CommonUtil.log("describe_eip_address", eip_response_json)
    
        # Set the bandwidth value of the EIP to 10 Mbit/s.
        params['bandwidth'] = BANDWIDTH_10
        eip_response_json = eip.modify_eip_address(params)
        CommonUtil.log("modify_eip_address", eip_response_json)
    
        # Query the EIP.
        eip_response_json = eip.describe_eip_address(params['allocation_id'])
        CommonUtil.log("describe_eip_address", eip_response_json)
    
        # Release the EIP.
        eip_response_json = eip.release_eip_address(params)
        CommonUtil.log("release_eip_address", eip_response_json)
    
    if __name__ == '__main__':
        sys.exit(main())
  3. Go to the directory where the eip_modify_attribute.py file is stored, and run the following command to modify the maximum bandwidth of the EIP:
    python eip_modify_attribute.py

Result

The following output is returned:
---------------------------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"
}