このトピックでは、Alibaba Cloud SDK for Pythonを使用して、仮想プライベートクラウド (VPC) のvRouterまたは仮想ボーダールーター (VBR) にカスタムルートを作成する方法について説明します。
前提条件
- Alibaba CloudアカウントとAccessKeyペアが取得されます。 Alibaba Cloud管理コンソールの [セキュリティ管理] ページで、AccessKeyペアを作成して表示できます。
- Alibaba Cloud SDK for Pythonがインストールされています。
- VPC Pythonサンプルライブラリがダウンロードされます。 setup.pyファイルが保存されているディレクトリに移動し、次のコマンドを実行して環境を初期化します。
python setup.py install
背景情報
このトピックのコードサンプルには、次の操作が含まれます。
中国 (張家口) リージョンにsdk_route_tableという名前のカスタムルートテーブルを作成します。
vpc-8vb7ztbjqomi9mh1q **** という名前のVPCでvSwitchを照会します。
カスタムルートテーブルをvsw-8vbfqpcijj0d13eaq **** という名前のvSwitchに関連付けます。
カスタムルートテーブルにルートを追加します。 宛先CIDRブロックは168.168.0.0/16です。 ネクストホップはElastic Compute Service (ECS) インスタンスです。 ネクストホップのIDはi-8vbgsnt7046a2qm **** です。
ルートを削除します。
vSwitchからカスタムルートテーブルの関連付けを解除します。
カスタムルートテーブルを削除します。
手順
ダウンロードしたsdkディレクトリにあるaliyun-openapi-python-SDK-examples\sdk_examples\examples\vpcフォルダーを開きます。
エディターを使用してvpc_route_entry.pyファイルを開き、パラメーターを設定してから保存して終了します。
次のサンプルコードが表示されます。
# encoding=utf-8 インポートsys jsonのインポート インポート時間 alibabacloud_credentials.clientからCredClientとしてのインポートクライアント からaliyunsdkcore.acs_exception.exceptions import ServerException, ClientException aliyunsdkvpc.request.v20160428からCreateRouteEntryRequestをインポート aliyunsdkvpc.request.v20160428からDeleteRouteEntryRequestをインポート aliyunsdkvpc.request.v20160428からDescribeRouteTablesRequestをインポート sdk_lib.exception import ExceptionHandlerから sdk_lib.check_statusからCheckStatusをインポートする sdk_lib.common_utilインポートからCommonUtil sdk_lib.sdk_vswitchからVSwitchをインポート sdk_lib.sdk_route_tableからRouteTableをインポート sdk_lib.consts import * から クラスRouteEntry (オブジェクト): def __init__(self, client): self.client=クライアント def create_route_entry(self、params): """ create_route_entry: ルートを作成します。 """ 試してみてください。 request = CreateRouteEntryRequest.CreateRouteEntryRequest() # ルートテーブルのID。 request.set_RouteTableId(params['route_table_id ']) # ルートの宛先CIDRブロック。 request.set_DestinationCidrBlock(params['destination_cidr_block ']) # ネクストホップのタイプ。 request.set_NextHopType(params['nexthop_type']) # ネクストホップインスタンスのID。 request.set_NextHopId(params['nexthop_id']) response = self.client.do_action_with_exception(request) response_json = json.loads (レスポンス) # ルートが使用可能状態かどうかを確認します。 CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME, self.de scribe_route_entry_status、 利用可能、params ['rout_table_id ']): response_jsonを返します except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def delete_route_entry(self, params): """ delete_route_entry: ルートを削除します。 """ 試してみてください。 request = DeleteRouteEntryRequest.DeleteRouteEntryRequest() # ルートが属するルートテーブルのID。 request.set_RouteTableId(params['route_table_id ']) # ルートの宛先CIDRブロック。 request.set_DestinationCidrBlock(params['destination_cidr_block ']) # ネクストホップインスタンスのID。 request.set_NextHopId(params['nexthop_id']) response = self.client.do_action_with_exception(request) response_json = json.loads (レスポンス) time.sleep(DEFAULT_TIME) response_jsonを返します except ServerException as e: ExceptionHandler.server_exception(e) except ClientException as e: ExceptionHandler.client_exception(e) def describe_route_entry_vrouter(self、params): """ describe_route_entry_vrouter: ルートを照会します。 """ 試してみてください。 request = DescribeRouteTablesRequest.DescribeRouteTablesRequest() # ルートテーブルが属するvRouterまたはVBRのID。 request.set_VRouterId(params['vrouter_id']) # ルートテーブルのID。 request.set_RouteTableId(params['route_table_id ']) response = self.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 describe_route_entry(self, route_table_id): """ describe_route_entry: ルートを照会します。 """ 試してみてください。 request = DescribeRouteTablesRequest.DescribeRouteTablesRequest() request.set_RouteTableId(route_table_id) response = self.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 describe_route_entry_status(self, route_table_id): """ describe_route_entry_status: ルートのステータスを照会します。 """ response = self.de scribe_route_entry(route_table_id) return response["RouteTables"]["RouteTable"][0]["RouteEntrys"]["RouteEntry"][0]["Status"] def main(): # Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 セキュリティリスクを防ぐために、RAMユーザーとしてAPI操作を呼び出すか、ルーチンのO&Mを実行することを推奨します。 # AccessKey IDとAccessKey secretをプロジェクトコードに保存することはお勧めしません。 そうしないと、AccessKeyペアが漏洩し、リソースのセキュリティが侵害される可能性があります。 # この例では、AccessKeyペアはAlibaba Cloudが提供する資格情報を使用して取得されます。 ペアは、APIアクセスの認証を実装するために使用されます。 環境変数の設定方法の詳細については、「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>') vswitch = VSwitch (クライアント) route_table = RouteTable (クライアント) route_entry = RouteEntry (クライアント) params = {} params ['rout_table_name '] = "sdk_route_table" params['destination_cidr_block '] = "0.0.0.0/0" params [nexthop_id'] = "i-xxx" params['nexthop_type'] = "インスタンス" params['vpc_id'] = "vpc-xxx" params['vswitch_id'] = "vsw-xxx" # ルートテーブルを作成します。 route_table_json = route_table.create_route_table(params) CommonUtil.log("create_route_table", route_table_json) # vSwitchを照会します。 vswitch_json = vswitch.de scribe_vswitch_attribute(params) CommonUtil.log("describe_vswitch_attribute", vswitch_json) # ルートテーブルをvSwitchに関連付けます。 params['route_table_id '] = route_table_json['RouteTableId'] associate_json = route_table.associate_route_table(params) CommonUtil.log("associate_route_table", associate_json) # ルートを作成します。 create_route_entry_json = route_entry.create_route_entry(params) CommonUtil.log("create_route_entry", create_route_entry_json) # ルートを削除します。 delete_route_entry_json = route_entry.delete_route_entry(params) CommonUtil.log("delete_route_entry", delete_route_entry_json) # vSwitchからルートテーブルの関連付けを解除します。 unassociate_json = route_table.unassociate_route_table(params) CommonUtil.log("unassociate_route_table", unassociate_json) # ルートテーブルを削除します。 delete_route_table_json = route_table.delete_route_table(params) CommonUtil.log("delete_route_table", delete_route_table_json) if __name__ == "__main__": sys.exit(main())
vpc_route_entry.pyファイルが保存されているディレクトリに移動し、次のコマンドを実行してルートを作成します。
python vpc_route_entry.py
結果
次の出力が返されます。
--------------------------- create_route_table ---------------------------
{
"RouteTableId": "vtb-8vbn7px9zxwr2mh1q ****" 、
"RequestId": "8B351EE1-614F-44E4-93AF-1CADA4BF02E8"
}
--------------------------- describe_vswitch_attribute ---------------------------
{
"ステータス": "" 、
"NetworkAclId": "" 、
"VpcId": "" 、
"Description": "",
"Ipv6CidrBlock": "" 、
"CreationTime": "" 、
"CloudResources": {
"CloudResourceSetType": []
},
"ZoneId": "" 、
"ResourceGroupId": "",
"VSwitchId": "",
"RequestId": "5E199415-BBA3-443D-B1EC-06341FE267F4" 、
"VSwitchName": "" 、
"CidrBlock": "
}
--------------------------- associate_route_table ---------------------------
{
"RequestId": "5F33E444-5CCD-4677-91AB-3E234A9A64E4"
}
--------------------------- create_route_entry ---------------------------
{
"RequestId": "D6035ECA-DD81-4FAB-B084-55BE60FB18ED"
}
--------------------------- delete_route_entry
{
"RequestId": "54108FD7-8609-4111-919D-B2983466F480"
}
--------------------------- unassociate_route_table ---------------------------
{
"RequestId": "0F36A76A-1E54-41DC-852E-1D970FDE8F3F"
}
--------------------------- delete_route_table
{
"RequestId": "F3151A59-4F90-4531-AFDC-B7B7CF70A8C1"
}