このトピックでは、トリガーの高度な機能について説明します。
使用上の注意
このトピックで説明する高度な機能は、MNSキュートリガー、ApsaraMQ for RocketMQトリガー、RabbitMQトリガー、ApsaraMQ for Kafkaトリガー、DTSトリガーなどのカスタムイベントソーストリガーにのみ適用できます。
呼び出しメソッドInvocation methods
Function Computeのトリガーは、同期呼び出しモードと非同期呼び出しモードをサポートしています。 次の表に、2つのモードの制限を示します。
呼び出しモード | 最大 | 最大タイムアウト期間 |
同期呼び出し | 32 MB | 5 分 |
非同期呼び出し | 128 KB | 5 分 |
プッシュ設定
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形式のその他のメタデータは配信されません。
次のサンプルコードは、CloudEventsおよびRawData形式のイベントを示しています。 サンプルコードでは、MNSキュートリガーが使用されています。
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"
}
}
RawData
{
"requestId":"606EA3074344430D4C81****",
"messageId":"C6DB60D1574661357FA227277445****",
"messageBody":"TEST"
}
次のサンプルコードは、イベントストリーミングモードの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:はい。
フォールトトレランスポリシー
フォールトトレランスポリシーは、エラーが発生したときに無視するかどうかを指定します。
許容障害
システムは、リタイア後に実行されなかった要求をスキップし、次の要求の処理に進む。
フォールトトレランス禁止
再試行後にリクエストの実行に失敗すると、消費はブロックされます。
デッドレターキュー
フォールトトレランス許可が有効になっている場合にのみ、無効キューを設定できます。
デットレターキュー機能を有効にすると、処理されていないメッセージ、または再試行の最大数に達したメッセージが宛先サービスに配信されます。 Function Computeは、Message Service (MNS) 、ApsaraMQ for RocketMQ、ApsaraMQ for Kafka、EventBridgeの宛先サービスをサポートしています。
デットレターキュー機能を有効にしない場合、リトライの最大回数を超えたメッセージは破棄されます。
同時消費
同時消費スレッドを使用してスループットを向上させることができます。 同時実行クォータは、ApsaraMQ for Kafkaトリガーに対してのみ設定できます。 ApsaraMQ for Kafkaの同時使用は、トピックパーティションと一緒に実装する必要があります。 以下のシナリオが含まれます。
トピックパーティション=同時消費スレッド: 1つのスレッドが1つのトピックパーティションを消費します。
Topicパーティション> 同時消費スレッド: 複数の同時消費スレッドがすべてのパーティションを均等に消費します。
Topicパーティション <同時消費スレッド: 1つのスレッドが1つのトピックパーティションを消費します。 余分な消費スレッドは無効です。
リソースを完全に活用するには、[Topic partitions]=[Concurrent consumption threads] または [Topic partitions]> [Concurrent consumption threads] を選択することを推奨します。