このトピックでは、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
背景情報
このトピックのコードサンプルには、次の操作が含まれます。- 中国 (上海) リージョンに仮想プライベートクラウド (VPC) を作成します。
- VPC で vSwitch を作成します。
- VPCのNATゲートウェイを作成します。
- NAT gatewayを照会します。
- NAT gatewayを削除します。
- vSwitchを削除します。
- VPCを削除します。
手順
- ダウンロードしたSDKファイルのディレクトリで、aliyun-openapi-python-sdk-examples\sdk_examples\examples\natgwフォルダーを開きます。
- テキストエディターで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())
- 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
{
"TotalCount":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、
"InstanceChargeType": "後払い"、
"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"
}