如何解決 CloudFormation 中的變更集錯誤?

3 分的閱讀內容
0

當我嘗試將資源匯入 AWS CloudFormation 堆疊時,我收到錯誤訊息。

解決方法

根據您的錯誤類型,完成相關部分的步驟對錯誤進行疑難排解。

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

變更集錯誤

錯誤: "There was an error creating this change set. As part of the import operation, you cannot modify or add [Outputs]"

將資源匯入堆疊時,就會發生此錯誤。當使用透過 CloudFormation 主控台輸出的資源匯入範本建立新的堆疊時,也會發生這種情況。請依照下列步驟對錯誤進行疑難排解:

  • 將最新 CloudFormation 範本的 Outputs (輸出) 區段與您的堆疊目前正在使用的範本進行比較。兩個範本中的 Outputs (輸出) 區段必須相同。如果值不相同,請更新最新範本,以符合目前範本 Outputs (輸出) 區段中的值和輸出。
    **重要事項:**匯入操作不能包含對 Outputs(輸出) 中 Logical ID (邏輯 ID)、Description(說明)、Value(值)、Export (匯出) 和其他屬性的新增及修改。
  • 匯入操作完成後,使用 Outputs (輸出) 組態中所需的變更更新堆疊。

堆疊屬性的驗證錯誤

錯誤: "An error occurred (ValidationError) when calling the CreateChangeSet operation: As part of the import operation, you cannot modify or add [Tags]"

當您使用 AWS CLI 或 AWS SDK 建立包含已修改或已新增堆疊屬性的匯入類型變更集時,就會發生此錯誤。

  • 確認所包含用於變更集建立操作的堆疊屬性與目前的堆疊屬性值同步。
    **重要事項:**請勿更新或新增任何新的屬性值。
  • 匯入資源之後,在單獨的更新作業中更新您的屬性。

修改的資源錯誤

錯誤: "There was an error creating this change set.You have modified resources [ResourceName] in your template that are not being imported.Update, create or delete operations cannot be executed during import operations."

當您在資源匯入操作期間修改現有資源時,就會發生此錯誤。在匯入操作期間,您無法建立、更新和刪除資源。請依照下列步驟對錯誤進行疑難排解:

  • 建立更新類型變更集,而不是匯入類型變更集。這會顯示資源變更的來源。
  • 使用與現有資源相同的 Resources (資源) 規格,並僅新增要匯入至範本的適當資源。

匯入清單的資源錯誤

當您使用 AWS CLI 或 AWS SDK 建立匯入類型變更集時,通常會發生下列錯誤。

錯誤: "An error occurred (ValidationError) when calling the CreateChangeSet operation: Resources [<ResourceName>] is missing from ResourceToImport list"

在 CloudFormation 範本中,驗證您是否正在將實體 ID 傳遞至想要匯入至堆疊的所有資源的 ResourceToImport 屬性。

錯誤: "An error occurred (ValidationError) when calling the CreateChangeSet operation: Must Provide at least one resource to import"

驗證您是否在 AWS CLI 命令中包含 --resources-to-import,或在 API 呼叫中包含 ResourceToImport。此外,請務必列出要匯入的所有資源。
**重要事項:**為了匯入,您必須將實體 ID 傳遞給所有新資源。

因 IAM 功能造成的錯誤

"Error: Failed to create changeset for the stack: <StackName>, ex: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state: For expression "Status" we matched expected path: "FAILED" Status: FAILED.Reason: Requires capabilities: [CAPABILITY_NAMED_IAM]"

請依照下列步驟對錯誤進行疑難排解:

  1. 開啟 AWS CloudFormation 主控台
  2. 在 Create Stack (建立堆疊) 或 Update Stack (更新堆疊) 精靈的 Review (檢閱) 頁面上,選擇I acknowledge that this template may create IAM resources (我確認此範本可能會建立 IAM 資源)。
  3. 在 AWS CLI 中,當您使用 create-stackupdate-stack 命令時,請為 --capabilities 參數指定 CAPABILITY_IAM or CAPABILITY_NAMED_IAM 值。
    **注意:**如果您的範本包含 AWS Identity and Access Management (IAM) 資源,您可以指定任一功能。如果您的範本包含 IAM 資源的自訂名稱,則必須指定 CAPABILITY_NAMED_IAM。

更新堆疊作業期間「沒有提交變更」造成的錯誤

錯誤: "The submitted information didn't contain changes.Submit different information to create a change set" or "An error occurred (ValidationError) when calling the UpdateStack operation: No updates are to be performed."

當您在更新堆疊作業期間使用相同的堆疊範本時,就會發生此錯誤。或者,當您不修改資源屬性,而只嘗試修改參數值或堆疊描述時,也會發生此錯誤。CloudFormation 不會將其視為變更,變更集建立將會失敗。

ExecuteChangeSet API 呼叫錯誤

錯誤: "Either DisableRollback or OnStackFailure can be specified, but not both.Validation error as OnStackFailure parameter was specified during CreateChangeSet."

您可以指定 OnFailureDisableRollback,但不可同時指定兩者。若要解決此問題,請移除命令中的 onStackFailure 屬性來建立新變更集,然後執行它。或者,開啟回滾選項,然後執行目前的變更集以更新堆疊。

由於主控台用於變更集的輸入與格式不相符所導致的錯誤

錯誤: "Given input did not match expected format"

這個錯誤通常是由於 CloudFormation 範本中的語法問題而發生的。檢查範本語法是否有任何聯結函數格式、額外的字元或額外的雙引號。此外,請檢閱 AWS System Manager Agent (SSM Agent) 參數等資源。如需解決語法錯誤的詳細資訊,請參閱如何解決 CloudFormation 中的範本驗證或範本格式錯誤?

相關資訊

從現有資源建立堆疊

將現有資源匯入堆疊

支援匯入和偏離偵測操作的資源

使用 CloudFormation 管理現有資源

確認 AWS CloudFormation 範本中的 IAM 資源

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