ECS を作成するために CreateInstance インターフェイスを呼び出すときに、リクエストタイムアウトまたは内部サーバーエラーが発生した場合は、クライアントがそのリクエストの再送を試みることがあります。こうしたときに、クライアントがオプションで
ClientToken
パラメーターを使用すると、サーバーは想定より多くのインスタンスを作成しません。このパラメーターを設定すると、リクエストのべき等性も確保されます。ClientToken
はクライアントが生成する一意の文字列で、大文字小文字が区別され、64 文字以内の ASCII 文字で構成されます。
ユーザーが CreateInstance インターフェイスの呼び出しに同一の ClientToken
値を使用すると、サーバーは同じ InstanceId
を含む同一のリクエスト結果を返します。したがって、エラー発生時に再試行する際に同じ ClientToken
値を使用すると、ECS で確実にインスタンスを 1 つだけ作成し、同じ InstanceId
を取得することができます。
ユーザーが、異なるリクエストパラメーターに使用済みの ClientToken
を指定すると、ECS は IdempotentParameterMismatch
エラーコードを返します。しかし、SignatureNonce
、TimeStamp
、Signature
の各パラメーターは、リクエストの再送時には必ず変更するようにしてください。ECS は SignatureNonce
を使用して反射攻撃を防止し、TimeStamp
を使用して各リクエストの時刻を記録するので、重複するリクエストでも、SignatureNonce
パラメーターと TimeStamp
パラメーターの値が異なっていることが必要です。これにより、生成される Signature
値も異なるものになります。
一般に、クライアントが操作を再試行する必要があるのは、500 (InternalError) エラーか 503 (ServiceUnAvailable
) エラーが発生した場合、または応答を受信できない場合に限られます。200 が返された場合は、操作を再試行しても結果は直前と変わりませんが、サーバーステータスには何の影響もありません。4xx
のエラーコードが返された場合は、”後で再試行してください” という明示的なメッセージが表示されたのでない限り、再試行しても通常は成功しません。