

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 參考在另一個 CloudFormation 堆疊中的資源輸出
<a name="walkthrough-crossstackref"></a>

此逐步解說說明如何在一個 CloudFormation 堆疊中參考另一個堆疊的輸出內容，以建立更模組化且可重複使用的範本。

您可以在個別堆疊中建立相關 AWS 資源，而不是將所有資源包含在單一堆疊中。然後，您可以從其他堆疊參考必要的資源輸出。透過將跨堆疊參考限制在輸出，您可以控制堆疊中由其他堆疊參考的部分。

例如，您可能有一個使用 VPC、安全群組，以及公有 Web 應用程式子網路的網路堆疊，以及另一個公有 Web 應用程式堆疊。若要確保 Web 應用程式使用來自網路堆疊的安全群組和子網路，您可以建立跨堆疊參考，允許 Web 應用程式堆疊參考網路堆疊的資源輸出。使用跨堆疊參考，Web 應用程式堆疊的擁有者便不需要建立或維護網路規則或資產。

若要建立跨堆疊參考，請使用 `Export` 輸出欄位，標記要匯出的資源輸出值。然後，使用 `Fn::ImportValue` 內部函數匯入值。如需詳細資訊，請參閱[從部署的 CloudFormation 堆疊取得匯出的輸出](using-cfn-stack-exports.md)。

