CloudFormation の「No Export named XYZ found」(XYZ という名前のエクスポートが見つかりません) というエラーを解決するにはどうすればよいですか?

所要時間2分
0

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

簡単な説明

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

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

次のシナリオでは、「No Export named XYX found」(XYX という名前のエクスポートが見つかりません) というエラーが表示されることがあります。

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

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

解決方法

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

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

デフォルトでは、CloudFormation はネストされたスタックと並行して子スタックを作成します。子スタックが互いに並行して作成され、ある子スタックが別の子スタックから出力をインポートしている場合、スタックの作成は失敗する可能性があります。エクスポート値は、他の子スタックによってインポートされるまでに使用可能となっていないリスクがあります。

この問題を解決するには、DependsOn 属性を使用して、Fn::ImportValue を使用するスタックの明示的な依存関係を作成します。Fn:ImportValue を使用している子スタックは、値をエクスポートする子スタックの後にのみ作成されます。

次のネストスタックの例では、ChildStack01[Outputs] (出力) セクションの値をエクスポートし、ChildStack02Fn::ImportValue を使用して ChildStack01 から値をインポートします。次のサンプル YAML テンプレートに基づいて 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 アカウントにない

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

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

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

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

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

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

  1. エクスポート名がアカウントに表示されていることを確認します。
  2. 1 つのスタックから別のスタックにエクスポート名をインポートする場合は、両方のスタックでまったく同じエクスポート名を使用していることを確認します。
  3. Fn::ImportValue を使用してスタックを作成する前に、[Verify the stack configuration of the export and import stacks] (スタックのエクスポートとインポートに関するスタック設定の確認) セクションのステップを完了します。

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

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

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

  1. CloudFormation コンソールを開きます。
  2. ナビゲーションペインで、[Exports] (エクスポート) を選択します。
  3. エクスポート値がコンソールに表示されていることを確認します。

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

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

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

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

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

aws cloudformation list-exports --region us-east-1 --output yaml
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

重要: スタックでインポートおよびエクスポート値を使用する場合は、次の点を考慮してください。スタックが出力値をインポートした後、その出力値をエクスポートしているスタックを削除したり、エクスポートされた出力値を変更したりすることはできません。エクスポートするスタックを削除するか、出力値を変更する前に すべてのインポートを削除する必要があります。エクスポート名はリージョン内で一意である必要があります。回避策として、AWS Systems Manager Parameter Store のパラメータを使用して CloudFormation スタック間で値を共有できます。


AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