Function Compute では、状態は異なる実行環境インスタンス間で共有されません。 データベースを使用して構造化データを永続化し、状態の共有を実現できます。 Function Compute を介してクラウドデータベースにアクセスすることで、データクエリやデータ挿入などの操作を実行できます。 このトピックでは、Python 3 を例として使用して、同じ VPC 内または VPC とリージョンを跨いで Tair (Redis OSS-compatible) にアクセスする方法について説明します。
前提条件
手順
ステップ 1: データベースのホワイトリストを構成する
シナリオ 1: 同じ VPC 内の Redis データベースにアクセスする
作成するデータベースインスタンスが、データベースインスタンスにアクセスする必要がある関数と同じリージョンにあることを確認します。
Function Compute でサポートされているゾーンにデータベースインスタンスを作成します。 詳細については、「Function Compute でサポートされているゾーン」をご参照ください。
データベースインスタンスが Function Compute でサポートされているゾーンにデプロイされていない場合は、VPC に vSwitch を作成します。 vSwitch は Function Compute と同じゾーンにある必要があります。 また、Function Compute の指定されたサービスの VPC 構成で vSwitch ID を指定する必要があります。 プライベートネットワークは同じ VPC 内の異なる vSwitch 間で相互に通信できるため、Function Compute は vSwitch を介して他のゾーンの VPC 内のリソースにアクセスできます。 詳細については、「vSwitch がサポートされていないゾーンにある場合のエラーが発生した場合の対処方法」をご参照ください。
Tair (Redis OSS-compatible) コンソール にログインし、上部のナビゲーションバーでリージョンを選択し、ターゲットインスタンス ID をクリックし、[インスタンス情報] をクリックして、Redis インスタンスの VPC 情報を表示します。

Function Compute コンソール にログインし、Python Web 関数を作成し、関数の VPC アクセスを有効にし、ターゲット VPC リソースを構成します。
説明関数に構成された VPC が、データベースインスタンスが接続されている VPC と同じであることを確認します。

関数の詳細ページで、 を選択し、[ネットワーク] ページの関数構成で vSwitch の CIDR ブロックを取得します。

前のステップで取得した関数構成の vSwitch の CIDR ブロックをデータベースアクセスホワイトリストに追加します。
重要IP アドレスホワイトリストを使用して、関数がデータベースにアクセスすることを承認します。 セキュリティグループモードを使用しないでください。 そうしないと、関数がデータベースへの接続に断続的に失敗し、ビジネスに影響を与える可能性があります。
コンソール にログイン し、上部のナビゲーションバーでリージョンを選択し、ターゲットインスタンス ID をクリックします。
インスタンス詳細ページの左側のナビゲーションウィンドウで、[ホワイトリスト設定] をクリックします。 [ホワイトリスト設定] タブで、ターゲットホワイトリストグループを見つけ、[操作] 列の [変更] をクリックします。
表示される [ホワイトリストグループの変更] パネルで、[ホワイトリストグループの IP アドレス] フィールドにターゲットインスタンスが接続されている vSwitch の CIDR ブロックを入力し、[OK] をクリックします。

構成が完了すると、関数はデータベースの内部エンドポイントを介して Redis データベースにアクセスできます。
シナリオ 2: VPC またはリージョンを跨いで Redis データベースにアクセスする
異なる VPC とリージョンは、論理的に完全に分離されています。 通常、VPC またはリージョンを跨いでデータベースにアクセスすることはできません。 VPC またはリージョンを跨いでデータベースにアクセスする必要がある場合は、関数に固定パブリック IP アドレスを構成できます。 この場合、システムは関数が接続されている仮想プライベートクラウド (VPC) にパブリック NAT ゲートウェイを作成します。 パブリックゲートウェイを使用して、パブリック IP アドレスを介してデータベースにアクセスできます。
Tair (Redis OSS-compatible) コンソール にログインし、[インスタンス情報] をクリックして、Redis インスタンスの VPC 情報を表示します。

Function Compute コンソール にログインし、Python Web 関数を作成します。 関数の詳細ページで、 を選択します。 [ネットワーク] パネルで、関数の固定パブリック IP アドレスを構成し、[デプロイ] をクリックします。

表示される [固定パブリック IP 構成] ダイアログボックスで、プロンプトボックスのチェックボックスをオンにし、[OK] をクリックします。 構成が完了したら、[デフォルト NIC がインターネットにアクセスすることを許可する] パラメーターを [いいえ] に設定して、構成された固定パブリック IP アドレスを有効にします。 詳細については、「固定パブリック IP アドレスを構成する」をご参照ください。
説明[デフォルト NIC がインターネットにアクセスすることを許可する] パラメーターを [いいえ] に設定すると、固定パブリック IP アドレスが有効になります。 Function Compute はデフォルトのネットワークインターフェースカード (NIC) を無効にして、VPC に接続されている NIC を介してトラフィックがインターネットにアクセスするように強制します。
関数の詳細ページで、 を選択し、[ネットワーク] ページで関数に構成された固定パブリック IP アドレスを取得します。

