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

Function Compute:Tair (Redis OSS-compatible) データベースへのアクセス例

最終更新日:Feb 28, 2026

VPC(仮想プライベートクラウド)経由で Tair (Redis OSS-compatible) インスタンスに接続する Function Compute 関数をデプロイします。本ガイドでは、Serverless Devs を使用して Python 3 の関数をデプロイし、Tair に格納されたカウンター値の読み取りと増分処理を行う手順を説明します。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

重要

Tair インスタンスと Function Compute 関数は、同じリージョン内にある必要があります。Tair インスタンスを、Function Compute がサポートするゾーンで作成します。インスタンスがサポートされていないゾーンにある場合は、同じ VPC 内のサポートされているゾーンに vSwitch を作成します。同じ VPC 内の vSwitch はプライベートネットワークを介して通信できるため、Function Compute は引き続きインスタンスにアクセスできます。詳細については、「「vSwitch がサポートされていないゾーンにあります」エラーを解決する方法は?」をご参照ください。

IP アドレスホワイトリストの設定

関数をデプロイする前に、Tair インスタンスのホワイトリストに vSwitch の CIDR ブロックを追加し、Function Compute がインスタンスにアクセスできるように設定します。

重要

Function Compute による Tair インスタンスへのアクセスを許可するには、IP アドレスホワイトリストを使用してください。セキュリティグループモードは使用しないでください。セキュリティグループモードでは、一時的な接続障害が発生する可能性があります。

  1. Tair コンソール にログインします。

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

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

  4. 左側ナビゲーションウィンドウで、ホワイトリスト設定 をクリックします。ホワイトリスト設定 タブで、変更するホワイトリストを見つけ、編集 をクリックします(操作 列)。

  5. ホワイトリストの編集 パネルで、ホワイトリスト フィールドに vSwitch の CIDR ブロックを入力し、OK をクリックします。

操作手順

ステップ 1:プロジェクトの初期化

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

sudo s init

CLI のプロンプトに従って操作します。

  1. ベンダーとして Alibaba Cloud を選択します。

  2. クイックスタート モードを選択します。

  3. 組み込みの Python ランタイムを選択します。

  4. プロジェクト名およびリージョンを指定します。本ガイドでは、中国 (杭州) リージョンの start-fc-redis-python プロジェクトを使用します。

プロジェクトディレクトリに移動します。

cd start-fc-redis-python

ステップ 2:プロジェクトファイルの構成

s.yaml の編集

以下の構成で s.yaml ファイルを編集します。プレースホルダーの値を、実際の VPC、セキュリティグループ、vSwitch、および Tair インスタンスの詳細情報に置き換えてください。

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: 'fc visit db のデモ'
    internetAccess: true
    vpcConfig:
     vpcId: vpc-bp1oeg1fwxzuxcliq****       # Tair インスタンスが存在する VPC の ID
     securityGroupId: sg-bp164seaxj7wc4d0**** # セキュリティグループ ID
     vswitchIds:
      - vsw-bp1192npo1ziqzw4****             # vSwitch ID(Tair のホワイトリストにその CIDR ブロックを追加)
   function:
    name: redis
    description: 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 # Tair インスタンスの非公開エンドポイント
     REDIS_PASSWORD: ****                                      # Tair インスタンスのパスワード
     REDIS_PORT: 63**                                          # Tair インスタンスの非公開ポート

以下のプレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
vpc-bp1oeg1fwxzuxcliq****Tair インスタンスが存在する VPC の IDvpc-bp1oeg1fwxzuxcliq1234
sg-bp164seaxj7wc4d0****セキュリティグループ IDsg-bp164seaxj7wc4d01234
vsw-bp1192npo1ziqzw4****vSwitch IDvsw-bp1192npo1ziqzw41234
r-bp1h2g53l3thqg****.redis.rds.aliyuncs.comTair インスタンスの非公開エンドポイントr-bp1h2g53l3thqg1234.redis.rds.aliyuncs.com
****(REDIS_PASSWORD)Tair インスタンスのパスワードご利用のパスワード
63**Tair インスタンスの非公開ポート6379

