AWS CloudFormation で発生する「Custom Named Resource already exists in stack」エラーの解決方法を教えてください。

最終更新日: 2019 年 5 月 23 日

AWS CloudFormation スタックでのリソース作成が失敗し、リソースはスタックに既に存在しているという内容のエラーメッセージが表示されます。このエラーの解決方法を教えてください。

簡単な説明

同じ値に設定された同じカスタム名のリソースが複数ある場合、AWS CloudFormation からこのエラーが送られます。カスタム名を持つそれぞれのリソースには、ユニークな物理 ID が 1 つあります。AWS CloudFormation で定義されているリソースでは、ほとんどの場合、物理 ID を再利用することはできません。

再利用あるいは失敗したリソースをユニークな名前に変更することで、このエラーを解決できます。または、そのリソースにカスタム名を定義しないという方法もあります。カスタム名を定義しない場合は、AWS CloudFormation によって、リソースの作成時にユニークな名前が生成されます。このユニークな名前は、既存のリソースと競合することはありません。

解決方法

1.    失敗したリソースを含む AWS CloudFormation テンプレートで、他の明示的に宣言されたリソースに、失敗したリソースと同じ名前を付けられていないかを確認します。

次の例では、AWS Identity and Access Management (IAM) の各 ManagedPolicy リソース (ManagedPolicyName) に、同じカスタム名 (FinalS3WritePolicy) が付けられているのでスタックは失敗します。

# This stack will fail
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 に変更します。または、カスタム名を削除することもできます。

次の例では、各 IAM ManagedPolicy リソースにユニークなカスタム名 (FinalS3DeletePolicy および FinalS3WritePolicy) が付けられているので、スタック A は成功します。また、スタック B ではどちらの ManagedPolicyName プロパティにもカスタム名の値が設定されていないため成功します。スタック B では、各 IAM ManagedPolicy リソースのためのユニークな名前を、そのリソース作成時に AWS CloudFormation が自動生成します。

スタック A:

# This stack will Succeed as unique names are set:
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:

# This stack will Succeed as no names are set     
S3DeletePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........
S3WritePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........

注: この記事の解決方法は、AWS CloudFormation の外部に作成した他のスタックまたはリソース内で発生する、同様のエラーにも適用することができます。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合