カスタムランタイムの場合、ZIP形式のコードファイルはHTTPサーバープログラムです。 このトピックでは、カスタムランタイムのコールドスタートの基本原則と、HTTPサーバーの設定の要件について説明します。
原則
カスタムランタイムの場合、ZIP形式のコードファイルはHTTPサーバープログラムです。 関数がHTTPサーバーを起動するには、Startup CommandパラメーターとStartup Parameterパラメーターのみを設定する必要があります。 Function Computeがカスタムランタイムでコールドスタートを実行すると、Startup CommandパラメーターとStartup ParameterパラメーターがカスタムHTTPサーバーの起動に使用されます。 HTTPサーバーは、Function Computeからのすべてのリクエストを引き継ぎます。 HTTPサーバーのデフォルトポートは9000です。 HTTPサーバーに8080などの別のポートを使用する場合は、関数設定でリスニングポートを8080に設定できます。
たとえば、関数のコードパッケージの名前はfunction.zip
です。 次の例は、パッケージに含まれるファイルと、関数の開発に使用されるプログラミング言語に基づいたStartup CommandおよびStartup Parameterパラメーターを示しています。
Java 8またはSpringブート
.
├── 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
は、関数のカスタム起動コマンドを指定します。 コマンド
は、コンテナーの起動コマンドを指定します。 args
は起動パラメーターを指定します。 Function Computeは、command
とargs
の内容を連結して、完全な起動コマンドを作成します。 起動コマンドと起動パラメーターが設定されていない場合、HTTPサーバーはデフォルトで /code/bootstrapから起動します。
HTTPサーバー構成の要件
HTTPサーバーを作成するときは、次の要件が満たされていることを確認してください。
カスタムランタイムで開始されるサービスは、
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サーバーのリスニングポートはポート9000である必要があります。 カスタムランタイムのリスニングポートがポート8080の場合、HTTPサーバーのリスニングポートはポート8080である必要があります。
接続のキープアライブモードを有効にし、リクエストタイムアウト期間を24時間 (最大機能実行期間) 以上に設定する必要があります。 サンプルコード:
// In this example, the express framework for Node.js is used. var server = app.listen(PORT, HOST); server.timeout = 0; // never timeout server.keepAliveTimeout = 0; // keepalive, never timeout
HTTPサーバーは120秒以内に起動する必要があります。