十分钟上线 - 函数计算构建支付宝小程序的后端
阿里云函數計算服務(FunctionCompute,FC)是一個事件驅動的全托管計算服務。通過函數計算與云端各個服務的廣泛集成,開發者只需要編寫函數代碼,就能夠快速地開發出彈性高可用的后端系統。接下來我們使用FC,來快速實現一個圖片轉換服務, 并把這個圖片轉換服務作為支付寶小程序的后端。
支付寶小程序demo前端效果圖:
資源下載及準備工作
示例代碼附件?【必須】
支付寶小程序開發工具下載?【非必須】
函數計算FC 快捷入口
對象存儲OSS 快捷入口
日志服務Log Service 快捷入口
簡明架構圖
函數入口
普通函數入口
def my_handler(event, context):return 'hello world'- 函數名
my_handler需要與創建函數時的"Handler"字段相對應:例如創建函數時指定的 Handler 為main.my_handler,那么函數計算會去加載main.py中定義的my_handler函數
- event 參數
event 參數是用戶調用函數時傳入的數據,其類型是str
- context 參數
context 參數中包含一些函數的運行時信息(例如 request id/臨時 AK 等)。其類型是FCContext,具體結構和使用在下面的使用 context介紹
- 返回值
函數的返回值會作為調用函數的結果返回給用戶,它可以是任意類型:對于簡單類型會函數計算會把它轉換成 str 返回,對于復雜類型會把它轉換成 JSON 字符串返回
HTTP 觸發器的函數入口
HELLO_WORLD = b"Hello world!\n" def handler(environ, start_response):context = environ['fc.context']status = '200 OK'response_headers = [('Content-type', 'text/plain')]start_response(status, response_headers)return [HELLO_WORLD]-
environ : environ 參數是一個 python 字典,里面存放了所有和客戶端相關的信息,具體詳情參考?environ 參數,函數計算增加了兩個自定義的 key,分別是?fc.context?和?fc.request_uri
- fc.context : 和普通函數入口的?context?意義一樣
- fc.request_uri : string 類型,request 的 url
需要注意的點:environ 中的?HTTP_Variables?,里面包含 request 中 header, 比如某個請求的 header 的為?'x-Custom-key':'value'?, 在 environ 中會表現為:environ['HTTP_X_CUSTOM_KEY']='value', 可以理解為,對于 request header 中的 key,WSGI 做如下處理:key = "HTTP_" + k.upper().replace("-","_")
- start_response : start_response 參數是一個可調用者(callable), 具體參考?the-start-response-callable?, 這個是 FC runtime 提供的,它接受兩個必要的位置參數和一個可選參數。
更多詳細介紹請參考函數入口和python runtime
具體操作步驟
假定這次實驗所有操作在華東2 上海region 完成,所有實驗相關的資源請從附件中下載
這里介紹兩種部署函數的方法:
準備工作
- 準備存儲圖片的 oss bucket
比如在華東2創建了一個名叫xcx-demo的bucket
利用fun工具進行自動部署
Fun?是用于在阿里云上定義 serverless 應用的模型。
Serverless 應用是由事件觸發功能組成的應用。一個典型的 serverless 應用由一個或多個由諸如向 阿里云 OSS 上傳對象,在 阿里云 OTS 上執行數據操作以及 API 操作等事件觸發的阿里云函數計算組成。這些函數可以獨立使用。也可以利用其它資源,例如阿里云 OTS 的表和 OSS 的 buckets。最基本的 serverless 應用可以只有一個函數。
比如對于這個案例,定義的yaml文件如下:
ROSTemplateFormatVersion: '2015-09-01' Transform: 'Aliyun::Serverless-2018-04-03' Resources:sh-pro:Type: 'Aliyun::Serverless::Log'Properties:Description: 'image process log pro'fc-log:Type: 'Aliyun::Serverless::Log::Logstore'Properties:TTL: 362ShardCount: 1 pydemo:Type: 'Aliyun::Serverless::Service'Properties:Description: 'fc xiaochengxu demo'Policies:- AliyunOSSFullAccessLogConfig:Project: 'sh-pro'Logstore: 'fc-log'upload:Type: 'Aliyun::Serverless::Function'Properties:Handler: upload.handlerCodeUri: './'Description: 'http function for upload image'Runtime: python2.7Timeout: 60MemorySize: 256Events:http-trigger:Type: HTTPProperties:AuthType: ANONYMOUSMethods: ['POST']proc:Type: 'Aliyun::Serverless::Function'Properties:Handler: proc.handlerCodeUri: './'Description: 'http function for process image'Runtime: python2.7Timeout: 60MemorySize: 256Events:http-trigger:Type: HTTPProperties:AuthType: ANONYMOUSMethods: ['GET']上面的定義的yaml文件要做以下幾件事情:
具體操作
- 安裝nodejs
- 安裝fun
- 修改template.yml中的logproject的名字和.env中的相關配置,執行命令fun deploy
執行成功后,應該可以看到如下資源被創建, 截圖:
控制臺setup
創建函數,并且配置http trigger
- 在 上海 region 先創建好日志資源,用于函數計算的日志收集
-
新建service,配置service一個具有訪問oss權限的role
- 點擊授權
- 點擊確定
- 創建一個函數,并設置Http trigger, 使用的代碼包為附件中 server 目錄下的?code.zip
測試函數
curl https://1186202104331798.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/pydemo/upload/ -F "lena.png=@/Users/songluo/work/shworkshop/wp/lena.png" -vcurl https://1186202104331798.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/pydemo/proc/rotate/10/lena.png >> 1.png將函數作為支付寶小程序的后端
- 下載安裝支付寶小程序?IDE
- 打開代碼包中的client, 將代碼中的 url 替換成自己函數的 url
然后打開 調試器 和 模擬器
總結
函數計算有如下優勢:
- 無需采購和管理服務器等基礎設施
- 專注業務邏輯的開發
- 提供日志查詢、性能監控、報警等功能快速排查故障
- 以事件驅動的方式觸發應用響應用戶請求
- 毫秒級別彈性伸縮,快速實現底層擴容以應對峰值壓力
- 按需付費。只需為實際使用的計算資源付費,適合有明顯波峰波谷的用戶訪問場景
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的十分钟上线 - 函数计算构建支付宝小程序的后端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚂蚁金服OceanBase挑战TPCC|
- 下一篇: 不要低估AI面临的困境