全部產品
Search
文件中心

Function Compute:訪問Redis樣本

更新時間:Jul 06, 2024

您可以參考本文提供的Function Compute訪問ApsaraDB for Redis的操作指導,在函數中配置Virtual Private Cloud相關資訊並在資料庫中配置白名單,實現VPC內的Redis資料庫訪問和操作。本文以Python 3為例,介紹如何使用Serverless Devs部署函數來訪問Redis資料庫。

前提條件

建立Redis執行個體

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

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

操作步驟

  1. 安裝Serverless Devs和Docker,並添加密鑰資訊。

    具體操作,請參見快速入門添加密鑰資訊

  2. 執行以下命令初始化專案。

    sudo s init

    根據介面提示,依次選擇阿里雲廠商、快速建立模式和Python內建運行時,設定工程名稱以及選擇專案部署地區等,本文樣本為在杭州地區下部署start-fc-redis-python專案。

  3. 執行以下命令進入專案。

    cd start-fc-redis-python
  4. 根據實際情況修改目錄檔案。

    • 編輯s.yaml檔案,樣本如下。

      edition: 3.0.0
      name: hello-world-app
      access: "default"
      
      vars: # 全域變數
        region: "cn-hangzhou"
      
      resources:
        hello_world:
          component: fc3 # 組件名稱
          # actions:       # 自訂執行邏輯,關於actions 的使用,可以參考:https://docs.serverless-devs.com/serverless-devs/yaml#%E8%A1%8C%E4%B8%BA%E6%8F%8F%E8%BF%B0actions
          props:
            region: ${vars.region}              # 關於變數的使用方法,可以參考: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**** # 資料庫執行個體所在的VPC ID
             securityGroupId: sg-bp1el3hto8hhkdup**** # 安全性群組ID
             vSwitchIds: 
              - vsw-bp18vwna9x79koh3q**** # 請確保該vSwitch對應的網段已配置到資料庫執行個體訪問白名單中 
          environmentVariables:
           REDIS_HOST: r-bp17w15ohdk7****.redis.rds.aliyuncs.com # 資料庫執行個體的私網地址。
           REDIS_PASSWORD: 15**** # 資料庫執行個體的密碼。
           REDIS_PORT: 6379 # 資料庫執行個體的私網連接埠。
      重要

      請確保您為函數配置的交換器網段已添加到資料庫執行個體訪問白名單中。具體操作,請參見設定資料庫訪問IP地址白名單

    • 編輯index.py代碼檔案,樣本如下,代碼邏輯為從Redis中讀取一個名稱為counter的鍵的值,將其加1,然後將新值寫回Redis。

      # -*- coding: utf-8 -*-
      import os
      import redis
      
      conn_pool = None
      
      
      def initializer(context):
          global conn_pool
          conn_pool = redis.ConnectionPool(
              host=os.environ['REDIS_HOST'], password=os.environ['REDIS_PASSWORD'],
              port=os.environ['REDIS_PORT'], db=1, decode_responses=True)
      
      
      def handler(event, context):
          global conn_pool
          r = redis.Redis(connection_pool=conn_pool)
      
          counter = r.get('counter')
      
          if counter is None:
              counter = 0
          else:
              counter = int(counter)
      
          print('counter: ' + str(counter))
      
          r.set('counter', str(counter + 1))
          return counter
      
  5. 執行以下命令構建專案。

    sudo s build --use-docker
  6. 執行以下命令部署專案。

    sudo s deploy -y
  7. 執行以下命令調用函數。

    sudo s invoke -e "{}"

    預期輸出如下,返回結果中的數字從0開始遞增,表示已成功讀取Redis中名稱為counter的鍵的值。

    [2021-09-14T17:08:50.875] [INFO ] [S-CLI] - Start ...
    ========= FC invoke Logs begin =========
    FC Initialize Start RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
    FC Initialize End RequestId: ccd73383-048d-4c8d-834e-93da59b86a21
    FC Invoke Start RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f
    counter: 0
    FC Invoke End RequestId: eccafc0a-493e-4f3e-9afa-45c0b84a2c0f
    
    Duration: 27.51 ms, Billed Duration: 28 ms, Memory Size: 256 MB, Max Memory Used: 34.05 MB
    ========= FC invoke Logs end =========
    
    FC Invoke Result:
    0
    
    
    End of method: invoke

設定資料庫訪問IP地址白名單

重要 請使用設定IP地址白名單方式授權函數訪問資料庫,請勿使用安全性群組方式。否則,可能導致函數偶爾串連不上資料庫的情況,影響業務正常運行。
  1. 登入Redis管理主控台
  2. 在頂部功能表列的左上方,選擇執行個體所屬的地區。
  3. 執行個體列表頁,單擊目標執行個體ID。
  4. 在執行個體詳情頁面的左側導覽列,選擇白名單配置,在白名單設定頁簽,找到目標白名單分組,單擊右側操作列的修改

  5. 在彈出的修改白名單分組面板中,在組內白名單輸入框輸入目標執行個體綁定的vSwitch的IP位址區段,然後單擊確定

更多資訊