このトピックでは、仮想プライベートクラウド (VPC) 経由でFunction ComputeからApsaraDB for MongoDBデータベースへのアクセスを実装する方法について説明します。 具体的には、ApsaraDB for MongoDBデータベースにアクセスし、関連する操作を実行するために、関数およびデータベースのホワイトリストでVPC関連の設定を設定できます。 このトピックでは、Serverless Devsを使用して、Python 3ランタイムでApsaraDB for MongoDBデータベースにアクセスする関数をデプロイします。
始める前に
ApsaraDB for MongoDBデータベースインスタンスを作成します。
このトピックでは、シャードクラスタインスタンスを例として使用します。
重要作成するデータベースインスタンスが、データベースインスタンスにアクセスする必要がある関数と同じリージョンにあることを確認します。
Function Computeがサポートするゾーンにデータベースインスタンスを作成することを推奨します。 詳細については、「Function Computeが利用可能なゾーン」をご参照ください。
データベースインスタンスがFunction Computeでサポートされているゾーンにない場合、Function Computeと同じゾーンのVPCにvSwitchを作成し、関数のVPC設定でこのvSwitch IDを使用できます。 同じVPC内のvSwitchは、プライベートネットワークを介して相互に通信できます。 したがって、Function ComputeはvSwitchを使用して、他のゾーンにあるVPCのリソースにアクセスできます。 詳細については、「vSwitchがサポートされていないゾーンエラーが報告された場合はどうすればよいですか?」をご参照ください。
test-dbという名前のデータベースとfc_colという名前のデータベースコレクションを作成します。 詳細については、「データベースとコレクションの作成とデータの書き込み」をご参照ください。
このトピックでは、index.pyのサンプルコードのコードロジックで、test-dbデータベースのfc-colコレクションにドキュメントデータを挿入します。
手順
Serverless DevsとDockerをインストールし、AccessKey情報を設定します。
詳細については、「Serverless Devsと依存関係のインストール」および「Serverless Devsの設定」をご参照ください。
次のコマンドを実行して、プロジェクトを初期化します。
sudo s init
CLIで、ベンダーとしてAlibaba Cloudを指定し、クイックスタートモードを指定し、組み込みのPythonランタイムを選択します。 プロジェクト名とプロジェクトがデプロイされるリージョンを設定します。 この例では、start-fc-mongodb-pythonプロジェクトが中国 (杭州) リージョンにデプロイされています。
次のコマンドを実行して、プロジェクトディレクトリに移動します。
cd start-fc-mongodb-python
独自のビジネス要件に基づいてディレクトリファイルを変更します。
s.yamlファイルを編集します。 例:
edition: 3.0.0 name: hello-world-app access: "default" vars: # The global variables. region: "cn-hangzhou" resources: hello_world: component: fc3 # The component name. # actions: # The custom execution logic. For more information about actions, visit https://docs.serverless-devs.com/serverless-devs/yaml#%E8%A1%8C%E4%B8%BA%E6%8F%8F%E8%BF%B0actions. props: region: ${vars.region} # For information about how to use variables, visit https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC. functionName: "start-python-xbk4" description: 'hello world by serverless devs' runtime: "python3.9" code: ./code handler: index.handler memorySize: 128 timeout: 30 internetAccess: true vpcConfig: vpcId: vpc-bp11y195luy47h8cm**** # The ID of the VPC in which the database instance resides. securityGroupId: sg-bp1el3hto8hhkdup**** # The ID of the security group. vSwitchIds: - vsw-bp18vwna9x79koh3q**** # Make sure that the CIDR block of the vSwitch is added to the whitelist of the database instance. environmentVariables: MONGO_DATABASE: test-db # The name of the database. MONGO_URL: mongodb://username:password@d-bp1b05cac9df0dd****.mongodb.rds.aliyuncs.com:37** # The endpoint of the database. In the code, username and password indicate the username and password of the account that is used to connect to the database. If the username and password contain special characters, you must escape them in accordance with RFC 3986.
重要関数用に設定したvSwitchのCIDRブロックがデータベースインスタンスのホワイトリストに追加されていることを確認します。 詳細については、「データベースのIPアドレスホワイトリストの設定」をご参照ください。
index.pyファイルを編集します。 次のコードは例を提供します。 コードロジックは、test-dbデータベースのfc-colコレクションにドキュメントデータを挿入します。
# -*- coding: utf-8 -*- import os from pymongo import MongoClient # You need to install the pymongo library first. def handler(event, context): dbName = os.environ['MONGO_DATABASE'] url = os.environ['MONGO_URL'] client = MongoClient(url) col = client[dbName]['fc_col'] col.insert_one(dict(DEMO="FC", MSG="Hello FunctionCompute For MongoDB")) doc = col.find_one(dict(DEMO="FC")) print('find documents:' + str(doc)) return str(doc)
次のコマンドを実行してプロジェクトをビルドします。
sudo s build --use-docker
次のコマンドを実行して、プロジェクトをデプロイします。
sudo s deploy -y
次のコマンドを実行して、関数を呼び出します。
sudo s invoke -e "{}"
次のコードスニペットは、期待される出力を示しています。 返された結果は、データレコードがApsaraDB for MongoDBデータベースに正常に挿入されたことを示しています。
========= FC invoke Logs begin ========= FC Invoke Start RequestId: 1-65d30578-1586adb3-4d0f099c1ada find documents:{'_id': ObjectId('65d2faef467c916ed6401a73'), 'DEMO': 'FC', 'MSG': 'Hello FunctionCompute For MongoDB'} FC Invoke End RequestId: 1-65d30578-1586adb3-4d0f099c1ada Duration: 161.75 ms, Billed Duration: 162 ms, Memory Size: 256 MB, Max Memory Used: 34.44 MB ========= FC invoke Logs end ========= FC Invoke instanceId: c-65d304d7-15f440b6-20443f00e921 FC Invoke Result: {'_id': ObjectId('65d2faef467c916ed6401a73'), 'DEMO': 'FC', 'MSG': 'Hello FunctionCompute For MongoDB'} End of method: invoke
データベースのIPアドレスホワイトリストの構成
IPアドレスホワイトリストを使用して、関数がデータベースにアクセスすることを許可します。 セキュリティグループモードを使用しないでください。 そうしないと、関数がデータベースへの接続に失敗し、ビジネスに影響を与えることがあります。
例として、シャードクラスタインスタンスを使用します。
ApsaraDB for MongoDBコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、シャードクラスタインスタンス をクリックします。
シャードクラスタインスタンスページで、目的のクラスターの名前をクリックします。
左側のナビゲーションウィンドウで、を選択します。
[ホワイトリストの設定] ページで、目的のホワイトリストグループを見つけ、[操作] 列のアイコンをクリックします。 ドロップダウンメニューで、[手動で変更] を選択します。
手動で変更パネルで、IPアドレスを入力し、OK をクリックします。
重要ネットワークをFunction Computeに設定するときに追加するvSwitchのCIDRブロックに属するIPアドレスを指定する必要があります。
より多くの情報
ApsaraDB For MongoDBデータベースにアクセスするためのサンプルコードの詳細については、「Python access mongodb database in Function Compute」をご参照ください。
Function Computeで設定されたvSwichesに関する情報を表示し、Function Compute vSwichesのCIDRブロックをApsaraDB RDS For MongoDBデータベースのホワイトリストに追加する方法の詳細については、「ネットワーク設定の設定」および「IPアドレスホワイトリストの設定」をご参照ください。
「データベースアクセス障害のトラブルシューティング方法?」を参照して、データベース接続障害のトラブルシューティングを行うことができます。