本文介紹Custom Container中事件請求處理常式的結構特點、使用樣本和常見問題等。
背景介紹
針對Custom Container函數,Function Compute會將Common Headers、Body、POST方法以及/invoke、/initialize路徑轉寄給容器中的HTTP Server。您可以選擇實作類別似官方支援的Runtime(例如Golang Runtime)的context和event函數簽名。您也可以直接使用入參要求標頭(Headers)和請求體(Body)來編寫函數的商務邏輯。更多資訊,請參見Custom Runtime事件函數調用。
函數調用說明
當Custom Container函數選擇事件請求處理常式時,HTTP Server僅需實現Path為/invoke和Method為POST的對應邏輯即可。
Path | 輸入請求 | 預期響應 |
POST |
| 響應體:函數Handler的傳回值,包括響應碼和回應標頭。
通過Headers中的 x-fc-status響應,向Function Compute彙報本地函數是否執行成功。
說明 在返回的HTTP響應中,建議您同時設定 StatusCode和x-fc-status。 |
程式碼範例
在以下Node.js Express樣本中,POST方法和/initialize路徑會在函數執行個體初始化時被Function Compute調用,POST方法和/invoke路徑為Function Compute被調用時的Handler,通過req.headers以及req.body擷取context和event並將函數返回結果通過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工具快速部署和調用函數,您可以按需修改範例程式碼,實現二次開發。

