本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從部署的 CloudFormation 堆疊取得匯出的輸出
當您在相同 AWS 帳戶 和 區域中有多個堆疊時,您可能想要在它們之間共用資訊。當一個堆疊需要使用另一個堆疊建立的資源時,這很有用。
例如,您可能有一個堆疊,可為您的 Web 伺服器建立網路資源,例如子網路和安全群組。然後,建立實際 Web 伺服器的其他堆疊可以使用第一個堆疊建立的網路資源。您不必在堆疊範本中硬式編碼資源 ID,也不需要以輸入參數形式傳遞 ID。
若要在堆疊之間共用資訊,您可以從一個堆疊匯出輸出值,並將其匯入另一個堆疊。以下是其運作方式:
-
在第一個堆疊的範本 (例如,聯網堆疊) 中,您可以使用
Outputs
區段中的Export
欄位來定義要匯出的特定值。如需詳細資訊,請參閱CloudFormation 範本Outputs語法。 -
當您建立或更新該堆疊時,CloudFormation 會匯出輸出值,使其可供相同 AWS 帳戶 和 區域中的其他堆疊使用。
-
在另一個堆疊的範本中,您可以使用 Fn::ImportValue函數從第一個堆疊匯入匯出的值。
-
當您建立或更新第二個堆疊 (例如 Web 伺服器堆疊) 時,CloudFormation 會自動從第一個堆疊擷取匯出的值並使用它們。
如需演練和範例範本,請參閱請參閱另一個 CloudFormation 堆疊中的資源輸出。
匯出堆疊輸出值與使用巢狀堆疊的比較
巢狀堆疊是指藉由使用 AWS::CloudFormation::Stack
資源在另一個堆疊中建立的堆疊。使用巢狀堆疊時,您可以透過單一堆疊來部署和管理所有資源。您可以將巢狀堆疊群組中某個堆疊的輸出,作為群組中其他堆疊的輸入。這與匯出值的情況不同。
如果您想要將資訊的共享隔離在巢狀堆疊群組內,則建議您使用巢狀堆疊。若要與其他堆疊 (而不只是在巢狀堆疊的群組內) 共享資訊,則匯出值。例如,您可以建立含子網路的單一堆疊,然後匯出其 ID。其他堆疊可以透過匯入其 ID 來使用該子網路。每個堆疊不需要建立自己的子網路。只要有堆疊匯入子網路 ID,您就無法變更或刪除該 ID。
如需巢狀堆疊的詳細資訊,請參閱使用巢狀堆疊在其他堆疊內嵌入堆疊。
考量事項
下列限制適用於跨堆疊參考:
-
對於每個名稱 AWS 帳戶,
Export
名稱在區域中必須是唯一的。 -
您無法跨區域建立跨堆疊參考。您可以使用內部函數
Fn::ImportValue
,僅匯入已在同一區域內匯出的值。 -
對於輸出,
Export
的Name
屬性值無法使用依賴某個資源的Ref
或者GetAtt
函數。同樣,
ImportValue
函數不能包含依賴某個資源的Ref
或GetAtt
函數。 -
當其他堆疊匯入輸出值之後,您就無法刪除匯出輸出值的堆疊,也無法修改匯出的輸出值。您必須先移除所有匯入,之後才可以刪除匯出堆疊或修改輸出值。
列出已匯出的輸出值
如果您需要檢視從堆疊匯出的輸出值,請使用下列其中一種方法:
列出已匯出的輸出值 (主控台)
-
在 https://https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 -
在畫面頂端的導覽列上,選擇您的 AWS 區域。
-
從左側導覽窗格中,選擇匯出。
列出已匯出的輸出值 (AWS CLI)
使用下列 list-exports 命令。將 us-east-1
取代為您的 AWS 區域。
aws cloudformation list-exports --region
us-east-1
下列為範例輸出。
{
"Exports": [
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-subnet-a",
"Value": "subnet-07b410xmplddcfa03"
},
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-subnet-b",
"Value": "subnet-075ed3xmplebd2fb1"
},
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-vpcid",
"Value": "vpc-011d7xmpl100e9841"
}
]
}
CloudFormation 會顯示目前區域匯出輸出的名稱和值,以及其匯出來源的堆疊。若要在另一個堆疊的範本中使用匯出的輸出值,您可以使用匯出名稱和 Fn::ImportValue函數來參考它。
列出匯入匯出的輸出值的堆疊
若要刪除或變更匯出的輸出值,您必須先找出哪些堆疊正在匯入它們。
若要檢視匯入匯出輸出值的堆疊,請使用下列其中一種方法:
列出匯入匯出的輸出值的堆疊 (主控台)
-
在 https://https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 -
從左側導覽窗格中,選擇匯出。
-
若要查看匯入指定匯出值的堆疊,請選擇該匯出值的 Export Name (匯出名稱)。CloudFormation 會顯示匯出詳細資訊頁面,列出匯入該值的所有堆疊。
列出匯入匯出的輸出值的堆疊 (AWS CLI)
使用 list-imports 命令。將 us-east-1
取代為 AWS 區域 ,並將
取代為匯出輸出值的名稱。private-vpc-vpcid
aws cloudformation list-imports --region
us-east-1
\ --export-nameprivate-vpc-vpcid
CloudFormation 傳回匯入該值的堆疊清單。
{
"Imports": [
"my-app-stack"
]
}
知道哪些堆疊正在匯入特定匯出值後,您需要修改這些堆疊,以移除參考輸出值的Fn::ImportValue函數。您必須移除所有參考匯出的輸出值的匯入,才能刪除或修改匯出的輸出值。