使用 CloudFormation 實作 Lambda 支援的自訂資源的部份最佳實務是什麼?

1 分的閱讀內容
0

使用 AWS CloudFormation 實作 AWS Lambda 支援的自訂資源時,我想要遵循最佳實務。

解決方案

使用 AWS CloudFormation 實作 AWS Lambda 支援的自訂資源時,請考慮下列最佳實務。

建置自訂資源以報告、記錄和處理失敗

例外情況可能會導致函數程式碼退出而不傳送回應。CloudFormation 需要 HTTPS 回應來確認操作成功或失敗。未報告的例外情況會導致 CloudFormation 等到操作逾時後再開始堆疊復原。如果在復原期間再次發生例外情況,CloudFormation 會再次等待操作逾時,最後復原失敗。在此期間,您的堆疊無法使用。

為避免逾時問題,請在您為 Lambda 函數建立的程式碼中包含下列內容:

  • 處理例外情況的邏輯
  • 記錄失敗情境以進行疑難排解的能力
  • 回傳確認操作失敗的 HTTPS 回應給 CloudFormation 的能力
  • 可讓您擷取並處理不完整執行的無效字母佇列
  • 用於將回應傳送至 CloudFormation 的 cfn-response 模組

設定合理的逾時時間,並回報即將逾時

如果操作未在其定義的逾時期間內執行,則函數會引發例外情況,且不會將任何回應傳送至 CloudFormation。

若要避免此問題,請考慮下列事項:

  • 將 Lambda 函數的逾時值調高,以足夠因應處理時間和網路條件的變化。
  • 在函數中設定計時器,以在函數即將逾時的情況下將錯誤回應給 CloudFormation。計時器有助於避免自訂資源延遲。

根據建立、更新和刪除事件建置

根據堆疊動作,CloudFormation 會傳送建立更新刪除事件給函數。由於每個事件的處理方式不同,因此請確認在收到三種事件類型中的其中一種時,都不會出現意外行為。

如需詳細資訊,請參閱自訂資源請求類型

了解 CloudFormation 如何識別和取代資源

當更新開始取代實體資源時,CloudFormation 會將 Lambda 函數傳回的 PhysicalResourceId 和先前的 PhysicalResourceId 進行比較。如果 ID 不同,則 CloudFormation 會假設資源已取代為新的實體資源。

但是,為允許潛在復原,不會隱含移除舊資源。成功完成堆疊更新時,會送出刪除事件請求並以舊的實體 ID 作為識別碼。如果堆疊更新失敗且發生復原,則會在刪除事件中傳送新的實體 ID。

使用 PhysicalResourceId 來唯一識別資源,以便在收到刪除事件時,在取代期間只會刪除正確的資源。

使用等冪性設計你的函數

等冪函數可以使用相同的輸入重複執行多次,結果與僅執行一次的結果相同。等冪可確保重試、更新和復原不會建立重複的資源或發生錯誤。

例如,CloudFormation 會叫用您的函數來建立資源,但沒有收到已成功建立資源的回應。CloudFormation 可能會再次叫用該函數,並建立第二個資源。然後,第一個資源可能會變成孤兒。

實作處理常式以正確處理復原

當堆疊操作失敗時,CloudFormation 會嘗試復原所有資源並將其還原為先前的狀態。這會導致不同的行為,具體取決於更新是否導致資源取代。

若要確定已成功完成復原,請考慮下列事項:

  • 在收到刪除事件之前,請避免隱含移除舊資源。
  • 使用 GitHub 網站上的 Accustom自訂資源輔助程式,協助您在 CloudFormation 中使用自訂資源時遵循最佳實務。

相關資訊

自訂資源

AWS 官方
AWS 官方已更新 2 年前