我在使用 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 調節的時間範圍以及增加的原因。