This topic describes how to use the Alibaba Cloud SDK for Python to create a NAT gateway.

Prerequisites

Before you run the Alibaba Cloud SDK for Python, make sure that the following requirements are met:
  • An Alibaba Cloud account and an AccessKey pair (AccessKey ID and AccessKey secret) are required to use the Alibaba Cloud SDK for Python. You can create and view your AccessKey pair on the Console Logon Management page in the Resource Access Management (RAM) console.
  • Make sure that the Alibaba Cloud SDK for Python is installed. For more information, see aliyun-python-sdk-vpc 3.0.8.
  • The VPC Python example library is downloaded.
    Go to the directory wheresetup.py is located, and run the following command to initialize the environment:
    python setup.py install

Background information

The following operations are included in the example code:
  1. Create a virtual private cloud (VPC) in the China (Shanghai) region.
  2. Create a VSwitch for the VPC.
  3. Create a NAT gateway for the VPC.
  4. Query the NAT gateway.
  5. Delete the NAT gateway.
  6. Delete the VSwitch.
  7. Delete the VPC.

Procedure

  1. In the downloaded SDK directory, open the $aliyun-openapi-python-sdk-examples\sdk_examples\examples\natgw folder.
  2. Open the natgw_quick_start.py file in your text editor. Set the parameters as required, save the configurations, and exit the editor.
    The following sample code is displayed:
    #encoding=utf-8
    import sys
    import json
    import time
    
    from aliyunsdkcore.acs_exception.exceptions import ServerException, ClientException
    from aliyunsdkvpc.request.v20160428 import CreateNatGatewayRequest
    from aliyunsdkvpc.request.v20160428 import DeleteNatGatewayRequest
    from aliyunsdkvpc.request.v20160428 import DescribeNatGatewaysRequest
    from sdk_lib.sdk_vpc import Vpc
    from sdk_lib.sdk_vswitch import VSwitch
    from sdk_lib.common_util import CommonUtil
    from sdk_lib.check_status import CheckStatus
    from sdk_lib.exception import ExceptionHandler
    from sdk_lib.consts import *
    
    client = AcsClient(
             '<your-access-key-id>',     # Your AccessKey ID.
             '<your-access-key-secret>', # Your AccessKey secret.
             '<your-region-id>')         # Your region ID.
    
    
    class NatGateway(object):
        def __init__(self, client):
            self.client = client
    
        def create_nat_gateway(self, params):
            """
            create_nat_gateway: creates a NAT gateway.
            """
            try:
                request = CreateNatGatewayRequest.CreateNatGatewayRequest()
                request.set_VpcId(params['vpc_id'])
                response = client.do_action_with_exception(request)
                response_json = json.loads(response)
                # Check whether the NAT gateway is in the available state.
                if CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME,
                                            self.describe_nat_gateway_status,
                                            AVAILABLE, response_json['NatGatewayId']):
                    return response_json
            except ServerException as e:
                ExceptionHandler.server_exception(e)
            except ClientException as e:
                ExceptionHandler.client_exception(e)
    
        def describe_nat_gateway(self, nat_gateway_id):
            """
            describe_nat_gateway: queries information about the created NAT gateway in a specified region.
            """
            try:
                request = DescribeNatGatewaysRequest.DescribeNatGatewaysRequest()
                request.set_NatGatewayId(nat_gateway_id)
                response = 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_nat_gateway(self, params):
            """
            delete_nat_gateway: deletes the NAT gateway.
            """
            try:
                request = DeleteNatGatewayRequest.DeleteNatGatewayRequest()
                request.set_NatGatewayId(params['nat_gateway_id'])
                response = client.do_action_with_exception(request)
                response_json = json.loads(response)
                # Check whether the NAT gateway is in the available state.
                if CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME * 5,
                                            self.describe_nat_gateway_status,
                                            '', params['nat_gateway_id']):
                    return response_json
            except ServerException as e:
                ExceptionHandler.server_exception(e)
            except ClientException as e:
                ExceptionHandler.client_exception(e)
    
        def describe_nat_gateway_status(self, nat_gateway_id):
            """
            describe_nat_gateway_status: queries the status of the created NAT gateway in a specified region.
            """
            response = self.describe_nat_gateway(nat_gateway_id)
            if len(response["NatGateways"]["NatGateway"]) == 0:
                return ''
            return response["NatGateways"]["NatGateway"][0]['Status']
    
    
    def main():
        vpc = Vpc(client)
        vswitch = VSwitch(client)
        nat_gateway = NatGateway(client)
    
        params = {}
    
        # Create a VPC.
        vpc_json = vpc.create_vpc()
        CommonUtil.log("create_vpc", vpc_json)
    
        # Create a VSwitch.
        params['vpc_id'] = vpc_json['VpcId']
        params['zone_id'] = "cn-hangzhou-d"
        params['cidr_block'] = "172.16.1.0/24"
        vswitch_json = vswitch.create_vswitch(params)
        CommonUtil.log("create_vswitch", vswitch_json)
    
        # Create a NAT gateway.
        nat_gateway_json = nat_gateway.create_nat_gateway(params)
        CommonUtil.log("create_nat_gateway", nat_gateway_json)
    
        # Query the NAT gateway.
        params['nat_gateway_id'] = nat_gateway_json['NatGatewayId']
        nat_gateway_json = nat_gateway.describe_nat_gateway(params['nat_gateway_id'])
        CommonUtil.log("describe_nat_gateway", nat_gateway_json)
    
        # Delete the NAT gateway.
        nat_gateway_json = nat_gateway.delete_nat_gateway(params)
        CommonUtil.log("delete_nat_gateway", nat_gateway_json)
    
        # Delete the VSwitch.
        params['vswitch_id'] = vswitch_json['VSwitchId']
        vswitch_json = vswitch.delete_vswitch(params)
        CommonUtil.log("delete_vswitch", vswitch_json)
    
        # Delete the VPC.
        vpc_json = vpc.delete_vpc(params)
        CommonUtil.log("delete_vpc", vpc_json)
    
    
    if __name__ == "__main__":
        sys.exit(main())
  3. Go to the folder where the natgw_quick_start.py file is located, and run the following command to create a NAT gateway:
    python natgw_quick_start.py

