使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何解決 CloudFormation 錯誤訊息 "the resource already exists in the stack"?

1 分的閱讀內容
0

我想了解如何變更資源名稱或產生唯一名稱,以便解決 CloudFormation 錯誤訊息 "the resource already exists in the stack"。

簡短說明

當您建立具有相同名稱的資源,並設為與其他資源相同的值時,AWS CloudFormation 無法區分這些資源。接著您會收到錯誤訊息:"Resource already exists in stack." 每個資源都有唯一的實體 ID。您無法針對在 CloudFormation 中定義的大多數資源重複使用這個實體 ID。

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

解決方法

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

若要變更失敗資源的名稱或產生唯一名稱,請完成下列步驟:

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

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

    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:
    ........
    ........
  2. 更新任何具有重複名稱的資源名稱。例如,將 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 官方
AWS 官方已更新 8 個月前