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

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

最終更新日:Aug 28, 2024

このトピックでは、仮想プライベートクラウド (VPC) 経由でFunction ComputeからApsaraDB for MongoDBデータベースへのアクセスを実装する方法について説明します。 具体的には、ApsaraDB for MongoDBデータベースにアクセスし、関連する操作を実行するために、関数およびデータベースのホワイトリストでVPC関連の設定を設定できます。 このトピックでは、Serverless Devsを使用して、Python 3ランタイムでApsaraDB for MongoDBデータベースにアクセスする関数をデプロイします。

始める前に

手順

  1. Serverless DevsとDockerをインストールし、AccessKey情報を設定します。

    詳細については、「Serverless Devsと依存関係のインストール」および「Serverless Devsの設定」をご参照ください。

  2. 次のコマンドを実行して、プロジェクトを初期化します。

    sudo s init

    CLIで、ベンダーとしてAlibaba Cloudを指定し、クイックスタートモードを指定し、組み込みのPythonランタイムを選択します。 プロジェクト名とプロジェクトがデプロイされるリージョンを設定します。 この例では、start-fc-mongodb-pythonプロジェクトが中国 (杭州) リージョンにデプロイされています。

  3. 次のコマンドを実行して、プロジェクトディレクトリに移動します。

    cd start-fc-mongodb-python
  4. 独自のビジネス要件に基づいてディレクトリファイルを変更します。

    • 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)
  5. 次のコマンドを実行してプロジェクトをビルドします。

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

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

    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アドレスホワイトリストを使用して、関数がデータベースにアクセスすることを許可します。 セキュリティグループモードを使用しないでください。 そうしないと、関数がデータベースへの接続に失敗し、ビジネスに影響を与えることがあります。

例として、シャードクラスタインスタンスを使用します。

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

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

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

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

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

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

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

    重要

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

より多くの情報