このトピックでは、トリガーの高度な機能について説明します。
使用上の注意
このトピックで説明する高度な機能は、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」をご参照ください。