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

Function Compute:ApsaraDB RDS for SQL Serverデータベースへのアクセス

最終更新日:Aug 28, 2024

このトピックでは、仮想プライベートクラウド (VPC) を介してFunction ComputeからApsaraDB RDS for SQL Serverデータベースへのアクセスを確立するためのガイダンスを提供します。 具体的には、ApsaraDB RDS for SQL Serverデータベースにアクセスし、関連する操作を実行するために、関数およびデータベースのホワイトリストでVPC関連の設定を構成できます。 このトピックでは、Serverless Devsを使用して、Python 3ランタイムでApsaraDB RDS for SQL Serverデータベースにアクセスする関数をデプロイします。

始める前に

  • ApsaraDB RDS for SQL Serverインスタンスの作成

    重要
    • 作成するデータベースインスタンスが、データベースインスタンスにアクセスする必要がある関数と同じリージョンにあることを確認します。

    • Function Computeがサポートするゾーンにデータベースインスタンスを作成することを推奨します。 詳細については、「Function Computeが利用可能なゾーン」をご参照ください。

      データベースインスタンスがFunction Computeでサポートされているゾーンにない場合、Function Computeと同じゾーンのVPCにvSwitchを作成し、関数のVPC設定でこのvSwitch IDを使用できます。 同じVPC内のvSwitchは、プライベートネットワークを介して相互に通信できます。 したがって、Function ComputeはvSwitchを使用して、他のゾーンにあるVPCのリソースにアクセスできます。 詳細については、「vSwitchがサポートされていないゾーンエラーが報告された場合はどうすればよいですか?」をご参照ください。

  • usersという名前のテーブルを作成します。

    このトピックのindex.pyのサンプルコードでは、usersデータベーステーブル内のすべてのデータが照会されます。 したがって、事前にテーブルを作成する必要があります。

