如何解決 AWS CloudFormation 中的「自訂具名資源已存在於堆疊中」錯誤?

1 分的閱讀內容
0

我的 AWS CloudFormation 堆疊無法建立資源,而且我收到錯誤訊息,告知我的資源已存在於堆疊中。如何解決此錯誤?

簡短說明

當您建立具有相同名稱的自訂具名資源,並設為與其他資源相同的值時,CloudFormation 無法區分這些資源。接著您會收到錯誤訊息:「自訂具名資源已存在於堆疊中」。 每個自訂具名資源都有唯一的實體 ID。您無法針對在 CloudFormation 中定義的大多數資源重複使用實體 ID。

您可以將失敗資源的名稱變更為唯一名稱來解決此錯誤。或者,您可以選擇不定義該資源的自訂名稱。如果您不設定自訂名稱,則 CloudFormation 會在建立資源時產生唯一的名稱。此唯一名稱不會與您現有的資源衝突。

解決方案

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

在下列範例中,堆疊會失敗,因為每個 AWS Identity and Access Management (IAM) ManagedPolicy 資源 (ManagedPolicyName) 都具有相同的自訂名稱 (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:
........
........

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:
........
........

**注意事項:**您可以將本文章中的解決方案,用於涉及存在於不同堆疊中的資源或在 CloudFormation 以外建立資源的相關錯誤。


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