Function Computeでは、関数を使用してデータベースAPIを呼び出し、データを挿入またはクエリできます。 ほとんどの場合、インスタンスのステータスはFunction Computeの異なる実行環境間で共有されません。 インスタンスのステータスを共有する場合は、構造化データをデータベースに保存する必要があります。 このトピックでは、Serverless Devsを使用してApsaraDB RDS for MySQLデータベースにアクセスする関数をデプロイする方法について説明します。 このトピックではPython 3が使用されています。
前提条件
ApsaraDB RDS for MySQLインスタンスの作成
重要作成するデータベースインスタンスが、データベースインスタンスにアクセスする必要がある関数と同じリージョンにあることを確認します。
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」エラーを解決するにはどうすればよいですか?」をご参照ください。
ApsaraDB RDS for MySQLインスタンスにusersという名前のテーブルが作成されます。
この例では、
s init
コマンドを使用して、データベースのusersテーブルのすべてのデータを照会します。 事前にusersテーブルを作成する必要があります。
手順1: データベースのIPアドレスホワイトリストの設定
セキュリティグループを使用してデータベースにアクセスすると、関数の接続が不安定になります。 ビジネスが期待どおりに実行されるように、データベースにアクセスするようにIPアドレスホワイトリストを構成することを推奨します。
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
左側のナビゲーションウィンドウで、ホワイトリストとセキュリティグループをクリックします。
ホワイトリストの設定 タブで、IPアドレスホワイトリストのモードを表示できます。
説明既存のRDSインスタンスは、拡張ホワイトリストモードで実行できます。 すべての新しいRDSインスタンスは標準ホワイトリストモードで実行されます。
表示される [ホワイトリストの設定] タブで、[デフォルト] ホワイトリストグループを見つけ、[変更] をクリックします。
[ホワイトリストの編集] ダイアログボックスで、[IPアドレス] を設定し、[OK] をクリックします。
重要ネットワークをFunction Computeに設定するときに追加するvSwitchのCIDRブロックに属するIPアドレスを指定する必要があります。
ステップ2: 関数のデプロイとデバッグ
Serverless DevsとDockerをインストールし、キーを追加します。
詳細については、「Serverless DevsとDockerのインストール」および「キーの追加」をご参照ください。
プロジェクトを初期化します。
s init start-fc-mysql-python -d start-fc-mysql-python
プロジェクトにアクセスします。
cd start-fc-mysql-python
s.yamlファイルを編集します。
次のサンプルコードは、設定例を示しています。
edition: 1.0.0 name: fcDeployApp access: "default" services: fc-db-mysql-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-bp1j6knvj40yjn0g**** # The ID of the security group. vswitchIds: - vsw-bp1lgecrqfslgji9b**** # Make sure that the CIDR block of the vSwitch is added to the whitelist of the database instance. function: name: mysql description: visit mysql runtime: python3 codeUri: ./code handler: index.handler memorySize: 256 timeout: 60 environmentVariables: MYSQL_HOST: rm-bp13d39n0m2s0****.mysql.rds.aliyuncs.com # The private IP address of the database instance. MYSQL_PORT: 33** # The private port of the database instance. MYSQL_USER: ni**** # The username of the database instance. MYSQL_PASSWORD: Hangzhou**** # The password of the database instance. MYSQL_DBNAME: django-**** # The database that is created on the database instance.
次のコマンドを実行してプロジェクトをビルドします。
s build --use-docker
次のコマンドを実行して、プロジェクトをデプロイします。
s deploy -y
次のコマンドを実行して関数を呼び出します。
s invoke -e "{}"
期待されるコマンド出力:
[2021-09-10T14:35:27.747] [INFO ] [S-CLI] - Start ... ========= FC invoke Logs begin ========= FC Invoke Start RequestId: b00ec6c1-1d12-4110-8299-bb5129a4fd0c 2021-09-10T06:35:37.944Z b00ec6c1-1d12-4110-8299-bb5129a4fd0c [INFO] ('3', 'wan') FC Invoke End RequestId: b00ec6c1-1d12-4110-8299-bb5129a4fd0c Duration: 148.46 ms, Billed Duration: 149 ms, Memory Size: 256 MB, Max Memory Used: 32.21 MB ========= FC invoke Logs end ========= FC Invoke Result: [ "3", "wan" ] End of method: invoke