View a markdown version of this page

Fn::GetStackOutput - AWS CloudFormation

這是新的 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-name OutputName: output-name Region: region RoleArn: role-arn

或者,您也可以使用較短的名稱:

!GetStackOutput StackName: stack-name OutputName: output-name Region: region RoleArn: 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 帳戶中的堆疊時,請使用此參數。

必要:否

傳回值

參考堆疊中指定輸出的值。

範例

相同帳戶、相同區域

下列範例參考來自相同帳戶和區域中名為 之堆疊ProducerStackVpcId輸出。由於未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。耗用堆疊位於帳戶 中222222222222RoleArn 指定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

跨帳戶和跨區域

下列範例參考來自不同帳戶和不同區域中堆疊的輸出。RoleArnRegion 參數都會指定。

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(例如,建構 StackNameRoleArn)。但您無法使用某個資源決定這些函數值。

  • 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::GetStackOutputFn::Sub變數映射值內

  • Fn::GetStackOutput 內部 Fn::Base64

  • Fn::GetStackOutput 作為直接Outputs區段值

  • Fn::GetStackOutput Conditions區段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許可。

  • 請注意解決時機。參考值會在堆疊建立或更新時間解析。如果來源值變更,耗用堆疊不會自動更新。若要取得變更,請在耗用堆疊上執行更新。