函數計算(Function Compute):函數計算 是事件驅動的全託管計算服務。使用函數計算,您無需採購與管理服務器等基礎設施,只需編寫並上傳代碼。函數計算爲您準備好計算資源,彈性地可靠地運行任務,並提供日誌查詢、性能監控和報警等功能。藉助函數計算,您能夠快速構建任何類型的應用和服務,而且只需爲任務實際消耗的資源付費。html
訪問 Redis 數據庫是指在函數計算中經過編寫代碼調用數據庫驅動庫經過 TCP 協議實現對數據庫進行的插入、查詢等操做。一般函數計算中運行的不一樣函數實例之間是不共享狀態的,對於結構化的數據能夠經過數據庫的形式進行持久化以實現狀態共享。因爲用戶函數運行在函數計算的 VPC 中,而用戶的數據庫運行在用戶所屬的 VPC 中,因此在函數計算平臺訪問數據庫會涉及到跨 VPC 訪問的場景,下面咱們先來介紹一下其工做機制。python
訪問 Redis 的原理、工做機制與訪問 Mysql 數據庫徹底相同,本文再也不重複闡述,更詳細的內容請參考 訪問 Mysql 數據庫 中的工做機制章節。redis
在安全組控制檯 新建安全組,點擊 建立安全組,設置安全組名稱,網絡類型選擇 專有網絡,並選擇剛纔建立的專有網絡。sql
建立適合業務需求的雲數據庫 Redis 版實例能夠參考 雲數據庫 Redis 版。docker
建立成功後,在實例信息頁面左側的導航欄中單擊白名單設置。數據庫
單擊 default 區域框右側的修改。 安全
在彈出的對話框中,將 函數計算所在的 VPC 網絡的網段地址配置在白名單輸入框中。服務器
最後訪問 Redis 數據庫 host 爲實例的內網地址,能夠登陸阿里雲控制檯查看:網絡
多種語言的客戶端鏈接阿里雲 Redis 能夠參考 Redis 客戶端鏈接。less
注意:函數計算服務所在區域與公共配置中建立的資源所在區域一致。
下面演示 Python3 開發語言訪問 Redis 數據庫函數示例建立:
使用 Fun 工具在創建存放代碼和依賴模塊目錄下安裝依賴和項目部署。
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'
RUNTIME python3 RUN fun-install pip install redis
執行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
在函數根目錄下新建代碼文件,例如 /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')
使用 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
登陸控制檯,便可看到相關的服務、函數被建立成功,且觸發執行能夠返回正確的結果。
經過本文介紹能夠快速實現函數計算訪問 Redis 數據庫。
使用函數計算帶來的優點:
「阿里巴巴雲原生技術圈關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的技術圈。」