本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
确保 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-zoneeu-west-1a
--auto-placementon
--quantity1
--client-token550e8400-e29b-41d4-a716-446655440000
示例 2:运行实例区域等性
以下 run-instances 命令使用区域等性,因为它包含客户端令牌,但没有明确或隐式指定可用区。
aws ec2 run-instances --image-id
ami-b232d0db
--count 1 --key-namemy-key-pair
--client-token550e8400-e29b-41d4-a716-446655440000
示例 3:运行实例区域等性
以下 run-instances 命令使用区域等性,因为它包括客户端令牌和明确指定的可用区。
aws ec2 run-instances --placement "AvailabilityZone=
us-east-1a
" --image-idami-b232d0db
--count 1 --key-namemy-key-pair
--client-token550e8400-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请求的一些常见响应,并提供了重试建议。