全部產品
Search
文件中心

Function Compute:訪問MongoDB樣本

更新時間:Jul 06, 2024

訪問資料庫是指在Function Compute中通過函數調用資料庫應用編程介面,對資料庫執行資料插入、查詢等操作。通常Function Compute中不同的執行環境執行個體之間的狀態是不共用的,通過資料庫可以將結構化的資料持久化以實現狀態共用。本文以Python 3為例,介紹如何使用Serverless Devs部署函數來訪問MongoDB資料庫。

前提條件

  • 建立適合業務需求的ApsaraDB for MongoDB執行個體:
    重要
    • 請確保您所建立的資料庫執行個體與需要訪問該資料庫執行個體的函數在同一地區。

    • 建議您在Function Compute支援的可用性區域建立資料庫執行個體。更多資訊,請參見Function Compute支援的可用性區域

      如果您的資料庫執行個體不在Function Compute支援的可用性區域內,可以通過在您的VPC環境中建立一個與Function Compute相同可用性區域的vSwitch,並在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集合中插入一條文檔資料;其中,test-db為環境變數MONGO_DATABASE的取值。

步驟一:設定資料庫訪問IP地址白名單

請使用IP地址白名單來實現安全訪問,請勿使用安全性群組。否則,可能會導致函數串連不穩定的情況,影響業務正常運行。

說明 本文以分區叢集執行個體為例。添加IP地址白名單的詳細步驟,請參見修改白名單
  1. 登入ApsaraDB for MongoDB
  2. 在頂部功能表列,選擇地區。
  3. 在左側導覽列,單擊分區叢集執行個體列表
  4. 分區叢集執行個體列表頁面,找到目標執行個體,並單擊其名稱。
  5. 在左側導覽列,選擇資料安全性 > 白名單設定
  6. 白名單設定頁面,找到白名單分組名,在其操作列,單擊更多表徵圖,在下拉式功能表中,選擇手動修改
  7. 手動修改面板,按需填寫IP地址,單擊確定
    重要

    此處填寫的IP地址,為在Function Compute服務的網路設定中添加的vSwitch的IP位址區段。您可以在服務的網路設定中,單擊配置的專用網路名稱跳轉到專用網路控制台擷取。

步驟二:部署並調試函數

  1. 安裝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**** # 資料庫執行個體所在的VPC ID。
         securityGroupId: sg-bp1j6knvj40yjn0g**** # 安全性群組ID。
         vswitchIds:
          - vsw-bp1lgecrqfslgji9b**** # 請確保該vSwitch對應的網段已配置到資料庫執行個體訪問白名單中。
          function:
            name: mongodb
            description: visit mongodb
            runtime: python3
            codeUri: ./code
            handler: index.handler
            memorySize: 256
            timeout: 60
            environmentVariables:
              MONGO_DATABASE: test-db # 資料庫名稱。
              MONGO_URL: mongodb://m****:Hang****@s-bp1a2d6c391e****.mongodb.rds.aliyuncs.com:37** # 資料庫存取點。

  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 ComputePython訪問MongoDB資料庫