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

パラメータ

StackName

参照する出力を含むスタックの名前。

必須: はい

OutputName

参照する出力の論理 ID。これは、参照されるスタックのテンプレートの出力セクションで定義されているキーです。

必須: はい

リージョン

参照されるスタックがデプロイされる AWS リージョン。デフォルトは、作成または更新されるスタックのリージョンです。

必須: いいえ

RoleArn

参照されるスタックに対する cloudformation:DescribeStacks アクセス許可を持つ IAM ロールの ARN。このロールは、作成または更新するスタックの実行ロールによって引き受け可能である必要があります。デフォルトは、現在のスタックの実行ロールです。別の AWS アカウントのスタックを参照する場合は、このパラメータを使用します。

必須: いいえ

戻り値

参照されるスタックから指定された出力の値。

同じアカウント、同じリージョン

次の例では、同じアカウントおよびリージョンの ProducerStack という名前のスタックからの VpcId 出力を参照します。Region または RoleArn が指定されていないため、CloudFormation は現在のスタックのリージョンと実行ロールを使用します。

JSON

{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId" } }

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId

同じアカウント、異なるリージョン

次の例では、us-west-2 にデプロイされた ProducerStack からの VpcId 出力を参照しますが、消費スタックは別のリージョンにあります。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

クロスアカウント

次の例では、アカウント 111111111111ProducerStack からの VpcId 出力を参照します。消費スタックはアカウント 222222222222 にあります。RoleArn は、cloudformation:DescribeStacks アクセス許可を持つアカウント 111111111111 のロールを指定します。これは、消費スタックの実行ロールによって引き受け可能である必要があります。

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": "*" } ] }
ヒント

より制限の厳しいポリシーについては、参照する特定のスタック ARN に Resource をスコープします。

ロールには、消費スタックの実行ロールに 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::Sub 変数マップ値内の Fn::GetStackOutput

  • Fn::Base64 内の Fn::GetStackOutput

  • 直接 Outputs セクション値としての Fn::GetStackOutput

  • Conditions セクションの Fn::Equals 内の Fn::GetStackOutput

  • Fn::ImportValue 内の Fn::GetStackOutput

Fn::GetStackOutput をリソースプロパティ値として直接使用するか、Fn::JoinFn::If、または Fn::Select 内にラップします。

エラー処理

CloudFormation は、スタックの作成または更新オペレーション中に Fn::GetStackOutput 参照を検証します。発生する可能性のある一般的なエラーを次に示します。

  • IAM ロールを引き受けることができない – スタックオペレーションはアクセス拒否エラーで失敗します。ロールが消費スタックの実行ロールによって引き受けられることを確認します。

  • IAM ロールに DescribeStacks アクセス許可がない – スタックオペレーションはアクセス拒否エラーで失敗します。ロールのアクセス許可ポリシーに cloudformation:DescribeStacks が含まれていることを確認します。

  • 参照されたスタックが存在しない – スタックオペレーションが失敗し、スタックが見つからなかったことを示す検証エラーが表示されます。Region パラメータを含めた場合は、参照するスタックの正しいリージョンであることを確認します。

  • 参照されたスタックに出力キーが存在しない – スタックオペレーションが失敗し、出力が見つからなかったことを示す検証エラーが表示されます。

  • 参照されたスタックが送信先アカウントで有効になっていないリージョンにある – スタックオペレーションが失敗します。参照されるスタックを所有するアカウントでターゲットリージョンが有効になっていることを確認します。

  • 参照先リージョンが無効です — スタックオペレーションが検証エラーで失敗します。

us-east-1 とオプトインリージョン間のリファレンス

us-east-1 リージョンとオプトインリージョンの間にリファレンスを実装するときにエラーが発生することがあります。このようなエラーを回避するには、このガイドに従ってグローバル STS エンドポイントのトークンの互換性を更新します。

AWS Cloud Development Kit (AWS CDK) での Fn::GetStackOutput の使用

AWS Cloud Development Kit (AWS CDK) (CDK) は Fn.getStackOutput() メソッドを通じて Fn::GetStackOutput をサポートします。CDK スタック間にクロスリージョンまたはクロスアカウント参照がある場合、CDK は SSM パラメータを使用してカスタムリソースを生成する代わりにネイティブに Fn::GetStackOutput を使用できるようになりました。これにより、合成されたテンプレートが簡素化され、以前の crossRegionReferences 回避策が不要になります。

詳細については、「 CDK API リファレンス」を参照してください。

Fn::ImportValue との比較

機能 Fn::ImportValue Fn::GetStackOutput
同じアカウント、同じリージョン サポート対象 サポート
クロスアカウント サポート外 サポート
クロスリージョン サポート外 サポート
明示的なエクスポートが必要 はい いいえ
参照タイプ 強力 (スタックのエクスポートの削除をブロック) 弱い (デプロイ時に解決)
参照整合性 はい いいえ

同じアカウントおよびリージョン内で強力な参照整合性が必要な場合は、Fn::ImportValue を使用します。クロスアカウントまたはクロスリージョン参照が必要な場合、または明示的なエクスポートの管理を避ける場合は、Fn::GetStackOutput を使用します。

ベストプラクティス

  • 参照されるスタックと出力を保護します。Fn::GetStackOutput は弱い参照を作成するため、参照されたスタックを削除しても、消費するスタックの作成や更新が妨げられることはありません。ただし、参照を再解決する後続のオペレーションは失敗します。スタックポリシー、削除保護、または IAM ポリシーを使用して、参照されているスタックが誤って削除されないようにします。

  • IAM ロールの範囲を絞り込む クロスアカウントアクセス用に RoleArn を設定するときは、可能な限り特定のスタック ARN に DescribeStacks アクセス許可を制限します。

  • 解決のタイミングに注意してください。参照値は、スタックの作成時または更新時に解決されます。ソース値が変更されても、消費スタックは自動的に更新されません。変更を取得するには、消費スタックで更新を実行します。