全部產品
Search
文件中心

Function Compute:事件請求處理常式(Event Handler)

更新時間:Jan 08, 2025

本文介紹Custom Container中事件請求處理常式的結構特點、使用樣本和常見問題等。

背景介紹

針對Custom Container函數,Function Compute會將Common Headers、Body、POST方法以及/invoke/initialize路徑轉寄給容器中的HTTP Server。您可以選擇實作類別似官方支援的Runtime(例如Golang Runtime)的contextevent函數簽名。您也可以直接使用入參要求標頭(Headers)和請求體(Body)來編寫函數的商務邏輯。更多資訊,請參見Custom Runtime事件函數調用

函數調用說明

當Custom Container函數選擇事件請求處理常式時,HTTP Server僅需實現Path為/invoke和Method為POST的對應邏輯即可。

Path

輸入請求

預期響應

POST /invoke

響應體:函數Handler的傳回值,包括響應碼和回應標頭。

  • 響應碼StatusCode
    • 200:成功狀態。
    • 404:失敗狀態。
  • 回應標頭x-fc-status
    • 200:成功狀態。
    • 404:失敗狀態。
通過Headers中的x-fc-status響應,向Function Compute彙報本地函數是否執行成功。
  • 不設定x-fc-statusFunction Compute預設本次調用是成功執行的,但是您的函數可能有異常,沒有向Function Compute彙報,Function Compute會認為這次函數執行沒有報錯,在商務邏輯上可能沒有影響,但是在監控可觀測性上會有影響。如下圖所示:image8hanshujisuanruntime
  • 設定x-fc-status:當您的函數存在異常,通過x-fc-status響應向Function Compute彙報本次函數執行失敗,並將錯誤堆棧資訊列印到日誌中。如下圖所示:image9runtimefc
說明 在返回的HTTP響應中,建議您同時設定StatusCodex-fc-status

程式碼範例

在以下Node.js Express樣本中,POST方法和/initialize路徑會在函數執行個體初始化時被Function Compute調用,POST方法和/invoke路徑為Function Compute被調用時的Handler,通過req.headers以及req.body擷取contextevent並將函數返回結果通過HTTP Response結構體輸出。

'use strict';

const express = require('express');

// 常量
const PORT = 9000;
const HOST = '0.0.0.0';
const app = express();
// 解析JSON格式的請求體
app.use(express.json({type:['application/json', 'application/octet-stream']}))


// 初始化回調樣本,需要在函數配置中配置初始化回調
app.post('/initialize', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, /initialize\n');
});


// 事件函數調用
app.post('/invoke', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, event function\n');
});

var server = app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

server.timeout = 0; // 設定從不逾時
server.keepAliveTimeout = 0; // keepalive, never timeout

多語言使用樣本

使用Serverless Devs工具,您可以將您的應用一鍵遷移至Function Compute。以下樣本展示如何通過Serverless Devs工具快速部署和調用函數,您可以按需修改範例程式碼,實現二次開發。

常見問題