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

Function Compute:基本

最終更新日:Aug 30, 2024

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

ハンドラ

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

  • イベントハンドラー

    イベントハンドラーは、OSSトリガー、Log Serviceトリガー、Message Queue for Apache RocketMQトリガーなど、HTTPトリガー以外のさまざまなイベントソースによってトリガーされたイベントリクエストを処理するために使用されます。

  • HTTPハンドラー

    HTTPハンドラーは、HTTPトリガーによってトリガーされるリクエストを処理します。 詳細については、「HTTPトリガーの設定と使用」をご参照ください。

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

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

プロビジョニングされたインスタンスは、ビジネス要件に基づいて作成できます。 プロビジョニングされたインスタンスは、アイドル状態になると凍結され、一定期間凍結された後に破棄されます。 インスタンスのライフサイクルフックを設定して、インスタンスのステータスが変更されたときにインスタンスに対してコールバック操作を実行できます。 Function Computeでは、Initializer hooksPreFreeze hooksPreStop hooksのライフサイクルフックを設定できます。 詳細は、「Functionインスタンスのライフサイクル」をご参照ください。

初期化フック

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

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

PreFreezeフック

関数インスタンスが凍結される前に、PreFreezeフックが実行されます。 PreFreezeフックを使用して、インスタンスがフリーズする前に指定した操作を実行できます。 たとえば、PreFreezeフックを設定して、インスタンスがフリーズする前にメトリックが送信されるようにすることができます。

PreStopフック

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

ログレコード

説明
  • サービスのLogstoreを設定すると、Function Computeは関数ログをLogstoreに保存します。 詳細は、「ロギングの設定」をご参照ください。

  • デフォルトでは、コンソールでサービスを作成するときに、Function ComputeがLogstoreを設定します。

Function Computeは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()

エラー処理

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

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

# Log printed 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のエラーは、HandledInvocationErrorUnhandledInvocationErrorの2種類に分類されます。

  • HandledInvocationError

    Node.jsのcallbackパラメーターによって返されるエラーのみがHandledInvocationError型です。 エラー情報は応答に含まれる。

    'use strict';
      module.exports.handler = function(event, context, callback) {
        console.log('hello world');
        callback('this is error', 'hello world');
      }          

    エラー情報を含むレスポンスの例を次に示します。

    {"errorMessage":"this is error"}               
  • UnhandledInvocationError

    callbackパラメーターによって返されないエラーは、UnhandledInvocationError型です。

    UnhandledInvocationErrorエラーのスタックトレースがログに出力されます。 ログを表示して、コンテキストに基づいてスタックトレースを見つけることができます。

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

Function ComputeはDebian9 LTSオペレーティングシステムを使用します。 x86_64アーキテクチャのみがサポートされています。

レイヤーまたは環境変数を設定することで、オペレーティングシステム環境を変更できます。 たとえば、タイムゾーンを変更するように環境変数を設定できます。 デフォルトでは、関数インスタンスはUTC時間で実行されます。 環境変数TZの値をAsia/Shanghaiに設定した場合、Function ComputeのタイムゾーンはUTC + 8に変わります。 詳細については、「レイヤーの管理」および「環境変数」をご参照ください。