全部產品
Search
文件中心

Function Compute:訪問RDS MySQL樣本

更新時間:Jul 06, 2024

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

前提條件

  • 快速建立RDS MySQL執行個體
    重要
    • 請確保您所建立的資料庫執行個體與需要訪問該資料庫執行個體的函數在同一地區。

    • 建議您在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的錯誤怎麼辦?

  • 建立資料庫和帳號
  • 在建立的資料庫中,建立名為users的表。

    本文樣本中,s init初始化的模板代碼中的代碼邏輯為查詢名為users的資料庫表中的所有資料,因此,需提前建立該表。

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

說明 使用安全性群組方式訪問資料庫會導致函數串連不穩定。為了確保您的業務正常運行,推薦您使用配置IP地址白名單的方式訪問資料庫。
  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
  2. 在左側導覽列單擊白名單與安全性群組

    白名單設定頁面,可查看當前的IP白名單模式。

    說明

    較早建立的執行個體可能採用高安全模式。新建立的執行個體都採用通用白名單模式。

  3. 在預設顯示的白名單設定頁簽,找到default白名單分組,在其右側,單擊修改
  4. 修改白名單分組對話方塊,修改組內白名單,單擊確定
    重要 此處填寫的IP地址,需為在Function Compute服務的網路設定中添加的vSwitch的IP段。

步驟二:部署並調試函數

  1. 安裝Serverless Devs和Docker,並添加密鑰資訊。
  2. 執行以下命令初始化專案。
    s init start-fc-mysql-python -d start-fc-mysql-python

  3. 執行以下命令進入專案。
    cd start-fc-mysql-python

  4. 編輯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**** # 資料庫執行個體所在的VPC ID。
         securityGroupId: sg-bp1j6knvj40yjn0g**** # 安全性群組ID。
         vswitchIds:
          - vsw-bp1lgecrqfslgji9b**** # 請確保該vSwitch對應的網段已配置到資料庫執行個體訪問白名單中。
       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 # 資料庫執行個體的私網地址。
         MYSQL_PORT: 33** # 資料庫執行個體的私網連接埠。
         MYSQL_USER: ni**** # 資料庫執行個體的使用者。
         MYSQL_PASSWORD: Hangzhou**** # 資料庫執行個體的密碼。
         MYSQL_DBNAME: django-**** # 資料庫執行個體中建立的資料庫。

  5. 執行以下命令構建專案。
    s build --use-docker

  6. 執行以下命令部署專案。
    s deploy -y

  7. 執行以下命令調用函數。
    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

範例程式碼

Function ComputePython訪問MySQL資料庫