跳至内容

如何解决 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 区域中存在并非由 CloudFormation 定义或管理的、但具有相同物理 ID 的资源,您也可能会收到此错误。

要解决此问题,请将失败资源的名称更改为唯一的名称,或者不为该资源定义名称。如果您未定义名称,则 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 官方已更新 5 个月前