如何解决 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(AWS 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 官方已更新 6 个月前