「Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME」エラーの解決法を教えてください。

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

AWS CloudFormation スタックの更新もしくは削除を行おうとしましたが、「Export EXPORT_NAME cannot be updated as it is in use by STACK_NAME」というエラーが表示されます。 どうすればこのエラーを解決できますか?

簡単な説明

更新または削除するスタックから 1 つ以上のスタックがエクスポートした出力値をインポートしているため、このエラーが発生しました。他のスタックが値をインポートしている時は、スタックを更新または削除することはできません。

このエラーを解決するには、次のステップを実行してください

  1. どのスタックがご自身のスタックからエクスポートした出力値を参照しているかを調べます。
  2. ご自身のスタックからエクスポートされた出力値を参照するすべてのスタックテンプレートからインポートした値を更新します。次に、このインポートした値を参照するスタックを更新または削除します。

解決方法

ご自身のスタックからエクスポートされた出力値を参照するスタックを特定する

エクスポートされた出力値を参照するスタックを確認するには、AWS コマンドラインインターフェイス (AWS CLI)AWS Tools for PowerShell、または AWS CloudFormation コンソールを使用します。

AWS CLI:

1.    エクスポートされたすべての出力値を一覧表示するには、次のコマンドを実行します。

aws cloudformation list-exports

2.    エクスポートされた出力値をインポートしているすべてのスタックを一覧表示するには、次のコマンドを実行します。

aws cloudformation list-imports --export-name EXPORT_NAME

注: EXPORT_NAME の覧をエクスポートされた出力値の名前に置き換えます。

AWS Tools for PowerShell:

1.    エクスポートされたすべての出力値を一覧表示するには、次のコマンドを実行します。

Get-CFNExport

2.    エクスポートされた出力値をインポートしているすべてのスタックを一覧表示するには、次のコマンドを実行します。

Get-CFNImportList -ExportName EXPORT_NAME

注: EXPORT_NAME の覧をエクスポートされた出力値の名前に置き換えます。

AWS CloudFormation コンソール :

1.    [AWS CloudFormation コンソール] を開きます。

2.    [CloudFormation] メニューから、 [Exports★] を選択します。

3.    [Export Name★] で、ご自身のスタックからエクスポートされた出力値の名前を選択します。

4.    [Imports★] で、ご自身のスタックからエクスポートされた出力値をインポートしているスタックを選択します。

スタックからエクスポートされた出力値を参照する、すべてのスタックテンプレートからインポートされた値を更新する

1.    AWS CloudFormationテンプレートで、スタックのエクスポートされた出力値を参照するすべてのスタックについて、組み込み関数をインポートした値に置き換えます。

たとえば、次の JSON および YAML テンプレートでは、組み込み関数 Fn::ImportValue および !ImportValue は、どちらもインポート値 arn:aws:s3:::sample に置き換えられます。

組み込み関数を持つ JSON テンプレート

{
    "Parameters": {
       "parameterName": {
          "Type": "String"
       }
    },
    "Resources": {
       "testParameter": {
          "Type": "AWS::SSM::Parameter",
          "Properties": {
             "Description": "Test SSM Parameter",
             "Name": { "Ref": "parameterName" },
             "Type": "String",
             "Value": { "Fn::ImportValue": "sample-s3-bucket:Bucket-arn" }
          }
       }
    }
 }

インポートした値を持つ JSON テンプレート

{
    "Parameters": {
       "parameterName": {
          "Type": "String"
       }
    },
    "Resources": {
       "testParameter": {
          "Type": "AWS::SSM::Parameter",
          "Properties": {
             "Description": "Test SSM Parameter",
             "Name": { "Ref": "parameterName" },
             "Type": "String",
             "Value": "arn:aws:s3:::sample"
          }
       }
    }
 }

組み込み関数を持つ YAML テンプレート

Parameters:
  parameterName:
    Type: String
Resources:
  testParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Description: Test SSM Parameter
      Name: !Ref parameterName
      Type: String
      Value: !ImportValue sample-s3-bucket:Bucket-arn

インポートした値を持つ YAML テンプレート

Parameters:
  parameterName:
    Type: String
Resources:
  testParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Description: Test SSM Parameter
      Name: !Ref parameterName
      Type: String
      Value: arn:aws:s3:::sample

2.    スタックを更新 または 削除 します。