本文介紹Custom Runtime實現函數實例生命周期回調的方法。

回調方法

當您實現并配置函數實例生命周期回調后,函數計算將在相關實例生命周期事件發生時調用對應的回調程序。函數實例生命周期涉及Initializer、PreFreeze和PreStop三種回調。更多信息,請參見函數實例生命周期回調

Path輸入請求期望的響應
(可選)POST /initialize

請求體:無。

請求頭:Common Request Headers。具體信息,請參見函數計算公共請求頭

響應體:函數Initializer的返回值。
StatusCode
  • 2xx:成功狀態。
  • 非2xx:失敗狀態。
Python語言中關于initialize的示例代碼如下:
@app.route('/initialize', methods=['POST'])
def init_invoke():
    rid = request.headers.get(x-fc-request-id)
    print("FC Initialize Start RequestId: " + rid)
    # do your things
    print("FC Initialize End RequestId: " + rid)
    return "OK"
Python語言中函數執行報錯的示例代碼如下:
@app.route('/initialize', methods=['POST'])
def init():
    raise Exception("hahaha")
    return "OK", 200, []
@app.route('/initialize', methods=['POST'])
def init():
    return "OK", 404, []
(可選)GET /pre-freeze響應體:函數PreFreeze的返回值。
StatusCode
  • 2xx:成功狀態。
  • 非2xx:失敗狀態。
(可選)GET /pre-stop響應體:函數PreStop的返回值。
StatusCode
  • 2xx:成功狀態。
  • 非2xx:失敗狀態。
如果您想在Custom Runtime中使用Initializer回調方法,您只需在您的HTTP Server中實現Path為/initialize和Method為POST的對應邏輯即可。示例代碼,請參見上表中關于initialize的示例代碼。
重要 如果創建的函數不設置Initializer,就無需實現/initialize。此時,即使HTTP Server實現了/initialize,代碼中的/initialize邏輯也無法被調用執行。

PreFreeze和PreStop回調方法的使用,同Initializer回調方法。

回調錯誤碼

錯誤碼ID解釋說明
400
  • 函數Initializer回調失敗返回400或404,不會重新發送請求,但系統會繼續重試直到調用成功為止。
  • 函數PreFreeze和PreStop回調失敗返回400或404,不會影響函數實例的冷凍和停止。
404
500函數計算重啟實例。