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

:How to ensure idempotence

最終更新日:Mar 18, 2020

べき等性を確保する方法

ECS インスタンスを作成またはリリースするために “スケーリングルールの実行” インターフェイスを呼び出すときに、リクエストタイムアウトまたは内部サーバーエラーが発生した場合は、クライアントがそのリクエストの再送を試みることがあります。こうしたときに、クライアントがオプションで ClientToken パラメーターを使用すると、サーバーが想定より多くのインスタンスを作成しないようにすることができます。このパラメーターによってリクエストのべき等性も確保されます。ClientToken はクライアントによって生成される一意の文字列です。大文字小文字が区別され、64 文字以内の ASCII 文字で構成されます。

CreateInstance インターフェイスの呼び出しに同一の ClientToken 値を使用すると、サーバーは同じ ScalingActivityId を含む同一のリクエスト結果を返します。したがって、エラー発生時に同じ ClientToken 値を使用して再試行すると、1 つのスケーリングアクティビティのみが確実に作成され、対応する ScalingActivityId を取得できます。

異なるリクエストパラメーターで使用済みの ClientToken を指定すると、Auto Scaling サービスは IdempotentParameterMismatch エラーコードを返します。しかし、SignatureNonce、TimeStamp、Signature の各パラメーターは変更する必要があることに注意してください。Auto Scaling サービスは SignatureNonce を使用して反射攻撃を防止し、TimeStamp を使用して各リクエストの時刻を記録するので、2 番目のリクエストの SignatureNonce パラメーターと TimeStamp パラメーターには異なる値を指定する必要があります。これにより、生成される Signature 値も異なるものになります。

通常、クライアントを再試行する必要があるのは、エラー 503 (ServiceUnAvailable) か応答がない場合のみです。エラー 200 が返された場合は、再試行しても結果は直前と変わらず、サーバーステータスにも影響がありません。エラー 4xx または 500 が返された場合は、”後で再試行してください” という明示的なメッセージでない限り、再試行は通常失敗します。