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

Function Compute:Tair (Redis OSS互換) データベースへのアクセス

最終更新日:Dec 24, 2024

このトピックでは、仮想プライベートクラウド (VPC) 経由でFunction ComputeからTair (Redis OSS-compatible) データベースにアクセスする方法について説明します。 関数でVPC関連の設定、およびデータベースのホワイトリストを設定して、Tair (Redis OSS-compatible) データベースにアクセスし、関連する操作を実行できます。 このトピックでは、Serverless Devsを使用して、Python 3ランタイムでTair (Redis OSS-compatible) データベースにアクセスする関数をデプロイします。

前提条件

Tair (Redis OSS互換) インスタンスが作成されます。 詳細については、「手順1: インスタンスの作成」をご参照ください。

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

  • Function Computeがサポートするゾーンにデータベースインスタンスを作成することを推奨します。 メッセージルーティング機能の詳細については、「Function Computeがサポートされているゾーン」をご参照ください。

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

手順

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

    詳細については、「Serverless Devsの構成」トピックの「クイックスタート」および「キーの追加」セクションをご参照ください。

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

    sudo s init

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

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

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

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

      edition: 1.0.0    
      name: fcDeployApp   
      access: "default" 
      
      services:
       fc-db-redis-python:
        component: devsapp/fc 
        props:
         region: cn-hangzhou
         service:
          name: fc-db-demo
          description: 'demo for fc visit db'
          internetAccess: true
          vpcConfig:
           vpcId: vpc-bp1oeg1fwxzuxcliq**** # The ID of the VPC in which the database instance resides. 
           securityGroupId: sg-bp164seaxj7wc4d0**** # The ID of the security group. 
           vswitchIds:
            - vsw-bp1192npo1ziqzw4**** # Make sure that the CIDR block of the vSwitch is added to the whitelist of the database instance. 
         function:
          name: redis
          description: visit redis
          runtime: python3
          codeUri: ./code
          handler: index.handler
          memorySize: 256
          timeout: 30
          initializationTimeout: 60
          initializer: index.initializer
          environmentVariables:
           REDIS_HOST: r-bp1h2g53l3thqg****.redis.rds.aliyuncs.com # The private IP address of the database instance. 
           REDIS_PASSWORD: **** # The password used to log on to the database instance. 
           REDIS_PORT: 63** # The private port of the database instance.

      重要

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

    • index.pyコードファイルを編集します。 コードロジックは、Tair (Redis OSS互換) からカウンターキーの値を読み取り、値を1だけ増やしてから、新しい値をTair (Redis OSS互換) に書き戻すことです。 サンプルコード:

      # -*- 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から増加します。これは、カウンターキーの値がTair (Redis OSS互換) から正常に読み取られたことを示します。

    [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. コンソールにログインします。

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

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

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

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

関連ドキュメント