すべてのプロダクト
Search
ドキュメントセンター

:NAT Gateway の作成

最終更新日:Jan 02, 2024

このトピックでは、Alibaba Cloud SDK for Pythonを使用してNATゲートウェイを作成する方法について説明します。

前提条件

Alibaba Cloud SDK for Pythonを使用する前に、次の要件が満たされていることを確認してください。
  • Alibaba CloudアカウントとAccessKeyペアが取得されます。 Alibaba Cloud管理コンソールの [セキュリティ管理] ページで、AccessKeyペアを作成して表示できます。
  • Alibaba Cloud SDK for Pythonがインストールされています。
  • VPC Pythonサンプルライブラリがダウンロードされます。
    setup.pyファイルが保存されているディレクトリに移動し、次のコマンドを実行して環境を初期化します。
    python setup.py install

背景情報

このトピックのコードサンプルには、次の操作が含まれます。
  1. 中国 (上海) リージョンに仮想プライベートクラウド (VPC) を作成します。
  2. VPC で vSwitch を作成します。
  3. VPCのNATゲートウェイを作成します。
  4. NAT gatewayを照会します。
  5. NAT gatewayを削除します。
  6. vSwitchを削除します。
  7. VPCを削除します。

手順

  1. ダウンロードしたSDKファイルのディレクトリで、aliyun-openapi-python-sdk-examples\sdk_examples\examples\natgwフォルダーを開きます。
  2. テキストエディターでnatgw_quick_start.pyファイルを開きます。 必要なパラメーターを設定し、設定を保存してから、エディターを終了します。
    次のサンプルコードが表示されます。
    #encoding=utf-8
    インポートsys
    jsonのインポート
    インポート時間
    
    alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
    からaliyunsdkcore.acs_exception.exceptions import ServerException, ClientException
    aliyunsdkvpc.request.v20160428からCreateNatGatewayRequestをインポート
    aliyunsdkvpc.request.v20160428からDeleteNatGatewayRequestをインポート
    aliyunsdkvpc.request.v20160428からDescribeNatGatewaysRequestをインポート
    sdk_lib.sdk_vpcからVpcをインポート
    sdk_lib.sdk_vswitchからVSwitchをインポート
    sdk_lib.common_utilインポートからCommonUtil
    sdk_lib.check_statusからCheckStatusをインポートする
    sdk_lib.exception import ExceptionHandlerから
    sdk_lib.consts import * から
    
    # Alibaba CloudアカウントのAccessKeyペアを使用すると、アカウントにすべてのAPI操作に対する権限があるため、セキュリティ上のリスクが発生する可能性があります。 RAMユーザーを使用してAPI操作を呼び出したり、ルーチンのO&Mを実行することを推奨します。# AccessKey IDとAccessKey secretをプロジェクトコードに保存することはお勧めしません。 そうしないと、AccessKeyペアが漏洩し、リソースのセキュリティが侵害される可能性があります。 
    # この例では、AccessKeyペアは、Alibaba Cloud Credentialsツールを使用してAPIアクセスを認証することによって取得されます。 変数の設定方法の詳細については、「https://help.aliyun.com/document_detail/378659.htmlhttps:// 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()
    
    # AcsClientインスタンスを作成します。
    client = AcsClient(access_key_id, access_key_secret, '<your-region-id>')
    
    
    クラスNatGateway (オブジェクト):
        def __init__(self, client):
            self.client=クライアント
    
        def create_nat_gateway(self、params):
            """
            create_nat_gateway: NATゲートウェイを作成します。
            """
            試してみてください。
                request = CreateNatGatewayRequest.CreateNatGatewayRequest()
                request.set_VpcId(params['vpc_id'])
                response = client.do_action_with_exception(request)
                response_json = json.loads (レスポンス)
                # NATゲートウェイが使用可能状態かどうかを確認します。
                CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME,
                                            self.de scribe_nat_gateway_status,
                                            利用可能、response_json['NatGatewayId']):
                    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: 特定のリージョンのNATゲートウェイに関する情報を照会します。
            """
            試してみてください。
                request = DescribeNatGatewaysRequest.DescribeNatGatewaysRequest()
                request.set_NatGatewayId(nat_gateway_id)
                response = client.do_action_with_exception(request)
                response_json = json.loads (レスポンス)
                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: NATゲートウェイを削除します。
            """
            試してみてください。
                request = DeleteNatGatewayRequest。DeleteNatGatewayRequest()
                request.set_NatGatewayId(params['nat_gateway_id '])
                response = client.do_action_with_exception(request)
                response_json = json.loads (レスポンス)
                # NATゲートウェイが使用可能状態かどうかを確認します。
                CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME * 5,
                                            self.de scribe_nat_gateway_status,
                                            ''、params['nat_gateway_id ']):
                    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: 特定のリージョンのNATゲートウェイのステータスを照会します。
            """
            response = self.de scribe_nat_gateway(nat_gateway_id)
            len(response["NatGateways"]["NatGateway"]) == 0の場合:
                return''
            リターンレスポンス ["NatGateways"]["NatGateway"][0]['Status']
    
    
    def main():
        vpc = Vpc (クライアント)
        vswitch = VSwitch (クライアント)
        nat_gateway = NatGateway (クライアント)
    
        params = {}
    
        # VPCを作成します。
        vpc_json = vpc.create_vpc()
        CommonUtil.log("create_vpc", vpc_json)
    
        # vSwitchを作成します。
        params['vpc_id'] = vpc_json['VpcId']
        params['zone_id'] = "cn-shanghai-a"
        params['cidr_block'] = "172.16.1.0/24"
        vswitch_json = vswitch.create_vswitch(params)
        CommonUtil.log("create_vswitch", vswitch_json)
    
        # NATゲートウェイを作成します。
        nat_gateway_json = nat_gateway.create_nat_gateway(params)
        CommonUtil.log("create_nat_gateway", nat_gateway_json)
    
        # NATゲートウェイを照会します。
        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)
    
        # NATゲートウェイを削除します。
        nat_gateway_json = nat_gateway.delete_nat_gateway(params)
        CommonUtil.log("delete_nat_gateway", nat_gateway_json)
    
        # vSwitchを削除します。
        params['vswitch_id'] = vswitch_json['VSwitchId']
        vswitch_json = vswitch.de lete_vswitch(params)
        CommonUtil.log("delete_vswitch", vswitch_json)
    
        # VPCを削除します。
        vpc_json = vpc.de lete_vpc(params)
        CommonUtil.log("delete_vpc", vpc_json)
    
    
    if __name__ == "__main__":
        sys.exit(main()) 
  3. natgw_quick_start.pyファイルが保存されているディレクトリに移動し、次のコマンドを実行してNATゲートウェイを作成します。
    python natgw_quick_start.py

結果

次の出力が返されます。
--------------------------- create_vpc ---------------------------
{
  "ResourceGroupId": "rg-acfmxaz ****" 、
  "RouteTableId": "vtb-uf6wzp25d8lkb ****" 、
  "VRouterId": "vrt-uf6di7voecmyq ****" 、
  "VpcId": "vpc-uf63cqupghmk1 ****" 、
  "RequestId": "97D36E19-F789-424F-A473-660D63EF8CF9"
}

--------------------------- create_vswitch ---------------------------
{
  "VSwitchId": "vsw-uf6fovepnk4 ****" 、
  "RequestId": "18DA0E81-34A6-4877-9771-E2C4EEEBADD1"
}

--------------------------- create_nat_gateway
{
  "NatGatewayId": "ngw-uf6mfrcmzktst ****" 、
  "BandwidthPackageIds": {
    "BandwidthPackageId": []
  },
  "ForwardTableIds": {
    "ForwardTableId": [
      "ftb-uf6411str8n9s ****"
    ]
  },
  "RequestId": "B1F791C8-73B1-46C5-8A20-726A615BC627" 、
  "SnatTableIds": {
    "SnatTableId": [
      "stb-uf6t4eijvq3ae ****"
    ]
  }
}

--------------------------- describe_nat_gateway
{
  &quot;TotalCount&quot;:1、
  "PageNumber":1、
  "RequestId": "1F9303B1-4024-4A92-B67E-FB6BE1DC76D1" 、
  "PageSize":10、
  "NatGateways": {
    "NatGateway": [
      {
        "ステータス": "利用可能" 、
        "BandwidthPackageIds": {
          "BandwidthPackageId": []
        },
        "VpcId": "vpc-uf63cqupghmk1 ****" 、
        "Description": "",
        "ForwardTableIds": {
          "ForwardTableId": [
            "ftb-uf6411str8n9s ****"
          ]
        },
        "IpLists": {
          "IpList": []
        },
        "BusinessStatus": "Normal" 、
        "RegionId": "cn-shanghai",
        "CreationTime": "2019-04-24T09:09:12Z" 、
        "NatGatewayId": "ngw-uf6mfrcmzktst ****" 、
        "SnatTableIds": {
          "SnatTableId": [
            "stb-uf6t4eijvq3ae ****"
          ]
        },
        "AutoPay": false、
        &quot;InstanceChargeType&quot;: &quot;後払い&quot;、
        "ExpiredTime": "",
        "スペック": "小さい" 、
        "名前": ""
      }
    ]
  }
}

--------------------------- 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"
}