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

Function Compute:基本

最終更新日:Jul 17, 2024

このトピックでは、ハンドラー、インスタンスライフサイクルフック、ログ、エラー処理など、Function Computeのコーディングに関する基本的な情報について説明します。

ハンドラー

関数を作成するときは、関数のハンドラーを指定する必要があります。 Function Computeのランタイムは、リクエストを処理するハンドラーを読み込み、呼び出します。

標準ランタイムのハンドラは1つの形式のみに従います。 ハンドラーを使用して、Object Storage Service (OSS) トリガー、Simple Log Serviceトリガー、ApsaraMQ for RocketMQトリガー、EventBridgeトリガーなど、さまざまなイベントソースからのイベントリクエストを処理できます。 HTTPトリガーを作成し、HTTPトリガーによって提供されたURIを使用して関数をトリガーすることもできます。

カスタムランタイムのリクエストハンドラーは、標準ランタイムのリクエストハンドラーとは異なります。 詳細については、「」をご参照ください。

function ComputeコンソールRequest handlerパラメーターを使用して、関数のハンドラーを設定できます。 詳細については、「関数の作成」をご参照ください。

関数インスタンスのライフサイクルフック

オンデマンドインスタンスは、リクエストに基づいて自動的に作成できます。 オンデマンドインスタンスは、リクエストを処理していないときに凍結され、一定期間凍結された後に破棄されます。 インスタンスのライフサイクルフックを設定して、インスタンスのステータスが変更されたときにインスタンスに対してコールバック操作を実行できます。 Function Computeのすべてのタイプのランタイムは、InitializerフックとPreStopフックの両方をサポートしています。 詳細は、「Functionインスタンスのライフサイクル」をご参照ください。

初期化フック

Initializerフックは、関数インスタンスが開始された後、ハンドラーが実行される前に呼び出されます。 Function Computeは、関数インスタンスのライフサイクル内で1回だけInitializerフックが正常に呼び出されるようにします。 たとえば、初めてInitializerフックの呼び出しに失敗した場合、システムはInitializerフックが正常に呼び出されるまでInitializerフックを再試行し、ハンドラーを実行します。

データベース関連のシナリオでは、接続プールの作成や関数依存関係ライブラリの読み込みのためのサービスロジックなど、時間のかかるサービスロジックをInitializerフックに追加できます。 これにより、関数が呼び出されるたびにサービスロジックが繰り返し実行されるのを防ぎ、関数の待ち時間を短縮します。

PreStopフック

関数インスタンスが破棄される前に、PreStopフックが実行されます。 PreStopフックを使用して、インスタンスが破棄される前に指定された操作を実行できます。 たとえば、PreStopフックを設定して、インスタンスが破棄される前にデータベース接続が閉じられ、状態がレポートおよび更新されるようにすることができます。

ログレコード

説明
  • Function Computeの関数ログを保存するようにサービスレベルのLogstoreを設定する必要があります。 詳細については、「ロギング機能の設定」をご参照ください。

  • デフォルトでは、サービスの作成時にログ機能を有効にすると、Function ComputeはサービスのLogstoreを自動的に構成します。

Function ComputeはSimple Log Serviceと統合して、関数呼び出しのレコードと関数コードで印刷されたログをLogstoreに保存します。 Function Computeが提供するログステートメントを使用して関数ログを記録し、デバッグとトラブルシューティングを容易にすることができます。 次の表に、さまざまなプログラミング言語のログ印刷ステートメントを示します。

プログラミング言语

組み込みログ印刷文のプログラミング言語

Function Computeが提供するログステートメント

関連ドキュメント

Node.js

console.log()

context.logger.info()

Python

print()

logging.getLogger().info()

印刷ログ

Java

System.out.println()

context.getLogger().info()

印刷ログ

PHP

echo "" . PHP_EOL

$GLOBALS['fcLogger']->info()

印刷ログ

C#

Console.WriteLine("")

context.Logger.LogInformation()

印刷ログ

Golang

log.Println()

fctx, _ := fccontext.FromContext(ctx) fctx.GetLogger().Info()

印刷ログ

プログラミング言語の組み込みログ印刷ステートメントを使用して印刷されたログは、収集され、ログストアに保存されます。 Function Computeが提供するログステートメントを使用して印刷されたログには、リクエストIDがタグ付けされているため、ログのフィルタリングが容易になります。

# Print logs by using the built-in log printing statements of a programming language.
# print('hello world')
message:  hello world

# Print logs by using the logging statements provided by Function Compute.
# 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__:  myService
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-1682a2f3a65 0を出力します。

  • 関数の実行が完了すると、システムはFC Invoke End RequestId: f84a9f4f-2dfb-41b0-9d6c-1682a2f3a65 0を出力します。

オペレーティングシステム

Function Computeの標準ランタイムには、Debian 9 LTSとDebian 10 LTSの2つのオペレーティングシステムがあります。 どちらのオペレーティングシステムもx86_64アーキテクチャのみをサポートします。