AWS CloudFormation の「エクスポート EXPORT_NAME は、STACK_NAME により使用されているため更新できません」というエラーを解決するにはどうすればよいですか?

最終更新日: 2021 年 2 月 16 日

AWS CloudFormation スタックの更新もしくは削除を行おうとしましたが、「エクスポート EXPORT_NAME は、STACK_NAME により使用されているため更新できません」というエラーが表示されます。

簡単な説明

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

このエラーを解決するには、次の手順を実行してください

  1. エクスポートされた出力値をインポートするスタックを検索します。
  2. エクスポートされた値をインポートするスタックの場合は、スタックテンプレートを更新して、Import ステートメントを実際の出力値に置き換えます。
  3. 変更されたテンプレートを使用して、インポートスタックを更新します。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください

エクスポートされた出力値をインポートしているスタックを検索する

エクスポートされた出力値を参照しているスタックを確認するには、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] (インポート) で、ご自身のスタックからエクスポートされた出力値をインポートしているスタックを選択します。

スタックテンプレートを更新して、Import ステートメントを実際の出力値に置き換えます。

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.    スタックを更新 または 削除 します。

インポートの関連付けが解除されたので、値をエクスポートしたスタックを更新または削除できます。