

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

# Amazon EC2 API 中的最終一致性
<a name="eventual-consistency"></a>

由於支援 API 之系統的分散式性質，Amazon EC2 API 遵循最終一致性模型。這表示您執行會影響 Amazon EC2 資源的 API 命令的結果，可能不會立即顯示給您執行的所有後續命令。在執行緊接先前 API 命令的 API 命令時，應謹記這一點。

最終一致性可能會影響您管理 資源的方式。例如，如果您執行命令來建立資源，最終其他命令將可見該資源。這表示，如果您執行命令來修改或描述您剛建立的資源，其 ID 可能尚未在整個系統中傳播，而且您會收到回應資源不存在的錯誤。

若要管理最終一致性，您可以執行下列操作：
+ 在執行命令來修改資源之前，請先確認資源的狀態。使用指數退避演算法執行適當的 `Describe` 命令，以確保您有足夠的時間讓上一個命令透過系統傳播。若要這樣做，請重複執行 `Describe`命令，從幾秒鐘的等待時間開始，然後逐漸增加到幾分鐘的等待時間。
+ 在後續命令之間增加等待時間，即使 `Describe` 命令傳回準確的回應。從幾秒鐘的等待時間開始套用指數退避演算法，並逐漸增加到幾分鐘的等待時間。

**最終一致性錯誤範例**  
以下是由於最終一致性而可能遇到的錯誤代碼範例。
+ `InvalidInstanceID.NotFound`

  如果您成功執行 `RunInstances`命令，然後立即使用 回應中提供的執行個體 ID 執行另一個命令`RunInstances`，則可能會傳回`InvalidInstanceID.NotFound`錯誤。這並不表示執行個體不存在。

  某些可能受影響的特定命令包括：
  + `DescribeInstances`：若要確認執行個體的實際狀態，請使用指數退避演算法執行此命令。
  + `TerminateInstances`：若要確認執行個體的狀態，請先使用指數退避演算法執行 `DescribeInstances`命令。
**重要**  
如果您在執行 後收到`InvalidInstanceID.NotFound`錯誤`TerminateInstances`，這並不表示執行個體已終止或將終止。您的執行個體可能仍在執行中。這就是為什麼首先使用 確認執行個體的狀態很重要`DescribeInstances`。
+ `InvalidGroup.NotFound`

  如果您成功執行 `CreateSecurityGroup`命令，然後立即使用 回應中提供的安全群組 ID 執行另一個命令`CreateSecurityGroup`，則可能會傳回`InvalidGroup.NotFound`錯誤。若要確認安全群組的狀態，請使用指數退避演算法執行 `DescribeSecurityGroups`命令。
+ `InstanceLimitExceeded`

  您已請求超過目前執行個體限制允許指定執行個體類型的執行個體數量。如果您快速啟動和終止執行個體，您可能會意外達到此限制，因為終止的執行個體在終止之後會計入執行個體限制一段時間。