AWS CloudFormation の「XYZ という名前のエクスポートが見つかりません」というエラーの解決方法を教えてください

最終更新日: 2020 年 6 月 12 日

スタックで Fn::ImportValue を使用すると、AWS CloudFormation で「XYZ という名前のエクスポートが見つかりません」エラーが表示されます。

簡単な説明

インポート値またはエクスポート値を使用するスタックリファレンスを AWS CloudFormation で作成する場合は、以下を実行する必要があります。

  • 値をエクスポートするスタックで、AWS CloudFormation テンプレートの [出力] セクションの [エクスポート:] フラグを使用します。
  • エクスポートされた値を参照するスタックで Fn::ImportValue を使用します。

このエラーは 次のシナリオで受け取ることがあります。

  • ネストされたスタックで Fn::ImportValue を使用しています。
  • エクスポートされた値が、値をインポートしているのと同じ AWS リージョンまたは同じアカウントに存在しません。
  • エクスポートされた値は、スタックによってインポートされる前に作成または発行されることはありません。
  • インポートスタックで正しくないエクスポート名を使用しました。

発生しているシナリオに基づいて、次の解決策のいずれかを選択します。

解決方法

ネストされたスタックで Fn::ImportValue を使用しています

ネストされたスタックでは、AWS CloudFormation はデフォルトで子スタックを並列に作成します。1 つの子スタックが他の子スタックから出力をインポートする場合、スタックの作成は失敗することがあります。AWS CloudFormation が子スタックを並行して作成する場合、エクスポート値は他の子スタックによってインポートされるまでに間に合わなくなるリスクがあります。

エラーを解決するには DependsOn 属性を使用して エクスポートされた出力を持つスタックで Fn::ImportValue を使用しているスタックの明示的な依存関係を作成します。

例えば 次のネストされたスタックを参照してください。ChildStack01 は [出力] セクションの値をエクスポートし、ChildStack02Fn::ImportValue を使用して ChildStack01 から値をインポートします。次の例に基づいて ChildStack02DependsOn を使用できます。

{   "AWSTemplateFormatVersion": "2010-09-09",
   "Resources": {
       "ChildStack01": {
           "Type": "AWS::CloudFormation::Stack",
           "Properties": {
               "TemplateURL": "https://s3.amazonaws.com/cloudformation-templates-us-east-1/VPC.template",
               "TimeoutInMinutes": "60"
           }
       },
       "ChildStack02": {
           "Type": "AWS::CloudFormation::Stack",
           "DependsOn": "ChildStack01",
           "Properties": {
               "TemplateURL": "https://s3.amazonaws.com/cloudformation-templates-us-east-1/Subnet.template",
               "TimeoutInMinutes": "60"
           }
       }
   }
}

ヒント: クロススタックリファレンスの場合は、Fn::ImportValue を使用して別のテンプレートから値をインポートします。ネストされたスタックの場合、Fn::Ref および Fn::GetAtt を使用して 現在のテンプレートの値を参照します。

エクスポートされた値が 値をインポートしているのと同じ AWS リージョンまたは同じアカウントに存在しない

クロススタックリファレンスは 単一の AWS アカウントとリージョン内でのみ適用されます。同じ AWS アカウントおよびリージョンにある他のスタックは エクスポートされた値のみをインポートできます。

この問題を解決するには Fn::ImportValue を使用してスタックを作成する前に [スタックのエクスポートとインポートに関するスタック設定の確認] セクションのステップを完了します。

エクスポートされた値は、スタックによってインポートされる前に作成または発行されない

ネストされていないスタックの場合、値をエクスポートするスタックをデプロイする必要があります。インポートするスタックを作成する前に スタックの状態が Create_Complete または Update_Complete になっている必要があります。

この問題を解決するには Fn::ImportValue を使用してスタックを作成する前に、[スタックのエクスポートとインポートに関するスタック設定の確認] セクションのステップを完了します。

インポートスタックで正しくないエクスポート名を使用しました

1.    エクスポート名が AWS アカウントに表示されていることを確認します。

2.    1 つのスタックから別のスタックにエクスポート名をインポートする場合は、両方のスタックでまったく同じエクスポート名を使用していることを確認します。

3.    Fn::ImportValue を使用してスタックを作成する前に [スタックのエクスポートとインポートに関するスタック設定の確認]  セクションのステップを完了します。

エクスポートおよびインポートスタックのスタック設定を確認する

注: AWS Command Line Interface (AWS CLI) のコマンド実行時にエラーが発生した場合は AWS CLI の最新バージョンを必ず使用するようにしてください

AWS CloudFormation コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、エクスポート値が同じリージョンとアカウントに存在することを確認できます。

CloudFormation コンソールを使用して、以下の操作を実行します。

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

2.    ナビゲーションペインで、[エクスポート] を選択します。

3.    エクスポート値がコンソールに表示されていることを確認します。

AWS CLI を使用して、以下を実行します。

1.    使用可能なエクスポートを表示するには、次のコマンドを実行します。

aws cloudformation list-exports --region us-east-1

注意: us-east-1 をお客様のリージョンに置き換えます。

2.    出力で、[名前] プロパティがインポートスタックとエクスポートスタックでまったく同じであることを確認します。この出力は次のようになります。

{
    "Exports": [
        {
            "ExportingStackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
            "Name": "private-vpc-subnet-a",
            "Value": "subnet-01a234bcdefghij56"
        }
}

重要:スタックでインポートおよびエクスポート値を使用する場合は、次の点を考慮してください。スタックが出力値をインポートすると、その出力値をエクスポートしているスタックを削除したり、エクスポートされた出力値を変更したりすることはできません。エクスポートするスタックを削除するか、出力値を変更する前に すべてのインポートを削除する必要があります。エクスポート名はリージョン内で独自でなければなりません。


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


請求に関するサポートまたは技術サポートが必要ですか?