針對自訂運行時,您的代碼檔案ZIP包是一個HTTP Server程式。本文介紹冷啟動自訂運行時的基本原理和HTTP Server配置要求。
基本原理
針對自訂運行時,您的代碼檔案ZIP包是一個HTTP Server程式,您只需設定函數配置中的啟動命令和啟動參數完成HTTP Server的啟動。Function Compute冷啟動自訂運行時時,會調用您設定的啟動命令和啟動參數啟動您自訂的HTTP Server,該HTTP Server接管了來自Function Compute的所有請求。HTTP Server的預設連接埠是9000,如果您的HTTP Server是其他連接埠,例如8080,您可以設定函數配置中的監聽連接埠為8080。
例如,函數的程式包名稱為function.zip
,該運行時各個語言程式包內的檔案形式和相應的啟動命令和啟動參數樣本如下。
Java 8或Spring Boot
.
├── demo.jar
customRuntimeConfig:
command:
- java
args:
- '-jar'
- 'demo.jar'
Python 3.7
.
├── server.py
customRuntimeConfig:
command:
- python
args:
- 'server.py'
Node.js 10
.
├── server.js
customRuntimeConfig:
command:
- node
args:
- 'server.js'
PHP 7.4
.
├── server.php
customRuntimeConfig:
command:
- php
args:
- 'server.php'
customRuntimeConfig
是函數的自訂啟動命令配置。其中command
是容器的入口命令列表,args
是啟動參數列表。Function Compute依次把command
和args
列表中的內容進行拼接,形成完整的啟動命令。如果未配置啟動命令及啟動參數,HTTP Server將預設從/code/bootstrap啟動。
HTTP Server配置要求
建立HTTP Server時您需要滿足以下要求:
自訂運行時啟動的服務一定要監聽
0.0.0.0:CAPort
或*:CAPort
連接埠。如果您使用127.0.0.1:CAPort
連接埠,會導致請求逾時,出現以下錯誤:{ "ErrorCode":"FunctionNotStarted", "ErrorMessage":"TheCA'shttpservercannotbestarted:ContainerStartDuration:25000000000.PingCAfaileddueto:dialtcp21.0.XX.XX:9000:getsockopt:connectionrefusedLogs:2019-11-29T09:53:30.859837462ZListeningonport9000" }
自訂運行時的監聽連接埠,即函數屬性監聽連接埠預設是9000。如果自訂運行時使用預設的監聽連接埠,那麼您實現的自訂運行時的HTTP Server監聽的連接埠也必須是9000。如果自訂運行時使用的監聽連接埠是8080,那麼您實現的自訂運行時的HTTP Server監聽的連接埠也必須是8080。
Connection需要設定為Keep-Alive,Server端請求逾時時間需設定在24小時(函數最大已耗用時間)及以上。樣本如下:
//例如Node.js使用express時。 var server = app.listen(PORT, HOST); server.timeout = 0; // never timeout server.keepAliveTimeout = 0; // keepalive, never timeout
HTTP Server需要在120秒內啟動完畢。