阿里雲函數計算服務(FunctionCompute,FC)是一個事件驅動的全託管計算服務。經過函數計算與雲端各個服務的普遍集成,開發者只須要編寫函數代碼,就可以快速地開發出彈性高可用的後端系統。接下來咱們使用FC,來快速實現一個圖片轉換服務, 並把這個圖片轉換服務做爲支付寶小程序的後端。html
示例代碼附件 【必須】前端
支付寶小程序開發工具下載 【非必須】node
函數計算FC 快捷入口
對象存儲OSS 快捷入口
日誌服務Log Service 快捷入口python
普通函數入口git
def my_handler(event, context): return 'hello world'
my_handler須要與建立函數時的"Handler"字段相對應:例如建立函數時指定的 Handler 爲main.my_handler,那麼函數計算會去加載main.py中定義的my_handler函數github
event 參數是用戶調用函數時傳入的數據,其類型是strnpm
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
須要注意的點: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("-","_")
更多詳細介紹請參考函數入口和python runtime
假定此次實驗全部操做在華東2 上海region 完成,全部實驗相關的資源請從附件中下載
這裏介紹兩種部署函數的方法:
xcx-demo
的bucketFun 是用於在阿里雲上定義 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: 362 ShardCount: 1 pydemo: Type: 'Aliyun::Serverless::Service' Properties: Description: 'fc xiaochengxu demo' Policies: - AliyunOSSFullAccess LogConfig: Project: 'sh-pro' Logstore: 'fc-log' upload: Type: 'Aliyun::Serverless::Function' Properties: Handler: upload.handler CodeUri: './' Description: 'http function for upload image' Runtime: python2.7 Timeout: 60 MemorySize: 256 Events: http-trigger: Type: HTTP Properties: AuthType: ANONYMOUS Methods: ['POST'] proc: Type: 'Aliyun::Serverless::Function' Properties: Handler: proc.handler CodeUri: './' Description: 'http function for process image' Runtime: python2.7 Timeout: 60 MemorySize: 256 Events: http-trigger: Type: HTTP Properties: AuthType: ANONYMOUS Methods: ['GET']
上面的定義的yaml文件要作如下幾件事情:
sh-pro
, logstore: fc-log
xcxdemo
以及function: upload
和 proc
, 函數添加了一個類型爲HTTP
,名叫http-trigger
的triggerAliyunOSSFullAccess
和函數執行日誌寫到fc-log的權限具體操做
npm install @alicloud/fun -g
fun deploy
執行成功後,應該能夠看到以下資源被建立, 截圖:
建立函數,而且配置http trigger
新建service,配置service一個具備訪問oss權限的role
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" -v curl https://1186202104331798.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/pydemo/proc/rotate/10/lena.png >> 1.png
而後打開 調試器 和 模擬器
函數計算有以下優點:
本文爲雲棲社區原創內容,未經容許不得轉載。