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

:EIPをSLBインスタンスまたはENIに関連付ける

最終更新日:Jan 02, 2024

このトピックでは、Alibaba Cloud SDK for Pythonを使用して、EIP (elastic IPアドレス) をServer Load Balancer (SLB) インスタンスまたはelastic network interface (ENI) に関連付ける方法について説明します。

前提条件

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. 中国 (杭州) リージョンでSLBインスタンスを作成します。
  2. 中国 (杭州) リージョンでEIPを作成します。
  3. EIPをSLBインスタンスに関連付けます。
  4. SLBインスタンスからEIPの関連付けを解除します。
  5. EIPをENIに関連付けます。
  6. ENIからEIPの関連付けを解除します。
  7. SLBインスタンスを削除します。

手順

  1. ダウンロードしたSDKディレクトリで、$aliyun-openapi-python-sdk-examples\sdk_examples\examples\eipフォルダーを開きます。
  2. テキストエディターでeip_associate_slb.pyを開きます。 必要なパラメーターを設定し、設定を保存してから、エディターを終了します。
    次のサンプルコードが表示されます。
    #encoding=utf-8
    インポートsys
    jsonのインポート
    alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
    からaliyunsdkcore.acs_exception.exceptions import ServerException, ClientException
    aliyunsdkvpc.request.v20160428からAllocateEipAddressRequestをインポート
    aliyunsdkvpc.request.v20160428からAssociateEipAddressRequestをインポート
    aliyunsdkvpc.request.v20160428からDescribeEipAddressesRequestをインポート
    aliyunsdkvpc.request.v20160428からUnassociateEipAddressRequestをインポート
    aliyunsdkvpc.request.v20160428からModifyEipAddressAttributeRequestをインポート
    aliyunsdkvpc.request.v20160428からReleaseEipAddressRequestをインポート
    sdk_lib.exception import ExceptionHandlerから
    sdk_lib.check_statusからCheckStatusをインポートする
    sdk_lib.consts import * から
    sdk_lib.common_utilインポートからCommonUtil
    sdk_lib.sdk_load_balancerからLoadBalancerをインポート
    
    """
    1. VPC を作成します。 2. VSwitch を作成します。 3. Elastic Compute Service (ECS) APIを呼び出してENIを作成します。 これらの手順は、次のコードには含まれません。
    4. SLBインスタンスを作成します。 5. EIP を作成します。 6. EIPをSLBインスタンスに関連付けます。 7. SLBインスタンスからEIPの関連付けを解除します。 8. EIPをENIに関連付けます。 9. ENIからEIPの関連付けを解除します。 10。 SLBインスタンスを削除します。
    """
    クラスEip (オブジェクト):
        def __init__(self, client):
            self.client=クライアント
    
        def allocate_eip_address(self, params):
            """
            allocate_eip_address: EIPを作成します。
            """
            試してみてください。
                request = AllocateEipAddressRequest。AllocateEipAddressRequest()
                response = self.client.do_action_with_exception(request)
                response_json = json.loads (レスポンス)
                CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME,
                                            self.de scribe_eip_status、
                                            利用可能、response_json["AllocationId"]):
                    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: 同じリージョンにデプロイされているクラウドリソースにEIPを関連付けます。
            """
            試してみてください。
                request = AssociateEipAddressRequest。AssociateEipAddressRequest()
                # EIPのID。
                request.set_AllocationId(params['allocation_id'])
                # EIPを関連付けるクラウドリソースのタイプ。
                request.set_InstanceType(params['instance_type'])
                # EIPを関連付けるクラウドリソースのID。
                request.set_InstanceId(params['instance_id'])
                response = self.client.do_action_with_exception(request)
                response_json = json.loads (レスポンス)
                CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME,
                                            self.de scribe_eip_status、
                                            InUse、params['allocation_id']):
                    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: 特定のリージョンのEIPを照会します。
            """
            試してみてください。
                request = DescribeEipAddressesRequest.DescribeEipAddressesRequest()
                # EIPのID。
                request.set_AllocationId(allocation_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_eip_status(self, allocation_id):
            """
            describe_eip_status: リージョン内のEIPのステータスを照会します。
            """
            # EIPのID。
            response = self.de scribe_eip_address(allocation_id)
            リターンレスポンス ["EipAddresses"]["EipAddress"][0]["Status"]
    
    
        def unassociate_eip_address(self, params):
            """
            unassociate_eip_address: 関連するクラウドリソースからEIPの関連付けを解除します。
            """
            試してみてください。
                request = UnassociateEipAddressRequest。UnassociateEipAddressRequest()
                # EIPのID。
                request.set_AllocationId(params['allocation_id'])
                # EIPの関連付けを解除するクラウドリソースのタイプ。
                request.set_InstanceType(params['instance_type'])
                # EIPの関連付けを解除するクラウドリソースのID。
                request.set_InstanceId(params['instance_id'])
                response = self.client.do_action_with_exception(request)
                response_json = json.loads (レスポンス)
                CheckStatus.check_status(TIME_DEFAULT_OUT, DEFAULT_TIME,
                                            self.de scribe_eip_status、
                                            利用可能、params['allocation_id']):
                    response_jsonを返します
                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: EIPの名前、説明、および最大帯域幅値を変更します。
            """
            試してみてください。
                request = ModifyEipAddressAttributeRequest。ModifyEipAddressAttributeRequest()
                # EIPのID。
                request.set_AllocationId(params['allocation_id'])
                # EIPの最大帯域幅値。 単位:Mbit/秒。
                request.set_Bandwidth(params['bandwidth'])
                # EIPの名前。
                request.set_Name(params['name'])
                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 release_eip_address(self、params):
            """
            release_eip_address: 特定のEIPをリリースします。
            """
            試してみてください。
                request = ReleaseEipAddressRequest。ReleaseEipAddressRequest()
                # リリースするEIPのID。
                request.set_AllocationId(params['allocation_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 main():
    
        # 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()
    
        # Create an AcsClient instance.
        client = AcsClient(access_key_id, access_key_secret, '<your-region-id>')
    
        eip = Eip (クライアント)
        load_balancer = LoadBalancer (クライアント)
        # VPCを作成し、vSwitchを作成し、ECS APIを呼び出してENIを作成します。
        params = {}
        params['vpc_id'] = VPC_ID
        params['vswitch_id'] = VSWITCH_ID
    
        # SLBインスタンスを作成します。
        load_balancer_repsonse_json = load_balancer.create_load_balancer(params)
        CommonUtil.log("create_load_balancer", load_balancer_repsonse_json)
    
        # EIPを作成します。
        params['load_balancer_id '] = load_balancer_repsonse_json['LoadBalancerId']
        params['instance_id'] = load_balancer_repsonse_json['LoadBalancerId']
        eip_response_json = eip.allocate_eip_address(params)
        CommonUtil.log("allocate_eip_address slb", eip_response_json)
    
        # EIPをSLBインスタンスに関連付けます。
        params['allocation_id'] = eip_response_json["AllocationId"]
        params['instance_type'] = 'SlbInstance'
        eip_response_json = eip.associate_eip_address(params)
        CommonUtil.log("associate_eip_address eip", eip_response_json)
    
        # EIPとNATゲートウェイの関連付けを解除します。
        eip_response_json = eip.unassociate_eip_address(params)
        CommonUtil.log("unassociate_eip_address slb", eip_response_json)
    
        # EIPをENIに関連付けます。
        params['instance_id'] = ENI_ID
        params['instance_type'] = 'NetworkInterface'
        eip_response_json = eip.associate_eip_address(params)
        CommonUtil.log("associate_eip_address eni", eip_response_json)
    
        # EIPとNATゲートウェイの関連付けを解除します。
        eip_response_json = eip.unassociate_eip_address(params)
        CommonUtil.log("unassociate_eip_address eni", eip_response_json)
    
        # SLBインスタンスを削除します。
        load_balancer_repsonse_json = load_balancer.delete_load_balancer(params)
        CommonUtil.log("delete_load_balancer", load_balancer_repsonse_json)
    
    if __name__ ='__main__':
        sys.exit(main()) 
  3. eip_associate_slb.pyファイルが保存されているディレクトリに移動し、次のコマンドを実行してEIPをSLBインスタンスまたはENIに関連付けます。
    Python eip_associate_slb.py

結果

次の出力が返されます。
--------------------------- create_load_balancer ---------------------------
{
  "VpcId": "vpc-bp15opprpg0rg ****" 、
  "AddressIPVersion": "ipv4",
  "LoadBalancerName": "auto_named_slb",
  "ResourceGroupId": "rg-acfm4od ****" 、
  "VSwitchId": "vsw-bp1e67w26n2sj ****" 、
  "RequestId": "D3651A96-008C-4B35-A36E-54C2902535C5" 、
  "アドレス": "172.XX. XX.146" 、
  "NetworkType": "vpc",
  "LoadBalancerId": "lb-bp15u6kumammd ****"
}
--------------------------- allocate_eip_address slb ---------------------------
{
  "EipAddress": "47.XX. XX.76" 、
  "ResourceGroupId": "rg-acfm4od ****" 、
  "RequestId": "15FD58CD-B186-4E2C-B4B3-74F712168832" 、
  "AllocationId": "eip-bp1ofhmmep6rk ****"
}
--------------------------- associate_eip_address eip ---------------------------
{
  "RequestId": "5EDABF0B-A067-474E-9556-0A3AA870960A"
}
--------------------------- unassociate_eip_address slb --------------------------
-
{
  "RequestId": "89556510-D726-490A-9092-9BEA0644CC43"
}
--------------------------- associate_eip_address eni ---------------------------
{
  "RequestId": "FAE87FDD-232A-4859-803B-F9B57508AEDC"
}
--------------------------- unassociate_eip_address eni
-
{
  "RequestId": "7DF556E8-12BE-481A-B83D-B3D9E8836534"
}
--------------------------- delete_load_balancer ---------------------------
{
  "RequestId": "2B70C01A-A440-40A5-A98B-83A687537CCE"
}