确保 Amazon 请求中的等性 EC2 API - Amazon Elastic Compute Cloud

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

确保 Amazon 请求中的等性 EC2 API

当您发出变更API请求时,该请求通常会在操作的异步工作流程完成之前返回结果。即使请求已经返回结果,操作在完成之前也可能会超时或遇到其他服务器问题。这样就很难确定请求是否成功,并且会导致进行多次重试以确保操作成功完成。但是,如果原始请求和后续重试成功,则会多次完成操作。这意味着您创建的资源可能会超出您的预期。

等性可确保API请求完成的次数不超过一次。对于幂等性请求,如果原始请求成功完成,则后续重试也会成功完成,而不会执行任何后续操作。但是,结果可能包含更新的信息,例如当前的创建状态。

Amazon 中的等性 EC2

默认情况下,以下API操作是等效的,不需要额外配置。默认情况下,相应的 AWS CLI 命令还支持等性。

默认情况下是等性的
  • AssociateAddress

  • CreateVpnConnection

  • DisassociateAddress

  • ReplaceNetworkAclAssociation

  • TerminateInstances

以下API操作可选地使用客户端令牌支持等性。相应的 AWS CLI 命令还支持使用客户端令牌的等性。客户令牌是一个区分大小写的唯一字符串,最多 64 个ASCII字符。要使用其中一个操作发出等效API请求,请在请求中指定客户端令牌。您不应将相同的客户端令牌重复用于其他API请求。如果您使用相同的客户端令牌和相同的参数重试成功完成的请求,则重试成功而不执行任何进一步的操作。如果您使用相同的客户端令牌重试成功的请求,但除区域或可用区之外的一个或多个参数不同,则重试失败并显示错误IdempotentParameterMismatch

使用客户端令牌的等性
  • AllocateHosts

  • AllocateIpamPoolCidr

  • AssociateClientVpnTargetNetwork

  • AssociateIpamResourceDiscovery

  • AttachVerifiedAccessTrustProvider

  • AuthorizeClientVpnIngress

  • CopyFpgaImage

  • CopyImage

  • CreateCapacityReservation

  • CreateCapacityReservationFleet

  • CreateClientVpnEndpoint

  • CreateClientVpnRoute

  • CreateEgressOnlyInternetGateway

  • CreateFleet

  • CreateFlowLogs

  • CreateFpgaImage

  • CreateInstanceConnectEndpoint

  • CreateIpam

  • CreateIpamPool

  • CreateIpamResourceDiscovery

  • CreateIpamScope

  • CreateLaunchTemplate

  • CreateLaunchTemplateVersion

  • CreateManagedPrefixList

  • CreateNatGateway

  • CreateNetworkAcl

  • CreateNetworkInsightsAccessScope

  • CreateNetworkInsightsPath

  • CreateNetworkInterface

  • CreateReplaceRootVolumeTask

  • CreateReservedInstancesListing

  • CreateRouteTable

  • CreateTrafficMirrorFilter

  • CreateTrafficMirrorFilterRule

  • CreateTrafficMirrorSession

  • CreateTrafficMirrorTarget

  • CreateVerifiedAccessEndpoint

  • CreateVerifiedAccessGroup

  • CreateVerifiedAccessInstance

  • CreateVerifiedAccessTrustProvider

  • CreateVolume

  • CreateVpcEndpoint

  • CreateVpcEndpointConnectionNotification

  • CreateVpcEndpointServiceConfiguration

  • DeleteVerifiedAccessEndpoint

  • DeleteVerifiedAccessGroup

  • DeleteVerifiedAccessInstance

  • DeleteVerifiedAccessTrustProvider

  • DetachVerifiedAccessTrustProvider

  • ExportImage

  • ImportImage

  • ImportSnapshot

  • ModifyInstanceCreditSpecification

  • ModifyLaunchTemplate

  • ModifyReservedInstances

  • ModifyVerifiedAccessEndpoint

  • ModifyVerifiedAccessEndpointPolicy

  • ModifyVerifiedAccessGroup

  • ModifyVerifiedAccessGroupPolicy

  • ModifyVerifiedAccessInstance

  • ModifyVerifiedAccessInstanceLoggingConfiguration

  • ModifyVerifiedAccessTrustProvider

  • ProvisionIpamPoolCidr

  • PurchaseHostReservation

  • RequestSpotFleet

  • RequestSpotInstances

  • RunInstances

  • StartNetworkInsightsAccessScopeAnalysis

  • StartNetworkInsightsAnalysis

等能的类型
  • 区域-每个区域的请求是等效的。但是,您可以在不同的区域使用相同的请求,包括相同的客户端令牌。

  • 区域 — 在一个区域的每个可用区中,请求都是等性的。例如,如果您在同一区域的两次调用中指定了相同的客户端令牌,则如果它们为AvailabilityZone参数指定了不同的值,则调用会成功。AllocateHosts

RunInstances 等能性

RunInstancesAPI操作同时使用区域和区域等性。

