本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
參考在另一個 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://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.templateOutputs 區段中,您可以查看範例範本匯出的網路資源。匯出資源的名稱會加上堆疊名稱的字首,以在您從其他堆疊匯出網路資源時進行區別。當使用者匯入網路資源時,他們便可以指定要匯入哪些堆疊的資源。
建立網路堆疊
請登入 AWS 管理主控台,開啟位於 https://console.aws.amazon.com/cloudformation
的 CloudFormation 主控台。 -
在堆疊頁面的右上角,選擇建立堆疊,並選擇使用新資源 (標準)。
-
選擇選擇現有範本,然後在指定範本區段中選擇 Amazon S3 URL。
-
對於 Amazon S3 URL,貼上下列 URL:
https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template。 -
選擇下一步。
-
針對 Stack name (堆疊名稱),輸入
SampleNetworkCrossStack,然後選擇 Next (下一步)。注意
記錄此堆疊的名稱。當您在啟動 Web 應用程式堆疊時,您將會需要堆疊名稱。
-
選擇 下一步。針對此演練,您不需要新增標籤或指定進階設定。
-
確認堆疊名稱和範本 URL 正確,然後選擇 Create stack (建立堆疊)。
CloudFormation 可能需要幾分鐘的時間來建立您的堆疊。等待所有資源成功建立,再繼續建立 Web 應用程式堆疊。
-
若要監控進度,請檢視堆疊事件。如需更多詳細資訊,請參閱 監控堆疊進度。
使用範例範本建立 Web 應用程式堆疊
Web 應用程式堆疊會建立使用網路堆疊之安全群組和子網路的 EC2 執行個體。
您必須在和網路堆疊相同的 AWS 區域 中建立此堆疊。
堆疊範本可在以下 URL 中找到:https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.templateResources 區段中,檢視 EC2 執行個體的屬性。您可以使用 Fn::ImportValue 函數查看從另一個堆疊匯入網路資源的方式。
建立 Web 應用程式堆疊
-
從堆疊頁面的右上角,選擇建立堆疊,並選擇使用新資源 (標準)。
-
選擇選擇現有範本,然後在指定範本區段中選擇 Amazon S3 URL。
-
對於 Amazon S3 URL,貼上下列 URL:
https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template。 -
選擇下一步。
-
在 Stack Name (堆疊名稱) 中輸入
SampleWebAppCrossStack。在 Parameters (參數) 區段中,針對 NetworkStackName 參數使用預設值,然後選擇 Next (下一步)。範例範本會使用參數值指定要從哪個堆疊匯入值。
-
選擇下一步。針對此演練,您不需要新增標籤或指定進階設定。
-
確認堆疊名稱和範本 URL 正確,然後選擇 Create stack (建立堆疊)。
CloudFormation 可能需要幾分鐘的時間來建立您的堆疊。
驗證堆疊是否按設計運作
在堆疊建立之後,檢視其資源並注意執行個體 ID。如需檢視堆疊資源的詳細資訊,請參閱在 CloudFormation 主控台中檢視堆疊資訊。
若要驗證執行個體的安全群組和子網路,請在 Amazon EC2 主控台SampleNetworkCrossStack 堆疊的安全群組和子網路,表示您已成功建立跨堆疊參考。
使用主控台檢視堆疊輸出和範例網站 URL,驗證 Web 應用程式已在執行中。如需更多詳細資訊,請參閱 在 CloudFormation 主控台中檢視堆疊資訊。
疑難排解 AMI 映射錯誤
若您收到錯誤,Template error: Unable to get mapping for
AWSRegionArch2AMI::[region]::HVM64 範本不會包含您 AWS 區域 的 AMI 映射。我們建議使用 Systems Manager 公有參數動態參考最新的 AMI,而非更新映射:
-
從以下網址下載
SampleWebAppCrossStack範本到您的本機電腦:https://https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template。 -
刪除整個
AWSRegionArch2AMI映射區段。 -
新增下列 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" } -
取代現有的
ImageId參考:"ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" } , "HVM64" ] },取代為:
"ImageId": { "Ref": "LatestAmiId" },此參數會自動解析為您部署堆疊所在區域的最新 Amazon Linux 2 AMI。
對於其他 Linux 發行版本,請使用對應的參數路徑。如需詳細資訊,請參閱《AWS Systems Manager 使用者指南》中的探索參數存放區中的公有參數。
-
將修改的範本上傳至您帳戶中的 S3 儲存貯體:
aws s3 cpSampleWebAppCrossStack.templates3://amzn-s3-demo-bucket/ -
建立堆疊時,指定您的 S3 範本 URL,而非範例 URL。
清除您的資源
為了確保您不需要為不必要的服務支付費用,請刪除堆疊。
刪除堆疊
-
在 CloudFormation 主控台中,選擇
SampleWebAppCrossStack堆疊。 -
選擇 Actions (動作),然後選擇 Delete stack (刪除堆疊)。
-
在確認訊息中,選擇 Delete (刪除)。
-
在堆疊刪除後,為
SampleNetworkCrossStack堆疊重複相同的步驟。注意
等到 CloudFormation 完全刪除
SampleWebAppCrossStack堆疊。若 EC2 執行個體仍在 VPC 中執行,CloudFormation 不會刪除SampleNetworkCrossStack堆疊中的 VPC。