訪問資料庫是指在Function Compute中通過函數調用資料庫應用編程介面,對資料庫執行資料插入、查詢等操作。通常Function Compute中不同的執行環境執行個體之間的狀態是不共用的,通過資料庫可以將結構化的資料持久化以實現狀態共用。本文以Python 3為例,介紹如何使用Serverless Devs部署函數來訪問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的錯誤怎麼辦?。
步驟一:設定資料庫訪問IP地址白名單
重要 請使用設定IP地址白名單方式授權函數訪問資料庫,請勿使用安全性群組方式。否則,可能導致函數偶爾串連不上資料庫的情況,影響業務正常運行。
- 登入Redis管理主控台。
- 在頂部功能表列的左上方,選擇執行個體所屬的地區。
- 在執行個體列表頁,單擊目標執行個體ID。
- 找到目標白名單分組,單擊修改。重要 此處填寫的IP地址,需為在Function Compute服務的網路設定中添加的vSwitch的IP位址區段。
步驟二:部署並調用函數
- 安裝Serverless Devs和Docker,並添加密鑰資訊。具體操作,請參見安裝Serverless Devs工具及依賴和添加密鑰資訊。
- 執行以下命令初始化專案。
s init start-fc-redis-python -d start-fc-redis-python
- 執行以下命令進入專案。
cd start-fc-redis-python
- 編輯s.yaml檔案。
樣本如下:
edition: 1.0.0 name: fcDeployApp access: "default" services: fc-db-redis-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-bp1gg2tyyzuvz8x0**** # 安全性群組ID。 vswitchIds: - vsw-bp1sciqyju9qxocys**** # 請確保該vSwitch對應的網段已配置到資料庫執行個體訪問白名單中。 function: name: redis description: visit redis runtime: python3 codeUri: ./code handler: index.handler memorySize: 256 timeout: 30 initializationTimeout: 60 initializer: index.initializer environmentVariables: REDIS_HOST: r-bp1v04cjj0jlr7****.redis.rds.aliyuncs.com # 資料庫執行個體的私網地址。 REDIS_PASSWORD: Hangzhou**** # 資料庫執行個體的密碼。 REDIS_PORT: 63** # 資料庫執行個體的私網連接埠。
- 執行以下命令構建專案。
s build --use-docker
- 執行以下命令部署專案。
s deploy -y
- 執行以下命令調用函數。
s invoke -e "{}"
預期輸出如下:
[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