手順

  1. Serverless DevsとDockerをインストールし、AccessKey情報を設定します。

    詳細については、「Serverless Devsと依存関係のインストール」および「Serverless Devsの設定」をご参照ください。

  2. 次のコマンドを実行して、プロジェクトを初期化します。

    sudo s init

    CLIで、ベンダーとしてAlibaba Cloudを指定し、クイックスタートモードを指定し、組み込みのPythonランタイムを選択します。 プロジェクト名とプロジェクトがデプロイされるリージョンを設定します。 この例では、start-fc-sql-server-pythonプロジェクトが中国 (杭州) リージョンにデプロイされています。

  3. 次のコマンドを実行して、プロジェクトディレクトリに移動します。

    cd start-fc-sql-server-python
  4. 独自のビジネス要件に基づいてディレクトリファイルを変更します。

    • s.yamlファイルを編集します。 例:

      edition: 3.0.0
      name: hello-world-app
      access: "default"
      
      vars: # The global variables.
        region: "cn-hangzhou"
      
      resources:
        hello_world:
          component: fc3 # The name of the component. Serverless Devs is similar to a game console and does not have specific business capabilities without components. A component is similar to a game card. You can insert different game cards into the game console to play different games. Similarly, you can use different components to implement different business capabilities.
          props:
            region: ${vars.region}              # For information about how to use variables, visit https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC.
            functionName: "start-python-xt8f"
            description: 'hello world by serverless devs'
            runtime: "python3.9"
            code: ./code
            handler: index.handler
            memorySize: 128
            timeout: 30
            vpcConfig:
              vpcId: vpc-bp11y195luy47h8cm****  # The ID of the VPC in which the database instance resides.
              securityGroupId: sg-bp1el3hto8hhkdup****  # The ID of the security group.
              vSwitchIds:
                - vsw-bp116uemmj7fniubi****  # Make sure that the CIDR block of the vSwitch is added to the whitelist of the database instance.
            environmentVariables:
              MSSQL_SERVER: rm-bp1gmz41ws982****.sqlserver.rds.aliyuncs.com  # The database endpoint.
              MSSQL_PORT: "1433"  # The port of the database.
              MSSQL_USER: sqlserver****  # The name of the database user.
              MSSQL_PASSWORD: z****  # The password of the database user.
              MSSQL_DATABASE: z****  # The name of the database.
      重要

      関数用に設定したvSwitchのCIDRブロックがデータベースインスタンスのホワイトリストに追加されていることを確認します。 詳細については、「データベースのIPアドレスホワイトリストの設定」をご参照ください。

    • index.pyコードファイルを編集します。 次のコードスニペットは例を示します。 コードロジックは、ユーザーテーブルのすべてのデータを読み取ることです。

      # -*- coding: utf-8 -*-
      import logging
      import pymssql   # You need to install the pymssql library first.
      import os
      
      logger = logging.getLogger()
      
      
      # Create a database connection.
      def getConnection():
          try:
              conn = pymssql.connect(
                  host=os.environ['MSSQL_SERVER'],
                  port=int(os.environ['MSSQL_PORT']),
                  user=os.environ['MSSQL_USER'],
                  password=os.environ['MSSQL_PASSWORD'],
                  database=os.environ['MSSQL_DATABASE'],
                  charset='utf8')
              return conn
          except Exception as e:
              logger.error(e)
              logger.error(
                  "ERROR: Unexpected error: Could not connect to SQL Server instance.")
              raise Exception(str(e))
      
      
      def handler(event, context):
          conn = getConnection()
          try:
              with conn.cursor() as cursor:
                  # Query all data in the users table.
                  cursor.execute("SELECT * FROM users")
                  result = cursor.fetchone()
                  logger.info(result)
                  return result
          finally:
              # Close the database connection.
              conn.close()
      
  5. 次のコマンドを実行してプロジェクトをビルドします。

    sudo s build --use-docker
  6. 次のコマンドを実行して、プロジェクトをデプロイします。

    sudo s deploy -y
  7. 次のコマンドを実行して、関数を呼び出します。

    sudo s invoke -e "{}"

    次のコードスニペットは、期待される出力を示しています。 次の応答は、データベースのusersテーブルからデータが正常に読み取られたことを示します。

    ========= FC invoke Logs begin =========
    FunctionCompute python3 runtime inited.
    FC Invoke Start RequestId: 1-65d404e6-15b9013a-67628c1019d2
    2024-02-20T01:48:22.181Z 1-65d404e6-15b9013a-67628c1019d2 [INFO] None
    FC Invoke End RequestId: 1-65d404e6-15b9013a-67628c1019d2
    
    Duration: 90.16 ms, Billed Duration: 91 ms, Memory Size: 128 MB, Max Memory Used: 16.54 MB
    ========= FC invoke Logs end =========
    
    Invoke instanceId: c-65d404de-15f440b6-75331892ecca
    Code Checksum: 18155960032536767495
    Qualifier: LATEST
    RequestId: 1-65d404e6-15b9013a-67628c1019d2
    
    Invoke Result:
    null
    [hello_world] completed (0.32s)

データベースのIPアドレスホワイトリストの構成

重要

IPアドレスホワイトリストを使用して、関数がデータベースにアクセスすることを許可します。 セキュリティグループモードを使用しないでください。 そうしないと、関数がデータベースへの接続に失敗し、ビジネスに影響を与えることがあります。

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。

  2. 左側のナビゲーションウィンドウで、ホワイトリストとセキュリティグループ.をクリックします。

    ホワイトリストの設定 タブで、IPアドレスホワイトリストのモードを表示できます。

    説明

    既存のRDSインスタンスは、拡張ホワイトリストモードで実行できます。 すべての新しいRDSインスタンスは標準ホワイトリストモードで実行されます。

  3. 表示される [ホワイトリストの設定] タブで、[デフォルト] ホワイトリストグループを見つけ、[変更] をクリックします。

  4. [ホワイトリストの編集] ダイアログボックスで、[IPアドレス] を設定し、[OK] をクリックします。

    重要

    ネットワークをFunction Computeに設定するときに追加するvSwitchのCIDRブロックに属するIPアドレスを指定する必要があります。

より多くの情報