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

Function Compute:トリガーの高度な機能

最終更新日:Jul 25, 2024

このトピックでは、トリガーの高度な機能について説明します。

使用上の注意

このトピックで説明する高度な機能は、Message Service (MNS) キュートリガーApsaraMQ for RocketMQトリガーApsaraMQ for RabbitMQトリガーApsaraMQ for KafkaトリガーData Transmission Service (DTS) トリガーなどのカスタムイベントソーストリガーにのみ適用できます。

呼び出しメソッドInvocation methods

Function Computeのトリガーは、同期呼び出しと非同期呼び出しをサポートします。 次の表に、2つの方法の制限を示します。

呼び出しメソッド

ボディサイズ制限

最大タイムアウト期間

同期呼び出し

32 MB

5 分

非同期呼び出し

128 KB

5 分

プッシュ設定

説明

bodyサイズの制限を使用して、バッチプッシュで集約されたメッセージの数を減らすかどうかを決定する必要があります。 bodyのサイズの制限の詳細については、「呼び出しメソッド」をご参照ください。

バッチプッシュ

バッチプッシュを有効にした後、バッチプッシュメッセージおよびバッチプッシュ間隔パラメーターを設定する必要があります。

  • バッチプッシュメッセージ: 各呼び出しに対して送信されるメッセージの最大数。 リクエストは、バックログ内のメッセージ数が指定された値に達したときに送信されます。 有効な値: [1, 10000] 。

  • バッチプッシュ間隔: 関数が呼び出される間隔。 システムはメッセージを集約し、指定された時間間隔でメッセージをFunction Computeに送信します。 有効な値: 0 ~ 15。 単位は秒です。 値0は、メッセージがリアルタイムで送信されることを示します。

バッチプッシュは、複数のイベントを集約するのに役立ちます。 Batch Push MessagesおよびBatch Push Intervalパラメーターのいずれかの条件が満たされると、関数がトリガーされ、リクエストメッセージが一度にFunction Computeにプッシュされます。

例のバッチプッシュ

  • 例 1

    バッチプッシュメッセージは100に設定され、バッチプッシュ間隔は15秒に設定されます。 各メッセージのサイズは1 KBです。 メッセージの数は10秒で100に達します。 この場合、メッセージは15秒間待たずにすぐに送信されます。

  • 例 2

    バッチプッシュメッセージは100に設定され、バッチプッシュ間隔は15秒に設定されます。 各メッセージのサイズは1 KBです。 間隔が15秒に達すると、メッセージの数は50です。 この場合、メッセージは、メッセージの数が100に達するのを待たずに直ちに送信される。

  • 例 3

    バッチプッシュメッセージは100に設定され、バッチプッシュ間隔は15秒に設定されます。 各メッセージのサイズは2 KBです。 呼び出しメソッド非同期呼び出しに設定されます。 メッセージの数は10秒で100に達し、メッセージのサイズは200 KB (100x2 KB) に達します。これは、非同期呼び出しの本体サイズの上限を超えています。 この場合、メッセージはすぐに2つのバッチで送信されます。 最初のバッチでは64のメッセージがFunction Computeにプッシュされ、2番目のバッチでは36のメッセージがFunction Computeにプッシュされます。

プッシュ形式

プッシュ形式は、イベントパラメーターのデータ要素の形式を指定します。

  • CloudEvents: 共通形式でイベントデータを記述するための仕様。 CloudEventsは、異なるサービスとプラットフォーム間のイベント宣言と送信を簡素化します。

  • RawData: CloudEventsのデータフィールドのコンテンツのみが配信されます。 CloudEvents形式のその他のメタデータは配信されません。

次の例は、イベントモードでのMNSキュートリガーのCloudEventsおよびRawData形式のイベントを示しています。

CloudEvents

