我想在建立範本時參照另一個 AWS CloudFormation 堆疊中的資源。
簡短說明
以下的解決方法提供建立跨堆疊參考的一種方法範例。如需其他指示,請參閱逐步解說: 參照另一個 AWS CloudFormation 堆疊中的資源輸出。
**注意:**若要參照另一個 AWS CloudFormation 堆疊中的資源,您必須先建立跨堆疊參照。若要建立跨堆疊參照,請使用輸出欄位來標記要匯出的資源輸出值。然後,使用 Fn::ImportValue 內建函數將值匯入相同 AWS 區域和帳戶內的任何堆疊中。AWS CloudFormation 會依範本中指定的名稱來識別匯出的值。這些名稱在您的 AWS 區域和帳戶中必須是唯一的。
解決方法
下列步驟說明如何建立名為 NetworkStack的 AWS CloudFormation 堆疊。此堆疊會建立與網路相關的資源,以及名為 ${AWS::StackName}-SecurityGroupID 和 ${AWS::StackName}-SubnetID的匯出。建立堆疊後,NetworkStack 會取代 ${AWS::StackName}。最終匯出名稱是 NetworkStack-SecurityGroupID 和 NetworkStack-SubnetID。
建立一個堆疊以匯出輸出值
1. 使用此範本建立 AWS CloudFormation 堆疊。
2. 將該堆疊命名為 NetworkStack。
**注意:**NetworkStack 會匯出子網路和安全群組值。
使用匯入的子網路和安全群組來建立 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體
1. 開啟 AWS CloudFormation 主控台。
2. 選擇建立堆疊,然後選擇設計範本。
3. 在程式碼編輯器的參數索引標籤中,選擇範本。
4. 複製下列範本並貼到程式碼編輯器中,然後使用適當的 InstanceType 和 ImageId值來更新範本:
{
"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"
}
}
}
]
}
}
}
}
**重要事項:**在步驟 4 的範本中,使用 NetworkStack 資源堆疊做為 NetworkStackParameter 的值。NetworkStack 值會取代對應的 Fn::ImportValue 函數中正確的堆疊名稱。
**注意:**如需匯入和匯出範本的範例,請參閱 Fn::ImportValue。
5. 選擇建立堆疊圖示,然後選擇下一步。
6. 在堆疊名稱中,輸入堆疊的名稱。
7. 在參數中,輸入您要相互參照的網路堆疊名稱 (NetworkStack)。
8. 選擇下一步,再選擇下一步,然後選擇建立。
9. 堆疊建立完成後,請開啟 Amazon EC2 主控台。
10. 在瀏覽窗格中,選擇執行個體,然後選擇您在步驟 4 中使用範本建立的執行個體。
11. 選擇描述檢視畫面,然後確認已設定安全群組和子網路。
**重要事項:**當另一個堆疊正在匯入這些值時,您無法刪除來源堆疊或來源堆疊的匯出值。若要更新來源堆疊的匯出值,請先手動取代堆疊中正在匯入來源堆疊匯出值的實際值。然後,您可以更新來源堆疊的匯出值。
若要列出正在匯入匯出輸出值的所有堆疊,請執行 list-imports 命令。若要列出 AWS 區域中的所有匯出,請使用 AWS CloudFormation 主控台或執行 list-exports 命令。每個 AWS 區域帳戶的匯出名稱必須是唯一的。
相關資訊
如何使用 AWS Systems Manager Parameter Store 中的參數,在 CloudFormation 堆疊之間共用值?
AWS CloudFormation 範本
AWS::EC2::Instance