**注意**  
CloudFormation 是免費服務。不過，您需要按目前費率支付堆疊中包含 AWS 的資源費用。如需 AWS 定價的詳細資訊，請參閱[各項產品的詳細資訊頁面](https://aws.amazon.com/)。

**Topics**
+ [使用範例範本建立網路堆疊](#walkthrough-crossstackref-create-vpc-stack)
+ [使用範例範本建立 Web 應用程式堆疊](#walkthrough-crossstackref-create-ec2-stack)
+ [驗證堆疊是否按設計運作](#walkthrough-crossstackref-verify)
+ [疑難排解 AMI 映射錯誤](#walkthrough-crossstackref-troubleshooting-ami)
+ [清除您的資源](#walkthrough-crossstackref-clean-up)

## 使用範例範本建立網路堆疊
<a name="walkthrough-crossstackref-create-vpc-stack"></a>

在您開始此演練前，請確認您已有使用下列所有服務的 IAM 許可：Amazon VPC、Amazon EC2 和 CloudFormation。

網路堆疊包含您會在 Web 應用程式堆疊中使用的 VPC、安全群組和子網路。除了這些資源之外，網路堆疊也會建立網際網路閘道及路由表，以啟用公有存取。

您必須在您建立 Web 應用程式堆疊前建立此堆疊。若您先建立 Web 應用程式堆疊，它將不會擁有安全群組或子網路。

堆疊範本可在以下 URL 中找到：[https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template](https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template)。若要查看堆疊建立的資源，請選擇連結，開啟範本。在 `Outputs` 區段中，您可以查看範例範本匯出的網路資源。匯出資源的名稱會加上堆疊名稱的字首，以在您從其他堆疊匯出網路資源時進行區別。當使用者匯入網路資源時，他們便可以指定要匯入哪些堆疊的資源。

**建立網路堆疊**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在**堆疊**頁面的右上角，選擇**建立堆疊**，並選擇**使用新資源 (標準)**。

1. 選擇**選擇現有範本**，然後在**指定範本**區段中選擇 **Amazon S3 URL**。

1. 對於 **Amazon S3 URL**，貼上下列 URL：**https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template**。

1. 選擇**下一步**。

1. 針對 **Stack name (堆疊名稱)**，輸入 **SampleNetworkCrossStack**，然後選擇 **Next (下一步)**。
**注意**  
記錄此堆疊的名稱。當您在啟動 Web 應用程式堆疊時，您將會需要堆疊名稱。

1. 選擇**下一步**。針對此演練，您不需要新增標籤或指定進階設定。

1. 確認堆疊名稱和範本 URL 正確，然後選擇 **Create stack (建立堆疊)**。

   CloudFormation 可能需要幾分鐘的時間來建立您的堆疊。等待所有資源成功建立，再繼續建立 Web 應用程式堆疊。

1. 若要監控進度，請檢視堆疊事件。如需詳細資訊，請參閱[監控堆疊進度](monitor-stack-progress.md)。

## 使用範例範本建立 Web 應用程式堆疊
<a name="walkthrough-crossstackref-create-ec2-stack"></a>

Web 應用程式堆疊會建立使用網路堆疊之安全群組和子網路的 EC2 執行個體。

您必須在與網路堆疊 AWS 區域 相同的 中建立此堆疊。

堆疊範本可在以下 URL 中找到：[https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template](https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template)。若要查看堆疊建立的資源，請選擇連結，開啟範本。在 `Resources` 區段中，檢視 EC2 執行個體的屬性。您可以使用 `Fn::ImportValue` 函數查看從另一個堆疊匯入網路資源的方式。

**建立 Web 應用程式堆疊**

1. 從**堆疊**頁面的右上角，選擇**建立堆疊**，並選擇**使用新資源 (標準)**。

1. 選擇**選擇現有範本**，然後在**指定範本**區段中選擇 **Amazon S3 URL**。

1. 對於 **Amazon S3 URL**，貼上下列 URL：**https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template**。

1. 選擇**下一步**。

1. 在 **Stack Name** (堆疊名稱) 中輸入 **SampleWebAppCrossStack**。在 **Parameters (參數)** 區段中，針對 **NetworkStackName** 參數使用預設值，然後選擇 **Next (下一步)**。

   範例範本會使用參數值指定要從哪個堆疊匯入值。

1. 選擇**下一步**。針對此演練，您不需要新增標籤或指定進階設定。

1. 確認堆疊名稱和範本 URL 正確，然後選擇 **Create stack (建立堆疊)**。

   CloudFormation 可能需要幾分鐘的時間來建立您的堆疊。

## 驗證堆疊是否按設計運作
<a name="walkthrough-crossstackref-verify"></a>

在堆疊建立之後，檢視其資源並注意執行個體 ID。如需檢視堆疊資源的詳細資訊，請參閱[在 CloudFormation 主控台中檢視堆疊資訊](cfn-console-view-stack-data-resources.md)。

若要驗證執行個體的安全群組和子網路，請在 [Amazon EC2 主控台](https://console.aws.amazon.com/ec2/)檢視執行個體的屬性。若執行個體使用來自 `SampleNetworkCrossStack` 堆疊的安全群組和子網路，表示您已成功建立跨堆疊參考。

使用主控台檢視堆疊輸出和範例網站 URL，驗證 Web 應用程式已在執行中。如需詳細資訊，請參閱[在 CloudFormation 主控台中檢視堆疊資訊](cfn-console-view-stack-data-resources.md)。

## 疑難排解 AMI 映射錯誤
<a name="walkthrough-crossstackref-troubleshooting-ami"></a>

若您收到錯誤，`Template error: Unable to get mapping for AWSRegionArch2AMI::[region]::HVM64` 範本不會包含您 AWS 區域的 AMI 映射。我們建議使用 Systems Manager 公有參數動態參考最新的 AMI，而非更新映射：

1. 從以下網址下載 `SampleWebAppCrossStack` 範本到您的本機電腦：https：//[https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template](https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template)。

1. 刪除整個 `AWSRegionArch2AMI` 映射區段。

1. 新增下列 Systems Manager 參數：

   ```
   "LatestAmiId": {
     "Description": "The latest Amazon Linux 2 AMI from the Parameter Store",
       "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>",
       "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
     }
   ```

1. 取代現有的 `ImageId` 參考：

   ```
   "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" } , "HVM64" ] }, 
   ```

   取代為：

   ```
   "ImageId": { "Ref": "LatestAmiId" },
   ```

   此參數會自動解析為您部署堆疊所在區域的最新 Amazon Linux 2 AMI。

   對於其他 Linux 發行版本，請使用對應的參數路徑。如需詳細資訊，請參閱《*AWS Systems Manager 使用者指南*》中的[探索參數存放區中的公有參數](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-finding-public-parameters.html)。

1. 將修改的範本上傳至您帳戶中的 S3 儲存貯體：

   ```
   aws s3 cp SampleWebAppCrossStack.template s3://amzn-s3-demo-bucket/
   ```

1. 建立堆疊時，指定您的 S3 範本 URL，而非範例 URL。

## 清除您的資源
<a name="walkthrough-crossstackref-clean-up"></a>

為了確保您不需要為不必要的服務支付費用，請刪除堆疊。

**刪除堆疊**

1. 在 CloudFormation 主控台中，選擇 `SampleWebAppCrossStack` 堆疊。

1. 選擇 **Actions (動作)**，然後選擇 **Delete stack (刪除堆疊)**。

1. 在確認訊息中，選擇 **Delete (刪除)**。

1. 在堆疊刪除後，為 `SampleNetworkCrossStack` 堆疊重複相同的步驟。
**注意**  
等到 CloudFormation 完全刪除 `SampleWebAppCrossStack` 堆疊。若 EC2 執行個體仍在 VPC 中執行，CloudFormation 不會刪除 `SampleNetworkCrossStack` 堆疊中的 VPC。