請參閱另一個 CloudFormation 堆疊中的資源輸出 - AWS CloudFormation

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

請參閱另一個 CloudFormation 堆疊中的資源輸出

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

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

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

若要建立跨堆疊參考,請使用 Export 輸出欄位,標記要匯出的資源輸出值。然後,使用 Fn::ImportValue 內部函數匯入值。如需詳細資訊,請參閱從部署的 CloudFormation 堆疊取得匯出的輸出

注意

CloudFormation 是一項免費服務。不過,您需要按每個資源的目前費率支付堆疊中包含 AWS 的資源費用。如需 AWS 定價的詳細資訊,請參閱各項產品的詳細資訊頁面

使用範例範本來建立網路堆疊

開始本演練之前,請確認您具有使用下列所有服務的 IAM 許可:Amazon VPC、Amazon EC2 和 CloudFormation。

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

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

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

建立網路堆疊
  1. 登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/cloudformation 開啟 AWS CloudFormation 主控台。

  2. 堆疊頁面上,選擇右上角的建立堆疊,然後選擇使用新資源 (標準)

  3. 選擇選擇現有範本,然後在指定範本區段中,選擇 Amazon S3 URL

  4. 對於 Amazon S3 URL,請貼上下列 URL:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template

  5. 選擇下一步

  6. 針對 Stack name (堆疊名稱),輸入 SampleNetworkCrossStack,然後選擇 Next (下一步)

    注意

    記錄此堆疊的名稱。當您在啟動 Web 應用程式堆疊時,您將會需要堆疊名稱。

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

  8. 確認堆疊名稱和範本 URL 正確,然後選擇 Create stack (建立堆疊)

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

  9. 若要監控進度,請檢視堆疊事件。如需詳細資訊,請參閱監控堆疊進度

使用範例範本來建立 Web 應用程式堆疊

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

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

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

建立 Web 應用程式堆疊
  1. 堆疊頁面,選擇右上角的建立堆疊,然後選擇使用新資源 (標準)

  2. 選擇選擇現有範本,然後在指定範本區段中,選擇 Amazon S3 URL

  3. 對於 Amazon S3 URL,請貼上下列 URL:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template

  4. 選擇下一步

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

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

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

  7. 確認堆疊名稱和範本 URL 正確,然後選擇 Create stack (建立堆疊)

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

驗證堆疊是否依設計運作

在堆疊建立之後,檢視其資源並注意執行個體 ID。如需檢視堆疊資源的詳細資訊,請參閱從 CloudFormation 主控台檢視堆疊資訊

若要驗證執行個體的安全群組和子網路,請在 Amazon EC2 主控台檢視執行個體的屬性。若執行個體使用來自 SampleNetworkCrossStack 堆疊的安全群組和子網路,表示您已成功建立跨堆疊參考。

使用主控台檢視堆疊輸出和範例網站 URL,驗證 Web 應用程式已在執行中。如需詳細資訊,請參閱從 CloudFormation 主控台檢視堆疊資訊

故障診斷 AMI 映射錯誤

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

  1. 從 下載SampleWebAppCrossStack範本到您的本機電腦:https://https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template

  2. 刪除整個AWSRegionArch2AMI映射區段。

  3. 新增下列 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" }
  4. 取代現有的ImageId參考:

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

    使用:

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

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

    對於其他 Linux 發行版本,請使用適當的參數路徑。如需詳細資訊,請參閱AWS Systems Manager 《 使用者指南》中的探索參數存放區中的公有參數

  5. 將修改後的範本上傳至您帳戶中的 S3 儲存貯體:

    aws s3 cp SampleWebAppCrossStack.template s3://amzn-s3-demo-bucket/
  6. 建立堆疊時,請指定您的 S3 範本 URL,而非範例 URL。

清除您的資源

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

刪除堆疊
  1. 在 CloudFormation 主控台中,選擇SampleWebAppCrossStack堆疊。

  2. 選擇 Actions (動作),然後選擇 Delete stack (刪除堆疊)

  3. 在確認訊息中,選擇 Delete (刪除)

  4. 刪除堆疊之後,請重複SampleNetworkCrossStack堆疊的相同步驟。

    注意

    等到 CloudFormation 完全刪除SampleWebAppCrossStack堆疊。如果 EC2 執行個體仍在 VPC 中執行,CloudFormation 不會刪除SampleNetworkCrossStack堆疊中的 VPC。