如何防止 CloudFormation 中出現「速率超出」錯誤?

上次更新日期:2022 年 4 月 12 日

我在使用 AWS CloudFormation 時,有時會收到「速率超出」錯誤。如何防止此錯誤發生?

簡短描述

當對 AWS 服務的 API 呼叫超過允許的最大 API 請求數,並且 API 呼叫受到調節時,便會發生速率超出錯誤。通常,這些錯誤是暫時的,並且會隨著 API 呼叫的減少而自行解決。

為防止發生速率超出錯誤,您可以:

  • 實作指數退避
  • 一次建立或更新一個堆疊
  • 使用 DependsOn 屬性
  • 請求增加配額

解決方案

實作指數退避

使用 AWS API 端點時,實作指數退避以減少 API 呼叫的數量。

以下 DescribeStacks API 呼叫的虛擬程式碼範例設定為在特定時間後重試該 API 呼叫:

{
Make ‘DescribeStacks’ API call 

if throttled: wait 2 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 4 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 8 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 16 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 32 sec; Make ‘DescribeStacks’ API call 
}

一次建立或更新一個堆疊

同時建立或更新多個 CloudFormation 堆疊可能會導致同時進行許多 API 呼叫。為防止 API 呼叫超過允許的最大 API 請求數,請一次建立或更新一個堆疊。

使用 DependsOn 屬性

除非在資源之間定義了相依性,否則 CloudFormation 會同時建立和更新所有相關資源。DependsOn 屬性定義資源之間的相依性,可用於控制並行更新。

DependsOn 屬性可讓您指定何時建立或更新每個相依資源。例如,如果資源 B 依存於資源 A,那麼您可以指定在建立或更新資源 B 之前建立或更新資源 A。這樣可以限制同時進行 API 呼叫的數量,並減少調節的發生。您還可以將 DependsOn 屬性與巢套堆疊一起使用。

請求增加配額

如果上述解決方案無法解決問題,那麼您可以請求增加配額。在您請求增加配額之前,識別 API 呼叫以判斷超出呼叫速率的呼叫。

請在增加配額的請求中包含您的 AWS 區域、API 調節的時間範圍以及增加的原因。


此文章是否有幫助?


您是否需要帳單或技術支援?