溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Serverless 解惑——函數(shù)計算如何訪問 Redis 數(shù)據(jù)庫

發(fā)布時間:2020-08-04 23:11:14 來源:ITPUB博客 閱讀:170 作者:阿里巴巴云原生 欄目:云計算

函數(shù)計算(Function Compute): 函數(shù)計算 是事件驅(qū)動的全托管計算服務(wù)。使用函數(shù)計算,您無需采購與管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫并上傳代碼。函數(shù)計算為您準(zhǔn)備好計算資源,彈性地可靠地運行任務(wù),并提供日志查詢、性能監(jiān)控和報警等功能。借助函數(shù)計算,您可以快速構(gòu)建任何類型的應(yīng)用和服務(wù),并且只需為任務(wù)實際消耗的資源付費。

訪問 Redis 數(shù)據(jù)庫是指在函數(shù)計算中通過編寫代碼調(diào)用數(shù)據(jù)庫驅(qū)動庫通過 TCP 協(xié)議實現(xiàn)對數(shù)據(jù)庫進行的插入、查詢等操作。通常函數(shù)計算中運行的不同函數(shù)實例之間是不共享狀態(tài)的,對于結(jié)構(gòu)化的數(shù)據(jù)可以通過數(shù)據(jù)庫的形式進行持久化以實現(xiàn)狀態(tài)共享。由于用戶函數(shù)運行在函數(shù)計算的 VPC 中,而用戶的數(shù)據(jù)庫運行在用戶所屬的 VPC 中,所以在函數(shù)計算平臺訪問數(shù)據(jù)庫會涉及到跨 VPC 訪問的場景,下面我們先來介紹一下其工作機制。

工作機制

訪問 Redis 的原理、工作機制與訪問 Mysql 數(shù)據(jù)庫完全相同,本文不再重復(fù)闡述,更詳細的內(nèi)容請參考 訪問 Mysql 數(shù)據(jù)庫 中的工作機制章節(jié)。

配置與函數(shù)編寫

公共配置

創(chuàng)建專有網(wǎng)絡(luò)VPC
  1. 登錄 VPC控制臺。
  2. 參閱 VPC 搭建專有網(wǎng)絡(luò) 創(chuàng)建VPC和交換機。
創(chuàng)建安全組

在 安全組控制臺 新建安全組,點擊 創(chuàng)建安全組,設(shè)置安全組名稱,網(wǎng)絡(luò)類型選擇 專有網(wǎng)絡(luò),并選擇剛才創(chuàng)建的專有網(wǎng)絡(luò)。

創(chuàng)建與配置 Redis 實例
  1. 創(chuàng)建適合業(yè)務(wù)需求的云數(shù)據(jù)庫 Redis 版實例可以參考 云數(shù)據(jù)庫 Redis 版。

  2. 創(chuàng)建成功后,在 實例信息頁面左側(cè)的導(dǎo)航欄中單擊 白名單設(shè)置。

  3. 單擊 default 區(qū)域框右側(cè)的 修改。
    Serverless 解惑——函數(shù)計算如何訪問 Redis 數(shù)據(jù)庫

  4. 在彈出的對話框中,將 函數(shù)計算所在的 VPC 網(wǎng)絡(luò)的網(wǎng)段地址配置在白名單輸入框中。

    1. 登錄 VPC 控制臺,在專有網(wǎng)絡(luò)列表中找到應(yīng)用所在的 VPC,單擊該 VPC 的名稱進入 專有網(wǎng)絡(luò)詳情頁面。
    2. 復(fù)制應(yīng)用所在的 VPC 的 IPv4 網(wǎng)段
      Serverless 解惑——函數(shù)計算如何訪問 Redis 數(shù)據(jù)庫
    3. 組內(nèi)白名單設(shè)置框中粘貼該 VPC 的 IPv4 網(wǎng)段地址,然后單擊 確定。
      Serverless 解惑——函數(shù)計算如何訪問 Redis 數(shù)據(jù)庫
  5. 最后訪問 Redis 數(shù)據(jù)庫 host 為實例的 內(nèi)網(wǎng)地址,可以登錄阿里云控制臺查看:

    多種語言的客戶端連接阿里云 Redis 可以參考 Redis 客戶端連接。

Serverless 解惑——函數(shù)計算如何訪問 Redis 數(shù)據(jù)庫

函數(shù)計算配置 VPC

注意:函數(shù)計算服務(wù)所在區(qū)域與公共配置中創(chuàng)建的資源所在區(qū)域一致。

  1. 在 函數(shù)計算控制臺 創(chuàng)建服務(wù)。
    • 創(chuàng)建服務(wù)步驟請參考文章 服務(wù)的增刪改查
  2. 【專有網(wǎng)絡(luò)配置】選項中,選擇您在步驟一中創(chuàng)建的 VPC 網(wǎng)絡(luò),交換機、安全組。
  3. 【權(quán)限配置】選項中,選擇【新建角色】,點擊【點擊授權(quán)】,在角色快速創(chuàng)建頁面,點擊【同意授權(quán)】。
    • 這步的操作是授予函數(shù)計算對 ENI 的操作權(quán)限,函數(shù)計算訪問 VPC 中資源需要的權(quán)限請參考文章 配置函數(shù)計算訪問 VPC 內(nèi)的資源
  4. 點擊確定,新建服務(wù)完畢。

