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

Function Compute:ApsaraDB for Redisデータベースへのアクセス

最終更新日:Aug 28, 2024

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

始める前に

ApsaraDB for Redisインスタンスの作成

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

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

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

手順

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

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

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

    sudo s init

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

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

    cd start-fc-redis-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 component name.
          # actions:       # The custom execution logic. For more information about actions, visit https://docs.serverless-devs.com/serverless-devs/yaml#%E8%A1%8C%E4%B8%BA%E6%8F%8F%E8%BF%B0actions.
          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-xbk4"
            description: 'hello world by serverless devs'
            runtime: "python3.9"
            code: ./code
            handler: index.handler
            memorySize: 128
            timeout: 30
            internetAccess: true
            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-bp18vwna9x79koh3q**** # Make sure that the CIDR block of the vSwitch is added to the whitelist of the database instance. 
          environmentVariables:
           REDIS_HOST: r-bp17w15ohdk7****.redis.rds.aliyuncs.com # The private endpoint of the database instance. 
           REDIS_PASSWORD: 15**** # The password of the database instance. 
           REDIS_PORT: 6379 # The private port of the database instance.

      重要

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

    • index.pyコードファイルを編集します。 次のコードスニペットは例を示します。 コードロジックは、Redisからカウンターキーの値を読み取り、値を1だけ増やしてから、新しい値をRedisに書き戻すことです。

      # -*- coding: utf-8 -*-
      import os
      import redis
      
      conn_pool = None
      
      
      def initializer(context):
          global conn_pool
          conn_pool = redis.ConnectionPool(
              host=os.environ['REDIS_HOST'], password=os.environ['REDIS_PASSWORD'],
              port=os.environ['REDIS_PORT'], db=1, decode_responses=True)
      
      
      def handler(event, context):
          global conn_pool
          r = redis.Redis(connection_pool=conn_pool)
      
          counter = r.get('counter')
      
          if counter is None:
              counter = 0
          else:
              counter = int(counter)
      
          print('counter: ' + str(counter))
      
          r.set('counter', str(counter + 1))
          return counter
      
  5. 次のコマンドを実行してプロジェクトをビルドします。

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

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

    sudo s invoke -e "{}"

    次のコードスニペットは、期待される出力を示しています。 返される結果の値が0から増加します。これは、カウンターキーの値がRedisから正常に読み取られたことを示します。

    [2021-09-14T17:08:50.875] [INFO ] [S-CLI] - Start ...
    ========= FC invoke Logs begin =========
    FC Initialize Start RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
    FC Initialize End RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
    FC Invoke Start RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f
    counter: 0
    FC Invoke End RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f
    
    Duration: 27.51 ms, Billed Duration: 28 ms, Memory Size: 256 MB, Max Memory Used: 34.05 MB
    ========= FC invoke Logs end =========
    
    FC Invoke Result:
    0
    
    
    End of method: invoke

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

重要

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

  1. ApsaraDB for Redisコンソールにログインします。

  2. 上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。

  3. [インスタンス] ページで、インスタンスを見つけてIDをクリックします。

  4. インスタンス詳細ページの左側のナビゲーションウィンドウで、[ホワイトリスト設定] をクリックします。 [ホワイトリストの設定] タブで、変更するホワイトリストを見つけ、[操作] 列の [変更] をクリックします。

  5. [ホワイトリストの変更] パネルで、インスタンスがバインドされているvSwitchのCIDRブロックを [ホワイトリスト] フィールドに入力し、[OK] をクリックします。

より多くの情報