這是新的 CloudFormation 範本參考指南。請更新您的書籤和連結。如需 CloudFormation 入門的說明,請參閱 AWS CloudFormation 使用者指南。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Fn::GetStackOutput
內部函數會Fn::GetStackOutput傳回來自另一個堆疊的輸出值。與 不同Fn::ImportValue,此函數不需要參考的堆疊來明確匯出輸出值。它也支援跨帳戶和跨區域參考。
當您需要跨 AWS 帳戶或區域參考堆疊輸出,或您想要在沒有管理明確匯出的情況下參考輸出時,請使用此函數。
注意
Fn::GetStackOutput 會建立弱參考。參考值會在堆疊建立或更新時間解析。如果稍後刪除或修改參考的堆疊或輸出,則不會自動更新或通知耗用堆疊。為了確保一致性,請保護參考的堆疊和輸出免於意外變更。
注意
Fn::GetStackOutput 不支援跨分割區參考。
宣告
JSON
{ "Fn::GetStackOutput": { "StackName": "stack-name", "OutputName": "output-name", "Region": "region", "RoleArn": "role-arn" } }
YAML
您可以使用完整的函數名稱:
Fn::GetStackOutput: StackName:stack-nameOutputName:output-nameRegion:regionRoleArn:role-arn
或者,您也可以使用較短的名稱:
!GetStackOutput StackName:stack-nameOutputName:output-nameRegion:regionRoleArn:role-arn
重要
當包含其他短格式函數,例如 !Sub或 !Ref做為參數值!GetStackOutput時,您無法使用短格式的 。在這種情況下,請使用完整的函數名稱:
# Do not use !GetStackOutput StackName: !Ref MyStackNameParam OutputName: VpcId # Use this instead Fn::GetStackOutput: StackName: !Ref MyStackNameParam OutputName: VpcId
Parameters
- StackName
-
包含您要參考之輸出的堆疊名稱。
必要:是
- OutputName
-
要參考之輸出的邏輯 ID。這是參考堆疊範本的輸出區段中定義的金鑰。
必要:是
- 區域
-
部署參考堆疊 AWS 的區域。預設為要建立或更新的堆疊區域。
必要:否
- RoleArn
-
在參考堆疊上具有
cloudformation:DescribeStacks許可的 IAM 角色 ARN。此角色必須由要建立或更新之堆疊的執行角色擔任。預設為目前堆疊的執行角色。參考不同 AWS 帳戶中的堆疊時,請使用此參數。必要:否
傳回值
參考堆疊中指定輸出的值。
範例
相同帳戶、相同區域
下列範例參考來自相同帳戶和區域中名為 之堆疊ProducerStack的VpcId輸出。由於未RoleArn指定 Region或 ,CloudFormation 會使用目前堆疊的區域和執行角色。
JSON
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId
相同帳戶、不同區域
下列範例參考 中ProducerStack部署的VpcId輸出us-west-2,而耗用堆疊位於不同的區域。Region 參數會指示 CloudFormation 在 中查詢參考的值us-west-2。
JSON
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "Region": "us-west-2" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId Region: us-west-2
跨帳戶
下列範例參考帳戶 ProducerStack中來自 的VpcId輸出111111111111。耗用堆疊位於帳戶 中222222222222。RoleArn 指定111111111111帳戶中具有cloudformation:DescribeStacks許可的角色,該許可必須由耗用堆疊的執行角色擔任。
JSON
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole
跨帳戶和跨區域
下列範例參考來自不同帳戶和不同區域中堆疊的輸出。RoleArn 和 Region 參數都會指定。
JSON
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole", "Region": "us-west-2" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole Region: us-west-2
IAM 角色組態
將 RoleArn 參數用於跨帳戶參考時,IAM 角色必須具有描述包含參考堆疊之帳戶中堆疊的許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks" ], "Resource": "*" } ] }
提示
如需更嚴格的政策,請將 範圍Resource限定為您要參考的特定堆疊 ARN。
角色必須具有信任政策,將AssumeRole許可授予取用堆疊的執行角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:role/CloudFormationExecutionRole" }, "Action": "sts:AssumeRole" } ] }
支援的函數
下列函數可用於 的參數值 Fn::GetStackOutput(例如,建構 StackName或 RoleArn)。但您無法使用某個資源決定這些函數值。
-
Fn::Base64 -
Fn::FindInMap -
Fn::If -
Fn::Join -
Fn::Select -
Fn::Sub -
Ref
Fn::GetStackOutput 本身可用於下列範本位置:
-
直接資源屬性值
-
內部
Fn::Join -
內部
Fn::If -
內部
Fn::Select
如需尚未支援的位置,請參閱已知限制下方。
例如,您可以使用 Ref將參數值傳遞為堆疊名稱:
Parameters: SourceStackName: Type: String Resources: MyResource: Type: AWS::EC2::Instance Properties: SubnetId: Fn::GetStackOutput: StackName: !Ref SourceStackName OutputName: SubnetId
已知限制
此版本不支援下列使用模式。所有 都會傳回InternalFailure錯誤。這些模式的支援將在未來的更新中新增。
-
Fn::GetStackOutput在Fn::Sub變數映射值內 -
Fn::GetStackOutput內部Fn::Base64 -
Fn::GetStackOutput作為直接Outputs區段值 -
Fn::GetStackOutputConditions區段Fn::Equals中的 內部 -
Fn::GetStackOutput內部Fn::ImportValue
Fn::GetStackOutput 直接使用 做為資源屬性值Fn::If,或將其包裝在 Fn::Join、 或 內Fn::Select。
錯誤處理
CloudFormation 會在堆疊建立或更新操作期間驗證Fn::GetStackOutput參考。以下是您可能遇到的常見錯誤:
-
無法擔任 IAM 角色 – 堆疊操作失敗,並出現存取遭拒錯誤。確認取用堆疊的執行角色可以擔任該角色。
-
IAM 角色缺少 DescribeStacks 許可 – 堆疊操作失敗,並出現存取遭拒錯誤。驗證角色的許可政策包含
cloudformation:DescribeStacks。 -
參考堆疊不存在 – 堆疊操作失敗,並出現驗證錯誤,指出找不到堆疊。如果您包含
Region參數,請檢查這是您要參考之堆疊的正確區域。 -
參考的堆疊上不存在輸出金鑰 – 堆疊操作失敗,並出現驗證錯誤,指出找不到輸出。
-
參考堆疊位於未針對目的地帳戶啟用的區域 – 堆疊操作失敗。確保目標區域已在擁有參考堆疊的帳戶中啟用。
-
參考區域無效 – 堆疊操作失敗並出現驗證錯誤。
us-east-1 和選擇加入區域之間的參考
在us-east-1區域與選擇加入區域之間實作參考時,您可能會遇到錯誤。若要避免此類錯誤,請遵循本指南更新全域 STS 端點的字符相容性。
搭配 使用 Fn::GetStackOutput AWS Cloud Development Kit (AWS CDK)
AWS Cloud Development Kit (AWS CDK) (CDK) 透過 Fn.getStackOutput()方法支援 Fn::GetStackOutput 。當您在 CDK 堆疊之間有跨區域或跨帳戶參考時,CDK 現在可以Fn::GetStackOutput原生使用 ,而不是使用 SSM 參數產生自訂資源。這可簡化合成的範本,並消除先前crossRegionReferences解決方法的需求。
如需詳細資訊,請參閱 CDK API 參考。
與 Fn::ImportValue 的比較
| 功能 | Fn::ImportValue |
Fn::GetStackOutput |
|---|---|---|
| 相同帳戶、相同區域 | 支援 | 支援 |
| 跨帳戶 | 不支援 | 支援 |
| 跨區域 | 不支援 | 支援 |
| 需要明確匯出 | 是 | 否 |
| 參考類型 | 強 (封鎖匯出堆疊的刪除) | 弱點 (在部署時間解決) |
| 參考完整性 | 是 | 否 |
當您在同一帳戶和區域內需要強大的參考完整性Fn::ImportValue時,請使用 。Fn::GetStackOutput 當您需要跨帳戶或跨區域參考,或您想要避免管理明確匯出時,請使用 。
最佳實務
-
保護參考的堆疊和輸出。由於
Fn::GetStackOutput會建立弱參考,因此刪除參考的堆疊並不會阻止建立或更新耗用堆疊。不過,重新解析參考的後續操作將會失敗。使用堆疊政策、刪除保護或 IAM 政策,以防止意外刪除參考的堆疊。 -
縮小範圍 IAM 角色。設定
RoleArn進行跨帳戶存取時,請盡可能限制特定堆疊 ARN 的DescribeStacks許可。 -
請注意解決時機。參考值會在堆疊建立或更新時間解析。如果來源值變更,耗用堆疊不會自動更新。若要取得變更,請在耗用堆疊上執行更新。