Result

The following system output is displayed:
---------------------------create_vpc---------------------------
{
  "ResourceGroupId": "rg-acfmxazxxxxxxxx",
  "RouteTableId": "vtb-uf6wzp25d8lkbxxxxxxxx",
  "VRouterId": "vrt-uf6di7voecmyqxxxxxxxx",
  "VpcId": "vpc-uf63cqupghmk1xxxxxxxx",
  "RequestId": "97D36E19-F789-424F-A473-660D63EF8CF9"
}

---------------------------create_vswitch---------------------------
{
  "VSwitchId": "vsw-uf6fovepnk4yexxxxxxxx",
  "RequestId": "18DA0E81-34A6-4877-9771-E2C4EEEBADD1"
}

---------------------------create_nat_gateway---------------------------
{
  "NatGatewayId": "ngw-uf6mfrcmzktstxxxxxxxx",
  "BandwidthPackageIds": {
    "BandwidthPackageId": []
  },
  "ForwardTableIds": {
    "ForwardTableId": [
      "ftb-uf6411str8n9sxxxxxxxx"
    ]
  },
  "RequestId": "B1F791C8-73B1-46C5-8A20-726A615BC627",
  "SnatTableIds": {
    "SnatTableId": [
      "stb-uf6t4eijvq3aexxxxxxxx"
    ]
  }
}

---------------------------describe_nat_gateway---------------------------
{
  "TotalCount": 1,
  "PageNumber": 1,
  "RequestId": "1F9303B1-4024-4A92-B67E-FB6BE1DC76D1",
  "PageSize": 10,
  "NatGateways": {
    "NatGateway": [
      {
        "Status": "Available",
        "BandwidthPackageIds": {
          "BandwidthPackageId": []
        },
        "VpcId": "vpc-uf63cqupghmk1xxxxxxxx",
        "Description": "",
        "ForwardTableIds": {
          "ForwardTableId": [
            "ftb-uf6411str8n9sxxxxxxxx"
          ]
        },
        "IpLists": {
          "IpList": []
        },
        "BusinessStatus": "Normal",
        "RegionId": "cn-shanghai",
        "CreationTime": "2019-04-24T09:09:12Z",
        "NatGatewayId": "ngw-uf6mfrcmzktstxxxxxxxx",
        "SnatTableIds": {
          "SnatTableId": [
            "stb-uf6t4eijvq3aexxxxxxxx"
          ]
        },
        "AutoPay": false,
        "InstanceChargeType": "PostPaid",
        "ExpiredTime": "",
        "Spec": "Small",
        "Name": ""
      }
    ]
  }
}

---------------------------delete_nat_gateway---------------------------
{
  "RequestId": "A0B71FE4-4756-4D91-899E-1DFA52D8615E"
}

---------------------------delete_vswitch---------------------------
{
  "RequestId": "F224307E-3DE4-4415-AE19-DDCF24695462"
}

---------------------------delete_vpc---------------------------
{
  "RequestId": "1BFFCBC3-7F83-436C-96E9-CA4A620072DA"
}