使用的等性类型取决于您在请求中如何指定可用区。 RunInstances API在以下情况下,该请求使用区域等性

  • 如果您使用 Plac em ent 数据类型中的AvailabilityZone参数明确指定可用区

  • 如果您使用参数隐式指定可用区 SubnetId

如果您未明确或隐式指定可用区,则请求将使用区域等性

区域性等性

区域等性可确保 RunInstances API请求在一个区域的每个可用区中均具有等性。这样可以确保使用相同客户端令牌的请求在一个地区的每个可用区内只能完成一次。但是,相同的客户端令牌可用于启动该地区其他可用区的实例。

例如,如果您发送了在可用区启动实例的等效请求,然后在us-east-1a可用区的请求中使用相同的客户端令牌,则我们会在每个us-east-1b可用区启动实例。如果一个或多个参数不同,则在这些可用区域中使用相同客户端令牌的后续重试要么成功返回而不执行任何进一步的操作,要么失败并IdempotentParameterMismatch出现错误。

区域等性

区域等性可确保 RunInstances API请求在区域中具有等性。这样可以确保使用相同客户端令牌的请求在一个区域内只能完成一次。但是,具有相同客户端令牌的完全相同的请求可用于在不同区域启动实例。

例如,如果您发送一个等效请求以在该地区启动实例,然后在该us-east-1区域的请求中使用相同的客户端令牌,则我们会在每个eu-west-1区域启动实例。如果一个或多个参数不同,则在这些区域中使用相同客户端令牌的后续重试要么成功返回而不执行任何进一步的操作,要么因IdempotentParameterMismatch错误而失败。

提示

如果请求区域中的一个可用区不可用,则使用区域等性的RunInstances 请求可能会失败。要利用 AWS 基础设施提供的可用区功能,我们建议您在启动实例时使用区域等性。 RunInstances 即使请求的区域中没有其他可用区,使用区域等性并以可用区域为目标的请求也会成功。

示例

AWS CLI 命令示例

要使 AWS CLI 命令具有等性,请添加选项。--client-token

示例 1:等性

以下 allocate-hosts 命令使用了等性,因为它包含客户端令牌。

aws ec2 allocate-hosts --instance-type m5.large --availability-zone eu-west-1a --auto-placement on --quantity 1 --client-token 550e8400-e29b-41d4-a716-446655440000
示例 2:运行实例区域等性

以下 run-instances 命令使用区域等性,因为它包含客户端令牌,但没有明确或隐式指定可用区。

aws ec2 run-instances --image-id ami-b232d0db --count 1 --key-name my-key-pair --client-token 550e8400-e29b-41d4-a716-446655440000
示例 3:运行实例区域等性

以下 run-instances 命令使用区域等性,因为它包括客户端令牌和明确指定的可用区。

aws ec2 run-instances --placement "AvailabilityZone=us-east-1a" --image-id ami-b232d0db --count 1 --key-name my-key-pair --client-token 550e8400-e29b-41d4-a716-446655440000

API请求示例

要使API请求具有等性,请添加参数。ClientToken

示例 1:等性

以下AllocateHostsAPI请求使用了等性,因为它包含客户端令牌。

https://ec2.amazonaws.com/?Action=AllocateHosts &AvailabilityZone=us-east-1b &InstanceType=m5.large &Quantity=1 &AutoPlacement=off &ClientToken=550e8400-e29b-41d4-a716-446655440000 &AUTHPARAMS
示例 2: RunInstances 区域等性

以下RunInstancesAPI请求使用区域等性,因为它包含客户端令牌,但未明确或隐式指定可用区。

https://ec2.amazonaws.com/?Action=RunInstances &ImageId=ami-3ac33653 &MaxCount=1 &MinCount=1 &KeyName=my-key-pair &ClientToken=550e8400-e29b-41d4-a716-446655440000 &AUTHPARAMS
示例 3: RunInstances 区域等性

以下RunInstancesAPI请求使用区域等性,因为它包含客户端令牌和明确指定的可用区。

https://ec2.amazonaws.com/?Action=RunInstances &Placement.AvailabilityZone=us-east-1d &ImageId=ami-3ac33653 &MaxCount=1 &MinCount=1 &KeyName=my-key-pair &ClientToken=550e8400-e29b-41d4-a716-446655440000 &AUTHPARAMS

下表显示了您可能获得的有关等性API请求的一些常见响应,并提供了重试建议。

响应 建议 注释

200(正常)

不重试

原始请求成功完成。成功返回任何后续重试。

400 系列响应码(客户端错误)

不重试

请求存在问题,原因如下:

  • 它包括无效的参数或参数组合。

  • 它使用您没有权限的操作或资源。

  • 它使用正在改变状态的资源。

如果请求涉及正在改变状态的资源,则重试请求可能会成功。

500 系列响应码(服务器错误)

重试

该错误是由 AWS 服务器端问题引起的,通常是暂时性的。使用适当的退避策略重复发出请求。