函數計算支持HTTP觸發器,配置HTTP觸發器的函數可以通過HTTP請求被觸發執行。函數對HTTP請求進行處理,并將處理結果返回給調用端。本文介紹如何在函數計算控制臺配置HTTP觸發器并使用HTTP請求觸發。
前提條件
步驟一:創建觸發器
登錄函數計算控制臺,在左側導航欄,單擊函數。
在頂部菜單欄,選擇地域,然后在函數頁面,單擊目標函數。
在函數詳情頁面,選擇配置頁簽,在左側導航欄,單擊觸發器,然后單擊創建觸發器。
在創建觸發器面板,填寫相關信息,然后單擊確定。
配置項
操作
本文示例
觸發器類型
選擇HTTP 觸發器。
HTTP 觸發器
名稱
填寫自定義的觸發器名稱。
http-trigger
版本或別名
默認值為LATEST,如果您需要創建其他版本或別名的觸發器,需先在函數詳情頁的版本或別名下拉列表選擇該版本。關于版本和別名的簡介,請參見版本管理和別名管理。
LATEST
請求方法
指定可以通過哪些方法觸發該HTTP觸發器。
GET, POST, PUT, DELETE
禁用公網訪問 URL
默認選擇否,即允許公網域名訪問該觸發器。
如果選擇是,創建的HTTP觸發器將不提供默認的公網域名。此時,如果通過公網域名來調用函數,將會提示錯誤
access denied due to function internet URL is disable
。通過自定義域名的訪問,則不受影響。否
認證方式
選擇函數計算對HTTP請求的認證方式。取值說明如下:
無需認證:無需對HTTP請求進行身份認證,支持匿名訪問,任何人可發起HTTP請求調用您的函數。
簽名認證:需要對HTTP請求進行身份認證。關于簽名認證的示例代碼,請參見通過簽名訪問HTTP觸發器地址。
JWT 認證:需要對HTTP請求進行JWT認證。更多信息,請參見為HTTP觸發器配置JWT認證鑒權。
無需認證
創建完成后,您可以根據情況對HTTP觸發器的配置項進行修改,包括版本或別名、請求方法、禁用公網訪問 URL和認證方式。
步驟二:編寫并部署代碼
完成創建HTTP觸發器后,您可以開始編寫函數代碼。
在函數詳情頁面,單擊代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼。關于示例代碼,請參見函數計算文檔 中不同運行時的請求處理程序文檔。
步驟三:測試函數
方式一:使用控制臺測試函數
在函數詳情頁面,單擊代碼頁簽。
同步調用
單擊測試函數。
異步調用
單擊測試函數右側的圖標,選擇異步調用,然后單擊測試函數。
執行完成后,在代碼頁簽,您可以查看執行結果。
方式二:使用cURL測試函數
在函數詳情頁面,單擊配置頁簽,然后在左側導航欄,選擇觸發器。在HTTP觸發器的配置信息里選擇公網訪問地址復制用于以下測試。
同步調用
在命令行執行如下命令,執行完成后會返回執行結果。
curl -v https://http-***.cn-shenzhen.fcapp.run/$path
訪問示例如下:
curl -v https://http-***.cn-shenzhen.fcapp.run/test
異步調用
在命令行執行如下命令,執行完成后會返回函數計算接收請求的結果。其中狀態碼
202
表示請求成功,其余表示請求出現錯誤,關于錯誤碼的解釋,請參見常見問題(錯誤排查)。curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/$path
訪問示例如下:
curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/test
方式三:(不推薦)使用瀏覽器測試函數
在函數詳情頁面,單擊配置頁簽,然后在左側導航欄,選擇觸發器。在HTTP觸發器的配置信息里選擇公網訪問地址復制,將HTTP觸發器URL輸入瀏覽器地址欄,按回車鍵執行。
執行完成后,瀏覽器中會返回執行結果文件。
(可選)使用API網關保護函數
默認情況下,函數計算不會對HTTP請求進行身份驗證,支持匿名訪問函數,即任何人都可以發送HTTP請求調用您的函數。為防止非法用戶訪問您的函數,引起不必要的資源浪費或安全隱患,您可以開啟身份認證的同時將HTTP函數與API網關進行對接,利用API網關的IP訪問控制插件、JWT認證插件或BasicAuth插件等保護您的HTTP函數。
在函數計算控制臺找到目標函數,在函數詳情頁面單擊配置頁簽,在左側導航欄選擇觸發器,然后單擊編輯。
在編輯觸發器面板,禁用公網訪問 URL選擇為是。
登錄API網關控制臺,切換至HTTP函數所在地域。
創建分組和API。
創建API使得外部應用能夠按照指定的方式調用內部的函數服務,使用API分組組織和管理多個相關的API接口,便于實施統一的安全策略和流量控制措施。
在API網關控制臺,左側導航欄選擇API管理>分組管理,單擊創建分組。
在創建分組彈框頁面,選擇實例,輸入分組名稱為
FC-Group
,BasePath為/
,單擊確定。單擊創建API,在基本信息欄,配置如下信息,并單擊下一步。
在定義API請求欄,配置請求Path為
/
,其他信息保持默認,單擊下一步。在定義API后端服務欄,配置觸發器路徑為函數計算觸發器的內網訪問地址
https://***-***.cn-hangzhou-vpc.fcapp.run
,如圖所示進行配置,并單擊下一步。在定義返回結果欄,保持系統默認配置,單擊創建,在創建成功之后,單擊API操作列中的發布。
調試API,利用API網關提供的在線調試工具,可以在正式發布前測試API的功能是否按預期工作,及時發現并解決問題。調試通過表示網關API與函數計算已連通。
在API網關控制臺左側導航欄選擇API調用>調試。
在調試頁面選擇,所創建的
FC-test
API,然后單擊發送請求,看到下圖信息說明配置成功。
創建一個類型為后端簽名的插件,
key
和secret
分別配置為您的阿里云賬號的AccessKey ID
和AccessKey Secret
。然后綁定您剛才創建的API。具體操作,請參見插件概述。將您的域名通過CNAME方式解析到API網關提供的二級域名上。
在API網關控制臺,左側導航欄選擇API管理 > 分組管理,選擇公網二級域名復制。
登錄云解析DNS控制臺,在域名列表頁面找到要管理的域名,點擊進入域名的管理頁面。
說明中國內地Region的獨立域名需要在阿里云備案或者將備案接入阿里云。
在API網關控制臺,左側導航欄選擇API管理 > 分組管理,進入獨立域名區域。在頁面右下方看到綁定域名的按鈕,點擊按鈕,填寫您的域名,點擊確定后域名綁定成功。
完成以上步驟后,您可以通過自己的域名訪問HTTP函數。您還可以創建以下插件,并將其綁定到您的API,保護您的HTTP函數。
錯誤排查
錯誤主要分為以下兩種。
請求錯誤是指發送的Request不符合標準,在Response里報錯狀態碼為4xx。
函數錯誤即編寫的函數有問題,會報5xx狀態碼。
下表描述請求錯誤和函數錯誤可能出現的場景,以便您迅速排查問題。
錯誤類型 | HTTP狀態碼 | 原因分析 | 是否計費 |
請求錯誤 | 400 | 您的請求超過Request限制項的限制。更多信息,請參見HTTP觸發器概述。 | 否 |
400 | 調用需要身份認證的函數的Request沒有傳入Date信息或Authorization信息。 | 否 | |
403 | 調用需要身份認證的函數的Request的簽名錯誤,即Authorization不正確。由于Date參與簽名計算,且超過15 min,簽名失效,一種常見的原因是使用需要訪問認證的HTTP觸發器,Request header中發送的Date據當前時間超過15 min,導致簽名失效。 | 否 | |
403 | 您的Request請求使用HTTP觸發器中未配置的請求方法。例如,HTTP觸發器中的請求方法只配置GET方法,卻發送POST方法的HTTP請求。 | 否 | |
404 | 向沒有設置HTTP觸發器的函數發送HTTP請求。 | 否 | |
用戶流控 | 429 | 用戶被流控,可減小并發量或者聯系函數計算開發團隊提高并發度。 | 否 |
函數錯誤 | 502 | 函數的返回值超過Response限制項的限制。更多信息,請參見HTTP觸發器概述。 | 是 |
502 | 函數代碼有語法錯誤或者異常。 | 是 | |
502 | 向未使用HTTP入口函數的函數發送HTTP請求。 | 是 | |
系統錯誤 | 500 | 函數計算系統錯誤,可重試解決。 | 否 |
系統流控 | 503 | 函數計算系統流控。可用指數退避方式重試。 | 否 |
如果問題還未能解決,請加入釘釘用戶群(釘釘群號:64970014484),聯系函數計算工程師及時溝通處理。。