使用 CloudFormation 實作 Lambda 支援之自訂資源的部份最佳實務有哪些?

1 分的閱讀內容
0

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

解決方案

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

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

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

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

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

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

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

若要避免此錯誤,請執行下列操作:

  • 將 Lambda 函數的逾時值調高至足以因應處理時間和網路條件的變化。
  • 在函數中設定計時器,以在函數即將逾時時,將錯誤回應給 CloudFormation。

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

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

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

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

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

但是,為了允許進行可能的復原,CloudFormation 不會移除舊資源。堆疊更新完成後,CloudFormation 會傳送一個刪除事件請求,其中包含舊實體識別碼。如果堆疊更新失敗且發生復原,則 CloudFront 會在刪除事件中傳送新的實體識別碼。

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

使用冪等性設計你的函數

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

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

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

堆疊作業失敗時,CloudFormation 會嘗試將所有資源返回其先前的狀態。此動作會導致不同的行為,具體取決於更新是否導致資源取代。

若要確保 CloudFront 可以完成復原,請執行下列動作:

相關資訊

自訂資源

AWS 官方
AWS 官方已更新 4 個月前