このトピックでは、Function Compute のハンドラ、インスタンスライフサイクルフック、ロギング、およびオペレーティングシステムについて説明します。
ハンドラ
すべての関数にはハンドラが必要です。Function Compute ランタイムは、このハンドラをロードして呼び出し、受信リクエストを処理します。
組み込みランタイム
組み込みランタイムのハンドラは、標準形式に従います。これらは、Object Storage Service (OSS)、Simple Log Service、ApsaraMQ for RocketMQ、EventBridge トリガーなどのトリガーソースからのイベントを処理します。関数に HTTP トリガーを設定すると、直接 HTTP 呼び出しのための Uniform Resource Identifier (URI) エンドポイントが提供されます。
カスタムランタイムとカスタムコンテナランタイム
カスタムランタイムまたはカスタムコンテナランタイムのハンドラは、組み込みランタイムとは異なります。詳細については、「Web 関数」をご参照ください。
ハンドラの設定
「[ハンドラー]」パラメーターをFunction Compute コンソールで設定します。詳細については、「関数の作成」をご参照ください。
インスタンスライフサイクルフック
オンデマンドモードでは、Function Compute は受信リクエストを処理するためにインスタンスを自動的に作成します。オンデマンドインスタンスは、リクエストを処理していないときにフリーズします。一定期間フリーズしたままのインスタンスは破棄されます。
インスタンスのステータスが変更されたときにカスタムロジックを実行するようにライフサイクルフックを設定します。すべてのランタイムタイプは、[Initializer] フックと [PreStop] フックの両方をサポートしています。詳細については、「インスタンスライフサイクルの設定」をご参照ください。
Initializer フック
Initializer フックは、インスタンスの起動後、ハンドラの実行前に実行されます。Function Compute は、Initializer フックがインスタンスごとに 1 回のみ実行され、正常に完了することを保証します。失敗した場合、動作は呼び出しタイプによって異なります。
同期呼び出し -- システムはエラーを返します。
非同期呼び出し -- システムは設定されたリトライポリシーに基づいてリトライします。
時間のかかる初期化ロジックは、呼び出しごとに繰り返されるのを避けるため、Initializer フックに配置します。一般的な例は次のとおりです。
接続プールの作成
関数依存関係のロード
データベース関連のセットアップタスク
PreStop フック
PreStop フックは、関数インスタンスが破棄される前に実行されます。次のようなクリーンアップタスクに使用します。
データベース接続のクローズ
インスタンスのステータスのレポートと更新
ログ
Function Compute は Simple Log Service と統合されており、関数呼び出しログと関数コードで出力されたログを保存します。
関数ログを保存するには、サービスレベルの Logstore を設定します。詳細については、「ロギング機能の設定」をご参照ください。
関数の作成時にロギングが有効になっている場合、Function Compute コンソールはデフォルトの Logstore を自動的にセットアップします。
ロギングステートメント
サポートされている各言語には、組み込みログステートメントと Function Compute ログステートメントがあります。Function Compute ログステートメントは、各エントリにリクエスト ID をタグ付けするため、フィルタリングが容易になります。
言語 | 組み込みステートメント | Function Compute ステートメント | 参照 |
Node.js |
|
| |
Python |
|
| |
Java |
|
| |
PHP |
|
| |
C# |
|
| |
Golang |
|
|
どちらのタイプのステートメントもログを Logstore に送信します。違いは、Function Compute ステートメントが各ログエントリにリクエスト ID をタグ付けすることです。
# Built-in statement: print('hello world')
message: hello world
# Function Compute statement: logger.info('hello world')
message: 2020-03-13T04:06:49.099Z f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650 [INFO] hello worldログ構造
関数実行ログには、サービス名、関数名、現在のバージョン、エイリアス、およびコードログが含まれます。次の例は、データ構造を示しています。
__source__:
__tag__:__receive_time__: 1584072413
__topic__: FCLogs:myFunction
functionName: myFunction
message: 2020-03-13T04:06:49.099Z f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650 [INFO] hello world
qualifier: LATEST
serviceName: myService
versionId:システムは、各関数実行の開始時と終了時に次のマーカーを出力します。
開始:
FC Invoke Start RequestId: f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650終了:
FC Invoke End RequestId: f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650
オペレーティングシステム
組み込みランタイムは、Debian 9 LTS、Debian 10 LTS、Debian 11 LTS、または Debian 12 LTS で実行されます。x86_64 アーキテクチャのみがサポートされています。
レイヤーまたは環境変数を使用してオペレーティングシステムをカスタマイズします。たとえば、Function Compute はデフォルトで UTC を使用します。環境変数 TZ を Asia/Shanghai に設定すると、UTC+8 に切り替わります。詳細については、「レイヤーの設定」および「環境変数の設定」をご参照ください。