文件

核心概念

go-faas 如何儲存腳本、注入輸入、包裝語言並回傳結果。

腳本路徑與版本

Run 與 Run-Now

模式 端點 持久化 典型用途
已存執行 POST /run/*path 從 Redis 載入 已部署函式
立即執行 POST /run-now 不寫入 Redis 試驗、一次性

兩種模式在解析到程式碼後共用同一沙箱執行路徑。

Event 輸入模型

請求 body 的 input 是 JSON 字串。Handler 將其放入 stdin payload:

{"code": "...", "input": "{"a": 1}"}

Wrapper 解析 input 後提供:

全域變數 意義
event input 解析出的物件
input 同一物件(別名)

腳本通常以 return 回傳值;wrapper 將回傳值序列化為 JSON 寫到 stdout。

語言 Wrapper

語言 Runtime Wrapper 說明
Python python3 internal/resource/wrapper.py 使用者程式碼包在 __user_main__,讓頂層 return 可用;-u 關閉緩衝
JavaScript node internal/resource/wrapper.js 提供 event / input
TypeScript tsx internal/resource/wrapper.ts Linux bwrap 另綁定專案 node_modulesNODE_PATH

不支援的語言在 upload / run-now 以 HTTP 400 拒絕。

Body 大小限制

CODE_MAX_SIZE(預設 256KB)透過 http.MaxBytesReader 限制 run body。

型別化 JSON 回應

非串流模式會偵測 stdout 最後一筆合法 JSON 行:

type 時機
string JSON 字串
number JSON 數字
json 物件/陣列
text 非 JSON 剩餘輸出

cleanOutput 會過濾 Node 警告噪音後再判斷型別。

SSE 串流

stream: true

  1. 回應標頭改為 text/event-stream
  2. 中間 stdout 行以 event: log 送出(保留最後一行為 result)。
  3. 結束時送出 resulterror,再 hijack 關閉連線。

逾時使用 TIMEOUT_SCRIPT 加上固定 Redis 緩衝作為 request context。

相關頁面

EN