Function Computeでは、関数を使用してデータベースAPIを呼び出し、データを挿入またはクエリできます。 ほとんどの場合、インスタンスのステータスはFunction Computeの異なる実行環境間で共有されません。 インスタンスのステータスを共有する場合は、構造化データをデータベースに保存する必要があります。 このトピックでは、Serverless Devsを使用してApsaraDB for Redisデータベースにアクセスする関数をデプロイする方法について説明します。 このトピックではPython 3が使用されています。
前提条件
作成するデータベースインスタンスが、データベースインスタンスにアクセスする必要がある関数と同じリージョンにあることを確認します。
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: データベースのIPアドレスホワイトリストの設定
IPアドレスホワイトリストを使用して、関数がデータベースにアクセスすることを許可します。 セキュリティグループモードを使用しないでください。 そうしないと、関数がデータベースへの接続に失敗し、ビジネスに影響を与えることがあります。
ApsaraDB for Redisコンソールにログインします。
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、インスタンスを見つけてIDをクリックします。
目的のホワイトリストグループを見つけて、[変更] をクリックします。
重要指定するIPアドレスは、Function Computeのネットワークを設定するときに追加するvSwitchのCIDRブロックに属している必要があります。
ステップ2: 関数のデプロイと呼び出し
Serverless DevsとDockerをインストールし、キーを追加します。
詳細については、「Serverless DevsとDockerのインストール」および「キーの追加」をご参照ください。
プロジェクトを初期化します。
s init start-fc-redis-python -d 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-bp1hcg467ekqsv0zr**** # The ID of the virtual private cloud (VPC) in which the database instance resides. securityGroupId: sg-bp1gg2tyyzuvz8x0**** # The ID of the security group. vswitchIds: - vsw-bp1sciqyju9qxocys**** # 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-bp1v04cjj0jlr7****.redis.rds.aliyuncs.com # The private IP address of the database instance. REDIS_PASSWORD: Hangzhou**** # The password of the database instance. REDIS_PORT: 63** # The private port of the database instance.
次のコマンドを実行してプロジェクトをビルドします。
s build --use-docker
次のコマンドを実行して、プロジェクトをデプロイします。
s deploy -y
次のコマンドを実行して関数を呼び出します。
s invoke -e "{}"
期待されるコマンド出力:
[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
サンプルコード
Function ComputeのPythonランタイムでApsaraDB for Redisデータベースにアクセスする