全部產品
Search
文件中心

Function Compute:配置HTTP觸發器並使用HTTP觸發

更新時間:Jul 06, 2024

Function Compute支援HTTP觸發器,配置HTTP觸發器的函數可以通過HTTP請求被觸發執行。函數對HTTP請求進行處理,並將處理結果返回給調用端。本文介紹如何在Function Compute控制台配置HTTP觸發器並使用HTTP請求觸發。

前提條件

建立函數

步驟一:建立觸發器

  1. 登入Function Compute控制台,在左側導覽列,單擊函數

  2. 在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。

  3. 在函數詳情頁面,選擇配置頁簽,在左側導覽列,單擊觸發器,然後單擊建立觸發器

  4. 在建立觸發程序面板,填寫相關資訊,然後單擊確定

    配置項

    操作

    本文樣本

    觸發器類型

    選擇HTTP 觸發器

    HTTP 觸發器

    名稱

    填寫自訂的觸發器名稱。

    http-trigger

    版本或別名

    預設值為LATEST,如果您需要建立其他版本或別名的觸發器,需先在函數詳情頁的版本或別名下拉式清單選擇該版本。關於版本和別名的簡介,請參見版本管理別名管理

    LATEST

    要求方法

    指定可以通過哪些方法觸發器該HTTP觸發器。

    GET, POST, PUT, DELETE

    禁用公網存取 URL

    預設選擇,即允許公網網域名稱訪問該觸發器。

    如果選擇,建立的HTTP觸發器將不提供預設的公網網域名稱。此時,如果通過公網網域名稱來調用函數,將會提示錯誤access denied due to function internet URL is disable。通過自訂網域名的訪問,則不受影響。

    認證方式

    選擇Function Compute對HTTP請求的認證方式。取值說明如下:

    • 無需認證:無需對HTTP請求進行身份認證,支援匿名訪問,任何人可發起HTTP請求調用您的函數。

    • 簽名認證:需要對HTTP請求進行身份認證。關於簽名認證的範例程式碼,請參見通過簽名訪問HTTP觸發器地址

    • JWT 認證:需要對HTTP請求進行JWT認證。更多資訊,請參見為HTTP觸發器配置JWT認證鑒權

    無需認證

    建立完成後,您可以根據情況對HTTP觸發器的配置項進行修改,包括版本或別名要求方法禁用公網存取 URL認證方式

步驟二:編寫並部署代碼

完成建立HTTP觸發器後,您可以開始編寫函數代碼。

在函數詳情頁面,單擊代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼關於範例程式碼,請參見Function Compute文檔操作指南 > 代碼開發中不同運行時的請求處理常式文檔。

步驟三:測試函數

方式一:使用控制台測試函數

函數詳情頁面,單擊代碼頁簽。

  • 同步調用

    單擊測試函數

  • 非同步呼叫

    單擊測試函數右側的down表徵圖,選擇非同步呼叫,然後單擊測試函數

執行完成後,在代碼頁簽,您可以查看執行結果。

方式二:使用cURL測試函數

在函數詳情頁面,單擊配置頁簽,然後在左側導覽列,選擇觸發器。在HTTP觸發器的配置資訊裡選擇公網訪問地址複製用於以下測試。

image

  • 同步調用

    在命令列執行如下命令,執行完成後會返回執行結果。

    curl -v https://http-***.cn-shenzhen.fcapp.run/$path
  • 非同步呼叫

    在命令列執行如下命令,執行完成後會返回Function Compute接收請求的結果。其中狀態代碼202表示請求成功,其餘表示請求出現錯誤,關於錯誤碼的解釋,請參見常見問題(錯誤排查)

    curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/$path

(可選)使用API Gateway保護函數

預設情況下,Function Compute不會對HTTP請求進行身分識別驗證,支援匿名訪問函數,即任何人都可以發送HTTP請求調用您的函數。為防止非法使用者訪問您的函數,引起不必要的資源浪費或安全隱患,您可以開啟身份認證的同時將HTTP函數與API Gateway進行對接,利用API Gateway的IP存取控制外掛程式、JWT認證外掛程式或BasicAuth外掛程式等保護您的HTTP函數。

  1. Function Compute控制台找到目標函數,在函數詳情頁面單擊配置頁簽,在左側導覽列選擇觸發器,然後單擊編輯

  2. 在編輯觸發程序面板,禁用公網存取 URL選擇為

  3. 登入API Gateway控制台,切換至HTTP函數所在地區。

  4. 建立分組。具體操作,請參見建立分組

  5. 將您的網域名稱通過CNAME方式解析到API Gateway提供的次層網域上。具體操作,請參見CNAME綁定網域名稱

  6. 建立API。

    主要配置項設定如下,其餘配置項下的設定選擇預設值或者根據實際情況填寫即可。更多資訊,請參見建立 API

    • 安全認證:選擇無認證,後續會使用外掛程式進行認證。

    • 請求Path:填寫根目錄/,然後選中匹配所有子路徑

    • HTTP Method:選擇ANY

    • 入參請求模式:選擇入參透傳

    • 後端服務類型:選擇Function Compute

    • 產品版本:選擇Function Compute3.0

    • 函數類型:選擇HTTP函數

    • 觸發器路徑:填寫Function Compute的HTTP觸發器的內網訪問地址

    • ContentType:選擇透傳用戶端ContentType頭

  7. 發布API。單擊已建立的API右側操作列的發布,選擇線上環境,然後單擊發布

  8. 建立一個類型為後端簽名的外掛程式,keysecret分別配置為您的阿里雲帳號的AccessKey IDAccessKey Secret。然後綁定您剛才建立的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

使用者被流控,可減小並發量或者聯絡Function ComputeTeam Dev提高並發度。

函數錯誤

502

函數的傳回值超過Response限制項的限制。更多資訊,請參見HTTP觸發器概述

502

函數代碼有語法錯誤或者異常。

502

向未使用HTTP入口函數的函數發送HTTP請求。

系統錯誤

500

Function Compute系統錯誤,可重試解決。

系統流控

503

Function Compute系統流控。可用指數退避方式重試。

如果問題還未能解決,請加入DingTalk使用者群(DingTalk群號:64970014484),聯絡Function Compute工程師及時溝通處理。