確保 Amazon EC2API請求中的不透明度 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

確保 Amazon EC2API請求中的不透明度

當您發出靜音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

意識模糊的類型
  • 區域 – 每個區域中的請求是密不可分的。不過,您可以在不同的區域中使用相同的請求,包括相同的用戶端權杖。

  • 區域 – 請求在 區域中的每個可用區域中都具有同效性。例如,如果您AllocateHosts在相同區域中的 的兩個呼叫中指定相同的用戶端權杖,則如果呼叫為 AvailabilityZone 參數指定不同的值,則呼叫會成功。

RunInstances 意識不清

RunInstancesAPI動作同時使用區域和區域性錯位。

使用的不透明度類型取決於您在請求中 RunInstances API指定可用區域的方式。在下列情況下,請求會使用區域性錯位

  • 如果您使用置放資料類型中的 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 區域性錯位

下列 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 區域錯位

下列 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 (OK)

請勿重試

原始請求已成功完成。任何後續的重試都會成功傳回。

400 系列回應碼 (用戶端錯誤

請勿重試

請求有下列方面的問題:

  • 其包含無效的參數或參數組合。

  • 其使用您沒有許可的動作或資源。

  • 其使用處於變更狀態過程的資源。

如果請求涉及處於變更狀態過程的資源,則重試請求有可能會成功。

500 系列回應碼 (伺服器錯誤

重試

錯誤是由 AWS 伺服器端問題所造成,且通常是暫時性的。請使用適當的退避策略來重複請求。