index.py コードファイルの編集

この関数は、Tair インスタンスから counter キーの値を読み取り、1 増分して再び書き戻し、前の値を返します。

# -*- coding: utf-8 -*-
import os
import redis

# グローバル接続プール。関数呼び出し間で再利用され、レイテンシーを低減
conn_pool = None


def initializer(context):
    """環境変数を使用して Redis 接続プールを初期化します。"""
    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):
    """Tair におけるカウンター値の読み取り、増分、ライトバックを実行します。"""
    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
説明

redis Python ライブラリはサードパーティ依存関係です。 次のステップで Docker を使用してプロジェクトをビルドすると、自動的にバンドルされます。 その他の依存関係管理オプションについては、「関数にサードパーティ依存関係をインストールする」をご参照ください。

ステップ 3:ビルドおよびデプロイ

プロジェクトをビルドします。

sudo s build --use-docker

プロジェクトをデプロイします。

sudo s deploy -y

ステップ 4:関数の呼び出しおよび検証

sudo s invoke -e "{}"

期待される出力:

[2021-09-14T17:08:50.875] [INFO ] [S-CLI] - 開始 ...
========= FC 呼び出しログ開始 =========
FC 初期化開始 RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
FC 初期化終了 RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
FC 呼び出し開始 RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f
counter: 0
FC 呼び出し終了 RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f

実行時間: 27.51 ms、課金時間: 28 ms、メモリサイズ: 256 MB、最大メモリ使用量: 34.05 MB
========= FC 呼び出しログ終了 =========

FC 呼び出し結果:
0


メソッド invoke の終了

返された値は 0 から始まり、呼び出しのたびに増分します。これは、関数が Tair インスタンス内の counter キーを正しく読み書きできていることを確認するものです。複数回呼び出しを実行して、カウンターが正しく増分することを検証してください:012… と続きます。

トラブルシューティング

接続タイムアウト

症状: 関数がタイムアウトし、結果を返さない。

原因および解決策:

  1. VPC の構成ミスvpcIdsecurityGroupId、および vswitchIdss.yaml で正しく設定されており、かつ Tair インスタンスと同じ VPC に属しているか確認してください。

  2. ホワイトリスト未設定:vSwitch の CIDR ブロックが Tair インスタンスのホワイトリストに追加されているか確認してください。「IP アドレスホワイトリストの設定」をご参照ください。

  3. サポートされていないゾーンの vSwitch: Function Compute がサポートするゾーンに vSwitch を作成してください。詳細については、「vSwitch is in unsupported zone」エラーを解決する方法をご参照ください。

認証失敗

症状: 関数が NOAUTH Authentication requiredERR invalid password、または WRONGPASS invalid username-password pair エラーを返す。

原因および解決策:

  1. パスワードが不正REDIS_PASSWORD 環境変数が s.yaml で正しく設定されているか確認してください。

  2. ホストまたはポートが不正REDIS_HOST および REDIS_PORT が、Tair コンソールに表示される非公開エンドポイントおよびポートと一致しているか確認してください。

依存関係エラー

症状: 関数が ModuleNotFoundError: No module named 'redis' エラーを返す。

解決策: デプロイ前に Docker を使用してプロジェクトをビルドしてください。

sudo s build --use-docker
sudo s deploy -y

詳細については、「一般的なエラーとトラブルシューティング」と「データベースアクセス障害のトラブルシューティング方法」をご参照ください。

リソースのクリーンアップ

継続的な課金を回避するため、本ガイドで作成したリソースを削除してください。

  1. デプロイ済みの関数およびサービスを削除します。

       sudo s remove -y
  2. Tair インスタンスが本チュートリアル専用に作成された場合は、Tair コンソール でリリースしてください。

  3. VPC、vSwitch、またはセキュリティグループが本チュートリアル専用に作成された場合は、VPC コンソール で削除してください。

参考情報