[
    {
    "id":"c2g71017-6f65-fhcf-a814-a396fc8d****",
    "source":"MNS-Function-mnstrigger",
    "specversion":"1.0",
    "type":"mns:Queue:SendMessage",
    "datacontenttype":"application/json; charset=utf-8",
    "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
    "time":"2021-04-08T06:28:17.093Z",
    "aliyunaccountid":"164901546557****",
    "aliyunpublishtime":"2021-10-15T07:06:34.028Z",
    "aliyunoriginalaccountid":"164901546557****",
    "aliyuneventbusname":"MNS-Function-mnstrigger",
    "aliyunregionid":"cn-chengdu",
    "aliyunpublishaddr":"42.120.XX.XX",
    "data":{
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    }
    },
    {
    "id":"d2g71017-6f65-fhcf-a814-a396fc8d****",
    "source":"MNS-Function-mnstrigger",
    "specversion":"1.0",
    "type":"mns:Queue:SendMessage",
    "datacontenttype":"application/json; charset=utf-8",
    "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
    "time":"2021-04-08T06:28:17.093Z",
    "aliyunaccountid":"164901546557****",
    "aliyunpublishtime":"2021-10-15T07:06:34.028Z",
    "aliyunoriginalaccountid":"164901546557****",
    "aliyuneventbusname":"MNS-Function-mnstrigger",
    "aliyunregionid":"cn-chengdu",
    "aliyunpublishaddr":"42.120.XX.XX",
    "data":{
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    }
    }
]

RawData

[
    {
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    },
    {
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    }
]

再試行ポリシー

失敗した関数リクエストは、設定された再試行ポリシーに基づいて再試行できます。 次の項目は、使用可能な再試行ポリシーを示します。

  • Backoff Retry: システムはリクエストを最大3回まで再試行します。 2回の連続した再試行の間隔は10〜20秒である。

  • 指数減衰再試行: デフォルトの再試行ポリシー。 システムはリクエストを最大176回再試行します。 各再試行の時間間隔は指数関数的に512秒に増加します。 再試行時間の合計は24時間です。 リトライ間隔は、1s、2s、4s、8s、16s、32s、64s、128s、256s、512sです。 512秒の間隔は167回使用されます。

再試行がトリガーされるシナリオ

  • 429エラー: リクエストはFunction Computeによって抑制されます。 スロットリングは一時的なもので、リクエストは再試行されます。

  • 5xxエラー: Function Computeのシステムエラーのため、関数の実行に失敗しました。

よくある質問

Q: 関数実装の問題によって引き起こされる関数実行エラーは、再試行ポリシーをトリガーしますか?

A: 同期呼び出しの場合、再試行ポリシーは関数実行エラーによってトリガーされます。 非同期呼び出しの場合、再試行ポリシーは関数実行エラーによってトリガーされません。 ただし、非同期呼び出しの再試行がトリガーされます。 詳細については、「再試行ポリシー」をご参照ください。

次の2種類の関数の再試行が含まれます。

  • 再試行は成功するかもしれません。

    リトライポリシーを実行しなくても、関数内でリクエストを再試行できます。

  • 再試行は必ず失敗します。

    再試行は無意味であり、再試行コストを増加させる。

フォールトトレランスポリシー

フォールトトレランスポリシーは、実行中にエラーを無視するかどうかを指定します。

  • 許容障害

    システムは、実行および再試行に失敗した要求をスキップし、次の要求の処理を続行します。

  • フォールトトレランス禁止

    要求の実行および再試行に失敗すると、消費タスクはブロックされます。

デッドレターのキュー

フォールトトレランス許可が有効になっている場合にのみ、無効キューを設定できます。

  • デットレターキュー機能を有効にした場合、処理されていないメッセージ、または再試行の最大数に達したメッセージは、指定された宛先サービスに配信されます。 Function Computeでサポートされているデットレターキューの宛先サービスには、MNS、ApsaraMQ for RocketMQ、ApsaraMQ for Kafka、およびEventBridgeが含まれます。 ビジネス要件に基づいて、さまざまなキュータイプを選択できます。

  • デットレターキュー機能を有効にしない場合、リトライ回数が最大に達したメッセージは破棄されます。

説明

非同期呼び出しの場合、関数エラーが発生した場合、メッセージはトリガーの無効文字キューに配信されません。 この場合、メッセージは、非同期呼び出し用にFunction Computeで設定されている宛先サービスに配信されます。 詳細については、「Result callback」をご参照ください。