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

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

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站建設(shè)、做網(wǎng)站與策劃設(shè)計(jì),蒲城網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:蒲城等地區(qū)。蒲城做網(wǎng)站價(jià)格咨詢(xún):13518219792

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

工作機(jī)制

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

配置與函數(shù)編寫(xiě)

公共配置

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

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

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

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

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

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

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

    多種語(yǔ)言的客戶(hù)端連接阿里云 Redis 可以參考 Redis 客戶(hù)端連接。

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

函數(shù)計(jì)算配置 VPC

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

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

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

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

使用 Fun 工具在建立存放代碼和依賴(lài)模塊目錄下安裝依賴(lài)和項(xiàng)目部署。

  1. 建立一個(gè)目錄,用于存放代碼和依賴(lài)模塊,在該目錄下新建 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命令安裝依賴(lài):

     $ 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
    

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

總結(jié)

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

使用函數(shù)計(jì)算帶來(lái)的優(yōu)勢(shì):

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

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

新聞標(biāo)題:Serverless解惑——函數(shù)計(jì)算如何訪問(wèn)Redis數(shù)據(jù)庫(kù)
URL標(biāo)題:http://muchs.cn/article20/gjghco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、軟件開(kāi)發(fā)、服務(wù)器托管云服務(wù)器、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)