函數(shù)編寫與調(diào)試

下面演示 Python3 開發(fā)語言訪問 Redis 數(shù)據(jù)庫函數(shù)示例創(chuàng)建:

使用 Fun 工具在建立存放代碼和依賴模塊目錄下安裝依賴和項目部署。

  1. 建立一個目錄,用于存放代碼和依賴模塊,在該目錄下新建 template.yml 文件,例如 /tmp/code/template.yml,內(nèi)容為:
    ROSTemplateFormatVersion: '2015-09-01'
    Transform: 'Aliyun::Serverless-2018-04-03'
    Resources:
     Redis-test:
       Type: 'Aliyun::Serverless::Service'
       Properties:
         Description: This is Redis service
         Role: 'acs:ram::XXX:role/fc-public-test'
         LogConfig:
           Project: XXX
           Logstore: XXXX
         VpcConfig:
           VpcId: vpc-XXXXX
           VSwitchIds:
             - vsw-XXXX
           SecurityGroupId: sg-XXXX
         InternetAccess: true
       python-test:
         Type: 'Aliyun::Serverless::Function'
         Properties:
           Initializer: 'index.initializer'
           Handler: 'index.handler'
           Runtime: python3
           Timeout: 10
           MemorySize: 128
           CodeUri: './'
           EnvironmentVariables:
             REDIS_HOST: r-XXXXX.redis.rds.aliyuncs.com
             REDIS_PASSWORD: XXXXX
             REDIS_PORT: '6379'
    
  2. 在該目錄下創(chuàng)建 Funfile 文件內(nèi)容為:
    RUNTIME python3
    RUN fun-install pip install redis
    
  3. 執(zhí)行 fun install命令安裝依賴:

     $ fun install
     using template: template.yml
     start installing function dependencies without docker
     building Redis-test/python-test
     Funfile exist, Fun will use container to build forcely
     Step 1/2 : FROM registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.7.7
      ---> 373f5819463b
     Step 2/2 : RUN fun-install pip install redis
      ---> Running in f26aef48f9e5
     Task => PipTask
          => PYTHONUSERBASE=/code/.fun/python pip install --user redis
     Removing intermediate container f26aef48f9e5
      ---> 809c6655f9e9
     sha256:809c6655f9e93d137840b1446f46572fbab7548c5c36b6ae66599dfc2e27555b
     Successfully built 809c6655f9e9
     Successfully tagged fun-cache-78c74899-5497-4205-a670-24e4daf88284:latest
     copying function artifact to /Users/txd123/Desktop/Redis/Python
     Install Success
    
  4. 在函數(shù)根目錄下新建代碼文件,例如 /tmp/code/index.py,在代碼中使用 redis :

     # -*- coding: utf-8 -*-
     import os,sys
     import redis
     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):
         r = redis.Redis(connection_pool=conn_pool)
         r.set('test','89898')
         r.set('zyh_info','{"name":"Tanya","password":"123456","account":11234}')
         print(r.get('test'))
         return r.get('zyh_info')
    
  5. 使用 fun 工具部署:

     $ fun deploy
     using template: template.yml
     using region: cn-hangzhou
     using accountId: ***********3743
     using accessKeyId: ***********Ptgk
     using timeout: 60
     Waiting for service Redis-test to be deployed...
             Waiting for function python-test to be deployed...
                     Waiting for packaging function python-test code...
                     The function python-test has been packaged. A total of 25 files files were compressed and the final size was 138.78 KB
             function python-test deploy success
     service Redis-test deploy success
    

    登錄控制臺,即可看到相關(guān)的服務(wù)、函數(shù)被創(chuàng)建成功,且觸發(fā)執(zhí)行可以返回正確的結(jié)果。

總結(jié)

通過本文介紹可以快速實現(xiàn)函數(shù)計算訪問 Redis 數(shù)據(jù)庫。

使用函數(shù)計算帶來的優(yōu)勢:

  1. 無需采購和管理服務(wù)器等基礎(chǔ)設(shè)施,只需專注業(yè)務(wù)邏輯的開發(fā),可以大幅縮短項目交付時間和人力成本;
  2. 提供日志查詢、性能監(jiān)控、報警等功能快速排查故障;
  3. 免運維,毫秒級別彈性伸縮,快速實現(xiàn)底層擴容以應(yīng)對峰值壓力,性能優(yōu)異;
  4. 成本極具競爭力;

“ 阿里巴巴云原生技術(shù)圈關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的技術(shù)圈。”

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI