すべてのプロダクト
Search
ドキュメントセンター

Function Compute:原則

最終更新日:Sep 02, 2024

カスタムランタイムの場合、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は、commandargsの内容を連結して、完全な起動コマンドを作成します。 起動コマンドと起動パラメーターが設定されていない場合、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秒以内に起動する必要があります。