本文介紹Python事件請求處理常式的結構特點和樣本。
Event Handler簽名
一個簡單的Event Handler簽名定義如下。
def handler(event, context):
return 'hello world'Event Handler的樣本解析如下:
handler:方法名稱。與Function Compute控制台配置的請求處理常式(函數入口)相對應。例如,為FC函數配置的handler為main.handler,那麼Function Compute會去載入main.py中定義的handler函數,並從handler函數開始執行。event:您調用函數時傳入的參數。在Python 2.7運行環境中,類型為String。在Python 3運行環境中,類型為Bytes。context:為您的FC函數調用提供在調用時的運行上下文資訊。
樣本一:解析JSON格式參數
程式碼範例
當您傳入JSON格式參數時,Function Compute會透傳參數內容,需要您在代碼中自行解析。下面是解析JSON格式事件的程式碼範例。
# -*- coding: utf-8 -*-
import json
def handler(event, context):
evt = json.loads(event)
return evt['key']前提條件
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
- 在函數管理頁面,單擊目標函數名稱。
在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中輸入上述範例程式碼,然後單擊部署代碼。
重要上述範例程式碼中函數的請求處理常式是
index.py中的handler方法。如果您的函數的請求處理常式配置與此不同,請更新對應的檔案名稱和方法。在函數代碼頁簽,單擊測試函數右側的
表徵圖,從下拉式清單中選擇配置測試參數,輸入如下樣本測試參數,然後單擊確定。{ "key": "value" }單擊測試函數。
函數執行成功後,查看返回結果,您可以看到返回結果為
value。
樣本二:通過臨時密鑰安全讀寫OSS的資源
範例程式碼
您可以使用Function Compute為您提供的臨時密鑰訪問Object Storage Service,程式碼範例如下所示。
import json
import oss2
def handler(event, context):
evt = json.loads(event)
creds = context.credentials
# do not forget security_token
auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
bucket.put_object(evt['objectName'], evt['message'])
return 'success'上述程式碼範例中的creds = context.credentials表示從context參數中擷取臨時密鑰,避免在代碼中寫入程式碼密碼等敏感資訊。
請確保當前所在的服務配置的角色具有訪問Object Storage Service的許可權。您可以登入RAM控制台,為該角色添加訪問Object Storage Service的許可權。
前提條件
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
- 在函數管理頁面,單擊目標函數名稱。
在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中輸入上述範例程式碼,然後單擊部署函數。
重要上述範例程式碼中函數的請求處理常式是
index.py中的handler方法。如果您的函數的請求處理常式配置與此不同,請更新對應的檔案名稱和方法。在函數代碼頁簽,單擊測試函數右側的
表徵圖,從下拉式清單中選擇配置測試參數,輸入如下樣本測試參數,然後單擊確定。{ "endpoint": "http://oss-cn-shenzhen-internal.aliyuncs.com", "bucket": "oss-********", "objectName": "oss-test-object", "message": "oss-test-content" }單擊測試函數。
函數執行成功後,查看返回結果,您可以看到返回結果為
success。
樣本三:調用外部命令
您的Python程式也可以建立fork進程,調用外部命令。例如,您可以使用subprocess模組調用Linux的ls -l命令,輸出目前的目錄下的檔案清單。程式碼範例如下。
import os
import subprocess
def handler(event, context):
ret = subprocess.check_output(['ls', "-l"])
return ret