跳至內容

如何解決 CloudFormation 堆疊的「Resource already exists in the stack」錯誤?

1 分的閱讀內容
0

我想疑難排解 AWS CloudFormation 中堆疊的「Resource already exists in the stack」錯誤。

簡短說明

每個資源都有唯一的實體 ID,且對於 CloudFormation 中定義的大多數資源,您無法重複使用該實體 ID。

如果您建立堆疊,且資源的名稱和數值與另一個資源相同,則 CloudFormation 無法區分這些資源。接著,您會收到「Resource already exists in stack」錯誤訊息。此外,如果 AWS 帳戶或 AWS 區域中,存在具有相同實體 ID 但非由 CloudFormation 定義或管理的資源,您也可能會收到此錯誤。

若要解決此問題,請將失敗資源的名稱變更為唯一名稱,或者不要為該資源定義名稱。如果您不定義名稱,則 CloudFormation 在建立資源時會產生一個唯一名稱。此唯一名稱不會與您現有的資源衝突。

解決方法

**注意:**對於存在於不同堆疊中或由其他 AWS 服務建立的現有資源相關錯誤,您可以使用以下解決方法。例如,若 Amazon Simple Queue Service (Amazon SQS) 佇列具有已存在的識別碼,您可能會收到此錯誤。

檢查您的資源名稱

在包含失敗資源的 CloudFormation 範本中,檢查其他明確宣告的資源是否與您失敗的資源具有相同名稱。

在以下範例中的堆疊失敗,因為每個 AWS Identity and Access Management (IAM) ManagedPolicy 資源都具有相同的 FinalS3WritePolicy 名稱:

S3DeletePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName:
        Fn::Join:
        - _
        - - FinalS3WritePolicy
      - Ref: EnvType
      PolicyDocument:
........
........
S3WritePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName:
        Fn::Join:
        - _
        - - FinalS3WritePolicy
          - Ref: EnvType
      PolicyDocument:
........
........

更新重複資源的名稱

更新具有重複名稱的資源名稱。例如,將第一次出現的 FinalS3WritePolicy 變更為 FinalS3DeletePolicy。或者,移除該名稱。

在以下範例中,堆疊 A 成功,因為每個 IAM ManagedPolicy 資源都具有唯一名稱 FinalS3DeletePolicyFinalS3WritePolicy。堆疊 B 成功,因為這兩個 ManagedPolicyName 屬性皆未設定名稱值。建立資源時,CloudFormation 會自動為堆疊 B 中的每個 IAM ManagedPolicy 資源產生唯一名稱。

堆疊 A 範例:

S3DeletePolicy:  
    Type: AWS::IAM::ManagedPolicy  
    Properties:  
      ManagedPolicyName:  
        Fn::Join:  
        - _  
        - - FinalS3DeletePolicy  
          - Ref: EnvType  
      PolicyDocument:  
........  
........  
S3WritePolicy:  
    Type: AWS::IAM::ManagedPolicy  
    Properties:  
      ManagedPolicyName:  
        Fn::Join:  
        - _  
        - - FinalS3WritePolicy  
          - Ref: EnvType  
      PolicyDocument:  
........  
........

堆疊 B 範例:

S3DeletePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........
S3WritePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........
AWS 官方已更新 7 個月前