このトピックでは、"Invocation canceled by client" エラーの原因と解決策について説明します。
問題の説明
リクエストログに次のエラーメッセージが表示されます。
FC Invoke End RequestId: 1-64263a4b-2cd7c98b677*********, Error: Invocation canceled by client (duration: 4912ms, maxMemoryUsage: 0.00MB)
原因
呼び出しを開始したクライアントがリクエストをキャンセルしました。 その結果、関数の実行が中断され、エラーが報告されます。
解決策
問題をトラブルシューティングするには、次の手順に従います。
エラーログに基づいて、クライアントがリクエストをキャンセルしたときの関数の実行時間を確認します。
この例では、
duration: 4912ms
は、関数が約5秒間実行されることを示します。実行時間がビジネス要件に基づいて期待値を満たしているかどうかを判断します。
実行期間が期待値を満たしている場合は、クライアントのタイムアウト期間を長くします。 詳細については、「期待どおりの実行期間」をご参照ください。
実行時間が期待どおりでない場合は、ログに基づいて関数の実行ロジックを確認し、実行時間の増加につながる部分を特定する必要があります。 詳細については、「実行期間が期待どおりではない」をご参照ください。
期待どおりの実行期間
SDKまたはAPI操作を使用して関数を呼び出す場合は、リクエストタイムアウト期間を関数の設定されたタイムアウト期間よりも長い値に設定することを推奨します。
たとえば、Golang言語を使用し、function Compute APIを使用して関数を呼び出す場合、http.Clientのtimeoutプロパティを使用してリクエストのタイムアウト期間を設定できます。 リクエストの開始時にcontext.Contextが使用されている場合、コンテキストの期限またはタイムアウト期間を調整できます。
別のサービスを使用して関数を呼び出す場合、サービスのコンソールでバックエンドタイムアウト期間を変更できます。
たとえば、API操作を使用してフロントエンドで関数を呼び出す場合、API GatewayコンソールでAPI操作のバックエンドタイムアウト設定を変更できます。 詳細については、「APIの作成」をご参照ください。
コンソールで関数を呼び出す場合、関数が実行される前に [リクエストのキャンセル] をクリックしてリクエストをキャンセルしたり、webページを閉じたりしないでください。
実行期間が予想どおりではない
ほとんどの場合、プログラムの実行時間は次の操作によって決まります。
I/O操作
I/O動作、特にネットワークI/O動作は、実行待ち時間の増加の主な原因である。 外部サービスへのアクセス時間が正常かどうかを確認するために、外部サービスへのアクセス前後にログを追加することを推奨します。
コンピューティング操作
多数のコンピューティング動作はまた、レイテンシを増加させ得る。 CPUの仕様を増やすことを推奨します。