如何解決 CloudFormation 中的「找不到名為 XYZ 的匯出」錯誤?

2 分的閱讀內容
0

當我在堆疊中使用 Fn::ImportValue 時,會在 AWS CloudFormation 中收到「找不到名為 XYZ 的匯出」錯誤。

簡短描述

如果您在 CloudFormation 中建立使用匯入或匯出值的堆疊引用,則必須執行下列動作:

  • 在您要匯出值的堆疊中,使用 CloudFormation 範本的輸出區段中的**匯出:**旗標。
  • 在您要引用匯出值的堆疊中,使用 Fn::ImportValue

在下列情況下,您可能會收到「找不到名為 XYX 的匯出」錯誤:

  • 您在巢狀堆疊中使用 Fn::ImportValue
  • 匯出的值不在您要匯入值的相同 AWS 區域或相同 AWS 帳戶中。
  • 匯出的值在堆疊匯入之前未建立或發佈。
  • 您在匯入堆疊中使用了不正確的匯出名稱。

根據您遇到的情況,選擇下列其中一種解決方法。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本

您在巢狀堆疊中使用 Fn::ImportValue

根據預設,CloudFormation 會與巢狀堆疊平行建立子堆疊。如果子堆疊彼此平行建立,並且一個正在匯入另一個的輸出,則堆疊建立可能會失敗。匯出值存在無法及時由其他子堆疊匯入的風險。

若要解決這個問題,請使用 DependsOn 屬性為使用 Fn::ImportValue 的堆疊建立明確的相依性。僅可在匯出值的子堆疊後建立使用 Fn:ImportValue 的子堆疊。

在下列巢狀堆疊範例中,ChildStack01 匯出輸出部分的值,而 ChildStack02 使用 Fn::ImportValueChildStack01 匯入值。您可以根據下列範例中的 YAML 範本對 ChildStack02 使用 DependsOn

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::RefFn::GetAtt 引用目前範本中的值。

匯出的值不在您要匯入值的相同 AWS 區域或相同 AWS 帳戶中

跨堆疊引用僅適用於單一帳戶和區域。位於相同帳戶和區域中的其他堆疊只能匯入已匯出的值。

若要解決此問題,請在使用 Fn::ImportValue 建立堆疊之前,先完成驗證匯出和匯入堆疊的堆疊組態一節中的步驟。

匯出的值在堆疊匯入之前未建立或發佈

對於非巢狀堆疊,必須部署匯出值的堆疊。堆疊必須處於 Create_CompleteUpdate_Complete 狀態,然後才可建立要匯入的堆疊。

若要解決此問題,請在使用 Fn::ImportValue 建立堆疊之前,先完成驗證匯出和匯入堆疊的堆疊組態一節中的步驟。

您在匯入堆疊中使用了不正確的匯出名稱

  1. 確認匯出名稱已列在您的帳戶中。
  2. 將匯出名稱從一個堆疊匯入至另一個堆疊時,請確認在兩個堆疊中使用完全相同的匯出名稱。
  3. 在使用 Fn::ImportValue 建立堆疊之前,先完成驗證匯出和匯入堆疊的堆疊組態一節中的步驟。

驗證匯出和匯入堆疊的堆疊組態

您可以使用 CloudFormation 主控台或 AWS CLI 來確認匯出值存在於相同的區域和帳戶中。

使用 CloudFormation 主控台:

  1. 開啟 CloudFormation 主控台
  2. 從導覽窗格中,選擇匯出
  3. 確認匯出值已列在主控台中。

使用 AWS CLI:

1.    若要列出可用的匯出,請執行下列命令:

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

**注意:**將 us-east-1 替換為您的區域。

2.    在輸出中,確認匯入和匯出堆疊的名稱屬性相同。輸出會類似於以下內容:

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 年前