すべてのプロダクト
Search
ドキュメントセンター

Function Compute:ApsaraDB for MongoDBデータベースへのアクセス

最終更新日:Sep 09, 2024

Function Computeでは、関数を使用してデータベースAPIを呼び出し、データを挿入またはクエリできます。 ほとんどの場合、インスタンスのステータスはFunction Computeの異なる実行環境間で共有されません。 インスタンスのステータスを共有する場合は、構造化データをデータベースに保存する必要があります。 このトピックでは、Serverless Devsを使用してApsaraDB for MongoDBデータベースにアクセスする関数をデプロイする方法について説明します。 このトピックではPython 3が使用されています。

前提条件

  • ApsaraDB for MongoDBデータベースインスタンスが作成されました。

    重要
    • 作成するデータベースインスタンスが、データベースインスタンスにアクセスする必要がある関数と同じリージョンにあることを確認します。

    • 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」エラーを解決するにはどうすればよいですか?」をご参照ください。

  • test-dbという名前のデータベースとfc_colという名前のデータベースコレクションが作成されます。

    この例では、s initコマンドを使用して、test-dbデータベースのfc-colコレクションにドキュメントデータエントリを挿入します。 MONGO_DATABASEパラメーターの値はtest-dbです。

手順1: データベースのIPアドレスホワイトリストの設定

安全なアクセスのために、セキュリティグループの代わりにIPアドレスホワイトリストを使用することを推奨します。 そうしないと、関数の接続が不安定になり、ビジネスに影響します。

説明

このトピックでは、シャードクラスターインスタンスを使用します。 IPアドレスをホワイトリストに追加する方法については、「ApsaraDB For MongoDBインスタンスのIPアドレスホワイトリストの変更」をご参照ください。

  1. ApsaraDB for MongoDBコンソールにログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. 左側のナビゲーションウィンドウで、シャードクラスターインスタンスをクリックします。

  4. [シャードクラスターインスタンス] ページで、目的のクラスターの名前をクリックします。

  5. 左側のナビゲーションウィンドウで、[データセキュリティ] > [ホワイトリスト設定] を選択します。

  6. [ホワイトリストの設定] ページで、ホワイトリストグループを見つけ、[操作] 列のMoreアイコンをクリックし、ドロップダウンリストから [手動で変更] を選択します。

  7. [手動で変更] パネルで、IPアドレスを入力し、[OK] をクリックします。

    重要

    ネットワークをFunction Computeに設定するときに追加するvSwitchのCIDRブロックに属するIPアドレスを指定する必要があります。

ステップ2: 関数のデプロイとデバッグ

  1. Serverless DevsとDockerをインストールし、キーを追加します。

    詳細については、「Serverless DevsとDockerのインストール」および「キーの追加」をご参照ください。

  2. プロジェクトを初期化します。

    s init start-fc-mongodb-python -d start-fc-mongodb-python
  3. プロジェクトにアクセスします。

    cd start-fc-mongodb-python
  4. s.yamlファイルを編集します。

    次のサンプルコードは、設定例を示しています。

    edition: 1.0.0
    name: fcDeployApp
    access: "default"
    
    services:
      fc-db-mongodb-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: mongodb
            description: visit mongodb
            runtime: python3
            codeUri: ./code
            handler: index.handler
            memorySize: 256
            timeout: 60
            environmentVariables:
              MONGO_DATABASE: test-db # The name of the database. 
              MONGO_URL: mongodb://m****:Hang****@s-bp1a2d6c391e****.mongodb.rds.aliyuncs.com:37** # The endpoint of the database. 
  5. 次のコマンドを実行してプロジェクトをビルドします。

    s build --use-docker
  6. 次のコマンドを実行して、プロジェクトをデプロイします。

    s deploy -y
  7. 次のコマンドを実行して関数を呼び出します。

    s invoke -e "{}"

    期待されるコマンド出力:

    [2021-09-22T22:25:58.139] [INFO ] [S-CLI] - Start ...
    ========= FC invoke Logs begin =========
    FC Invoke Start RequestId: b361814a-0a70-4511-8212-6739389d3ca4
    find documents:{'_id': ObjectId('614b3ccea90d5fbfc262e918'), 'DEMO': 'FC', 'MSG': 'Hello FunctionCompute For MongoDB'}
    FC Invoke End RequestId: b361814a-0a70-4511-8212-6739389d3ca4
    
    Duration: 61.27 ms, Billed Duration: 62 ms, Memory Size: 256 MB, Max Memory Used: 51.21 MB
    ========= FC invoke Logs end =========
    
    FC Invoke Result:
    {'_id': ObjectId('614b3ccea90d5fbfc262e918'), 'DEMO': 'FC', 'MSG': 'Hello FunctionCompute For MongoDB'}
    
    
    End of method: invoke

サンプルコード

Function ComputeのPythonランタイムでMongoDBデータベースにアクセスする