Auto Scaling APIを呼び出すときにリクエストがタイムアウトするか、内部サーバーエラーが発生した場合、クライアントはリクエストを再試行することがあります。 再試行による繰り返しの問題を防ぐため、リクエストにClientTokenパラメーターを指定することを推奨します。
べき等とは
等価性は、数学およびコンピュータサイエンスにおけるいくつかの操作またはリソースの特性です。 これは、送信されるリクエストの数に関係なく、操作またはリソースが同じ結果につながることを意味します。 等価性は、分散システム設計において重要な役割を果たします。
べき等性を確保するにはどうすればよいですか?
通常、クライアントは次の場合にリクエストを再試行します。エラーコード500 (InternalError
) または503 (ServiceUnavailable
) が報告され、応答は返されません。 Auto Scaling APIを呼び出すと、クライアントを使用して、ASCII文字のみを含み、長さが64文字を超えないトークンを生成し、そのトークンをClientTokenパラメーターの値として指定して、リクエストのべき等性を確保できます。
ClientTokenの詳細
クライアントトークンは、ASCII文字のみを含み、長さが64文字を超えない大文字と小文字を区別する文字列です。 クライアントを使用してクライアントトークンを生成できます。クライアントトークンが異なるリクエスト間で一意であることを確認する必要があります。 例:
ClientToken=123e4567-e89b-12d3-a456-426655440000
ClientTokenパラメーターの値を指定し、その他のリクエストパラメーターを変更した場合、Auto Scalingは
IdemptotParameterMismatch
エラーコードを返します。説明各再試行で、SignatureNonce、Timestamp、およびSignatureパラメーターに異なる値を指定する必要があります。 その理由は、Auto ScalingはSignatureNonceパラメーターを使用してリプレイ攻撃を防ぎ、Timestampパラメーターを使用して各リクエストのタイムスタンプをマークするためです。 したがって、再開始されたリクエストには、異なるSignatureNonce値とTimestamp値を指定する必要があります。 その結果、Signatureパラメーターの値が変更されます。
リクエストでClientTokenパラメーターを指定すると、次の結果が返される場合があります。
HTTPステータスコード200が返された場合、クライアントはリクエストが再試行された後に最後のリクエストと同じ結果を受け取ります。 これはサーバーのステータスには影響しません。
HTTPステータスコード4xxが
try it later
エラーメッセージなしで返された場合、再試行は失敗します。 リクエストを再試行する前に、返されたエラーメッセージに基づいて問題をトラブルシューティングする必要があります。
べき等値要求のサンプル
次のコードでは、CreateScalingGroup APIを呼び出してスケーリンググループを作成する方法の例を示します。 ClientTokenパラメーターと他のリクエストパラメーターに同じ値を使用する複数のリクエストを開始した場合、サーバーは各リクエストに対して同じ応答を返し、スケーリンググループは1つだけ作成されます。
http(s)://ess.aliyuncs.com/?Action=CreateScalingGroup
&ScalingGroupName=scalinggroup****
&InstanceId=i-28wt4****
&RegionId=cn-qingdao
&MinSize=2
&MaxSize=20
&DefaultCooldown=300
.......
&ClientToken=123e4567-e89b-12d3-a456-42665544****
&<Common request parameters>
API操作
Auto Scalingの次のAPI操作は、ClientTokenパラメーターをサポートしています。 ClientTokenパラメーターをサポートするその他のAPI操作については、「APIリファレンス」をご参照ください。
CreateScalingGroup: スケーリンググループを作成します。
CreateScalingConfiguration: ECS (Elastic Compute Service) タイプのスケーリング設定を作成します。
RemoveInstances: スケーリンググループからECSインスタンスを削除します。
ExecuteScalingRule: スケーリングルールを実行します。
AttachDBInstances: ApsaraDB RDSインスタンスをスケーリンググループに関連付けます。
AttachServerGroups: スケーリンググループのサーバーグループを追加します。
AttachLoadBalancers: SLBインスタンスをスケーリンググループに関連付けます。
AttachAlbServerGroups: スケーリンググループにALBサーバーグループを追加します。
AttachVServerGroups: vServerグループをSLBインスタンスに追加します。