このトピックでは、仮想プライベートクラウド (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」エラーを解決するにはどうすればよいですか?.
手順
Serverless DevsとDockerをインストールし、AccessKey情報を設定します。
詳細については、「Serverless Devsの構成」トピックの「クイックスタート」および「キーの追加」セクションをご参照ください。
次のコマンドを実行してプロジェクトを初期化します。
sudo s initCLIで、ベンダーとしてAlibaba Cloudを指定し、クイックスタートモードを指定してから、組み込みのPythonランタイムを選択します。 プロジェクト名と、プロジェクトがデプロイされるリージョンを指定します。 この例では、start-fc-redis-pythonプロジェクトが中国 (杭州) リージョンにデプロイされています。
次のコマンドを実行して、プロジェクトディレクトリに移動します。
cd start-fc-redis-python独自のビジネス要件に基づいてディレクトリファイルを変更します。
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
次のコマンドを実行してプロジェクトをビルドします。
sudo s build --use-docker次のコマンドを実行して、プロジェクトをデプロイします。
sudo s deploy -y次のコマンドを実行して、関数を呼び出します。
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アドレスホワイトリストを使用して、関数がデータベースにアクセスすることを許可します。 セキュリティグループモードを使用しないでください。 そうしないと、関数がデータベースへの接続に失敗し、ビジネスに影響を与えることがあります。
コンソールにログインします。
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページでインスタンスを見つけ、そのIDをクリックします。
インスタンス詳細ページの左側のナビゲーションウィンドウで、[ホワイトリスト設定] をクリックします。 [ホワイトリストの設定] タブで、変更するホワイトリストを見つけ、[操作] 列の [変更] をクリックします。
[ホワイトリストの変更] パネルで、インスタンスがバインドされているvSwitchのCIDRブロックを [ホワイトリスト] フィールドに入力し、[OK] をクリックします。
関連ドキュメント
Tair (Redis OSS-compatible) データベースへのアクセスの詳細については、GitHubをご参照ください。
Function Computeで設定されたvSwichesに関する情報を表示し、Function Compute vSwichesのCIDRブロックをTair (Redis OSS互換) データベースのホワイトリストに追加する方法の詳細については、「ネットワーク設定の設定」および「IPアドレスホワイトリストの設定」をご参照ください。
このトピックで提供されるサンプルコードが期待どおりに実行されるように、Tair (Redis OSS-compatible) クライアントライブラリをインポートする必要があります。 サードパーティの依存関係をインストールする方法の詳細については、「関数にサードパーティの依存関係をインストールする」をご参照ください。
設定されたvSwitchが指定されたゾーンにアクセスできない場合は、「vSwitch is in unsupported zone」エラーを解決するにはどうすればよいですか? Tair (Redis OSS-compatible) データベースにアクセスしたときに発生する可能性のある一般的な例外の詳細については、「一般的なエラーとトラブルシューティング」をご参照ください。 を参照して、データベース接続障害のトラブルシューティングを行うこともできます。データベースアクセス障害のトラブルシューティング方法? 問題の説明に基づいています。