我想在 AWS CloudFormation 中建立範本時,想參照另一個 CloudFormation 堆疊中的資源。
解決方法
若要參照另一個 CloudFormation 堆疊中的資源,您必須先建立跨堆疊參照。以下的解決方法提供建立跨堆疊參考的一種方法範例。範例 NetworkStack 堆疊會建立 ${AWS::StackName}-SecurityGroupID 和 ${AWS::StackName}-SubnetID 網路相關資源並匯出。建立堆疊後,CloudFormation 將 ${AWS::StackName} 取代為 NetworkStack。最終匯出名稱是 NetworkStack-SecurityGroupID 和 NetworkStack-SubnetID。
建立一個堆疊以匯出輸出值
完成下列步驟:
- 建立 CloudFormation 堆疊,然後使用 SampleNetworkCrossStack 範本。
注意:您必須在範本的輸出區段中宣告匯出欄位。
- 將該堆疊命名為 NetworkStack。
**注意:**NetworkStack 會匯出子網路和安全群組值。
使用匯入的子網路和安全群組建立 Amazon EC2 執行個體
Amazon Elastic Compute Cloud (Amazon EC2) 執行個體屬性,例如 SubnetId 和 SecurityGroupId,會使用匯出堆疊中的值。若要匯入值,請使用 Fn::ImportValue 內建函數。
**注意:**匯入和匯出堆疊必須位於相同的 AWS 區域和 AWS 帳戶中。此外,匯出的值名稱對您的區域和帳戶必須是唯一的。
若要建立 EC2 執行個體,請先完成下列步驟:
- 開啟 CloudFormation 主控台。
- 選擇建立堆疊,然後選擇設計範本。
- 選擇程式碼編輯器的參數標籤,然後選擇範本。
- 若要使用匯出堆疊中的值來建立執行個體,請在程式碼編輯器中輸入下列範本:
**重要:**將 NetworkStack 資源堆疊設定為 NetworkStackParameter 的值。NetworkStack 值會取代對應的 Fn::ImportValue 函數中正確的堆疊名稱。
{ "Parameters": {
"NetworkStackParameter": {
"Type": "String"
}
},
"Resources": {
"WebServerInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t2.micro",
"ImageId": "ami-a1b23456",
"NetworkInterfaces": [
{
"GroupSet": [
{
"Fn::ImportValue": {
"Fn::Sub": "${NetworkStackParameter}-SecurityGroupID"
}
}
],
"AssociatePublicIpAddress": "true",
"DeviceIndex": "0",
"DeleteOnTermination": "true",
"SubnetId": {
"Fn::ImportValue": {
"Fn::Sub": "${NetworkStackParameter}-SubnetID"
}
}
}
]
}
}
}
}
注意: 將 t2.micro 取代為您的執行個體類型,並將 ami-a1b23456 取代為您的 Amazon Machine Image (AMI) ID。
- 選擇建立堆疊 (帶向上箭頭的雲圖示),然後選擇下一步。
- 對於堆疊名稱,輸入堆疊的名稱。
- 對於參數,輸入您要相互參照的網路堆疊名稱,例如 NetworkStack。
- 選擇下一步,然後再次選擇下一步。
- 選擇建立。
- 堆疊狀態變更為 CREATE_COMPLETE 後,開啟 Amazon EC2 主控台。
- 在導覽窗格中,選擇執行個體,然後選取您建立的執行個體。
- 選擇描述標籤,然後確認已設定安全群組和子網路。
**重要:**當另一個堆疊正在匯入來源堆疊或來源堆疊的匯出值時,您無法刪除這些值。若要更新來源堆疊的匯出值,請先手動取代堆疊中正在匯入來源堆疊匯出值的值。然後,您可以更新來源堆疊的匯出值。
若要列出正在匯入匯出輸出值的所有堆疊,請執行 list-imports 命令。若要列出區域中的所有匯出,請使用 CloudFormation 主控台或執行 list-exports 命令。匯出名稱對區域中的帳戶必須是唯一的。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
相關資訊
如何使用 AWS Systems Manager Parameter Store 中的參數,在 CloudFormation 堆疊之間共用值?
AWS CloudFormation 範本
AWS::EC2::Instance
參照另一個 CloudFormation 堆疊中的資源輸出