前のステップで取得した関数の固定パブリック IP アドレスをデータベースアクセスホワイトリストに追加します。
重要IP アドレスホワイトリストを使用して、関数がデータベースにアクセスすることを承認します。 セキュリティグループモードを使用しないでください。 そうしないと、関数がデータベースへの接続に断続的に失敗し、ビジネスに影響を与える可能性があります。
管理コンソール にログイン し、上部でリージョンを選択し、ターゲットインスタンス ID をクリックします。
インスタンス詳細ページの左側のナビゲーションウィンドウで、[ホワイトリスト設定] をクリックします。 [ホワイトリスト設定] タブで、ターゲットホワイトリストグループを見つけ、[操作] 列の [変更] をクリックします。
表示される [ホワイトリストグループの変更] パネルで、[ホワイトリストグループの IP アドレス] ダイアログボックスのホワイトリストに固定パブリック IP アドレスを構成し、[OK] をクリックします。

構成が完了すると、関数はデータベースのパブリックエンドポイントを介して Redis データベースにアクセスできます。
ステップ 2: 関数で Redis にアクセスする
Function Compute コンソール にログインし、関数リストでターゲット関数を見つけ、関数の詳細ページの [コード] タブをクリックし、コードエディタに次のサンプルコードを記述します。
from flask import Flask,jsonify import os import redis app = Flask(__name__) # Redis シングルトン接続を格納するためのグローバル変数 _redis_connection = None # データベース接続を作成する (シングルトンパターン) def getConnection(): global _redis_connection try: # 接続が既に存在し、切断されていない場合は、それを直接返す if _redis_connection is not None: try: # 接続が有効かどうかをテストする (単純な ping コマンド) if _redis_connection.ping(): return _redis_connection except redis.ConnectionError: # 接続が切断されている場合は、それをリセットする _redis_connection = None # 接続が存在しないか、切断されている場合は、再作成する _redis_connection = redis.Redis( host=os.environ['REDIS_HOST'], password=os.environ['REDIS_PASSWORD'], port=os.environ['REDIS_PORT'], db=1, decode_responses=True ) # 新しい接続が成功したかどうかをテストする if not _redis_connection.ping(): raise Exception("Redis 接続の作成後に失敗しました。") return _redis_connection except Exception as e: print(f"Redis 接続の初期化に失敗しました: {e}") raise @app.route('/', defaults={'path': ''}) @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']) def hello_world(path): try: r = getConnection() 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 str(counter) except Exception as e: print(f"エラーが発生しました: {e}") return jsonify({"error": str(e)}), 500 if __name__ == '__main__': app.run(host='0.0.0.0',port=9000)[関数の詳細] ページで、 を選択し、[編集] をクリックし、[環境変数] パネルで次の環境変数を構成します。
環境変数名
環境変数値
説明
REDIS_HOST
r-bp*****.redis.rds.aliyuncs.com
データベースインスタンスのエンドポイントです。 [同一 VPC 内の Redis データベース] シナリオを選択した場合は、この環境変数をデータベースの VPC エンドポイントに設定します。 [VPC またはリージョン間の Redis データベース] シナリオを選択した場合は、この環境変数をデータベースのパブリックエンドポイントに設定します。
[インスタンスリスト] にアクセスし、上部のナビゲーションバーでリージョンを選択し、ターゲットインスタンス ID をクリックします。 左側のナビゲーションウィンドウで、[インスタンス情報] をクリックします。 [接続情報] セクションで、データベースに接続するための接続アドレス情報を取得します。

REDIS_PASSWORD
*****
データベースのパスワード。
REDIS_PORT
6379
データベースのポート番号
Redis データベースに初期値を設定します。 関数の詳細ページで、[コード] タブをクリックし、[関数のテスト] をクリックし、正常に実行された後に返された結果を確認します。

詳細情報
Tair (Redis OSS-compatible) へのアクセスのその他の例については、「Function Compute Python accessing Tair (Redis OSS-compatible)」をご参照ください。
Tair (Redis OSS-compatible) へのアクセスに関するその他の例外ケースについては、「一般的なエラー」をご参照ください。
発生した例外の問題が解決しない場合は、問題の症状に基づいてトラブルシューティングを行う必要があります。 詳細については、「データベースアクセス障害の一般的な原因」をご参照ください。
Serverless Devs コマンドラインツールを使用して関数を作成し、Tair (Redis OSS-compatible) データベースにアクセスする場合は、次の手順をご参照ください。