View a markdown version of this page

Fn:: GetStackOutput - AWS CloudFormation

Ini adalah Panduan Referensi CloudFormation Template baru. Harap perbarui bookmark dan tautan Anda. Untuk bantuan memulai CloudFormation, lihat Panduan AWS CloudFormation Pengguna.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fn:: GetStackOutput

Fungsi intrinsik Fn::GetStackOutput mengembalikan nilai output dari tumpukan lain. Tidak sepertiFn::ImportValue, fungsi ini tidak memerlukan tumpukan referensi untuk secara eksplisit mengekspor nilai output. Ini juga mendukung referensi lintas akun dan lintas wilayah.

Gunakan fungsi ini saat Anda perlu mereferensikan output tumpukan di seluruh AWS akun atau Wilayah, atau saat Anda ingin mereferensikan output tanpa mengelola ekspor eksplisit.

catatan

Fn::GetStackOutputmenciptakan referensi yang lemah. Nilai yang direferensikan diselesaikan pada waktu pembuatan atau pembaruan tumpukan. Jika tumpukan atau output yang direferensikan kemudian dihapus atau dimodifikasi, tumpukan konsumsi tidak diperbarui atau diberi tahu secara otomatis. Untuk memastikan konsistensi, lindungi tumpukan dan output yang direferensikan dari perubahan yang tidak diinginkan.

catatan

Fn::GetStackOutputtidak mendukung referensi lintas partisi.

Pernyataan

JSON

{ "Fn::GetStackOutput": { "StackName": "stack-name", "OutputName": "output-name", "Region": "region", "RoleArn": "role-arn" } }

YAML

Anda dapat menggunakan nama fungsi penuh:

Fn::GetStackOutput: StackName: stack-name OutputName: output-name Region: region RoleArn: role-arn

Sebagai alternatif, Anda dapat menggunakan bentuk pendek:

!GetStackOutput StackName: stack-name OutputName: output-name Region: region RoleArn: role-arn
penting

Anda tidak dapat menggunakan bentuk pendek !GetStackOutput ketika berisi fungsi bentuk pendek lainnya seperti !Sub atau !Ref sebagai nilai parameter. Dalam hal ini, gunakan nama fungsi lengkap:

# Do not use !GetStackOutput StackName: !Ref MyStackNameParam OutputName: VpcId # Use this instead Fn::GetStackOutput: StackName: !Ref MyStackNameParam OutputName: VpcId

Parameter

StackName

Nama tumpukan yang berisi output yang ingin Anda referensikan.

Wajib: Ya

OutputName

ID logis dari output untuk referensi. Ini adalah kunci yang didefinisikan di bagian Output dari template tumpukan yang direferensikan.

Wajib: Ya

Region

AWS Wilayah tempat tumpukan yang direferensikan digunakan. Default ke Wilayah tumpukan yang sedang dibuat atau diperbarui.

Wajib: Tidak

RoleArn

ARN dari peran IAM dengan cloudformation:DescribeStacks izin pada tumpukan yang direferensikan. Peran ini harus diasumsikan oleh peran eksekusi tumpukan yang sedang dibuat atau diperbarui. Default untuk peran eksekusi tumpukan saat ini. Gunakan parameter ini saat mereferensikan tumpukan di AWS akun yang berbeda.

Wajib: Tidak

Nilai yang dikembalikan

Nilai output yang ditentukan dari tumpukan referensi.

Contoh

Akun yang sama, Wilayah yang sama

Contoh berikut mereferensikan VpcId output dari tumpukan bernama ProducerStack di akun dan Wilayah yang sama. Karena tidak RoleArn ada Region atau ditentukan, CloudFormation menggunakan peran Region dan eksekusi stack saat ini.

JSON

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

YAML

Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId

Akun yang sama, Wilayah berbeda

Contoh berikut mereferensikan VpcId output dari ProducerStack deployed inus-west-2, sedangkan tumpukan konsumsi berada di Wilayah yang berbeda. RegionParameter mengarahkan CloudFormation untuk mencari nilai referensi di. 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

Cross-account

Contoh berikut referensi VpcId output dari ProducerStack dalam akun111111111111. Tumpukan konsumsi ada di akun222222222222. RoleArnMenentukan peran dalam akun 111111111111 dengan cloudformation:DescribeStacks izin, yang harus diasumsikan oleh peran eksekusi tumpukan konsumsi.

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

Cross-account dan Lintas wilayah

Contoh berikut referensi output dari tumpukan di akun yang berbeda dan Wilayah yang berbeda. Kedua parameter RoleArn dan Region parameter ditentukan.

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

Konfigurasi IAM role

Saat menggunakan RoleArn parameter untuk referensi lintas akun, peran IAM harus memiliki izin untuk mendeskripsikan tumpukan di akun yang berisi tumpukan yang direferensikan:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks" ], "Resource": "*" } ] }
Tip

Untuk kebijakan yang lebih ketat, lingkup Resource ke tumpukan ARN tertentu yang ingin Anda referensikan.

Peran harus memiliki kebijakan kepercayaan yang memberikan AssumeRole izin ke peran eksekusi tumpukan konsumsi:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:role/CloudFormationExecutionRole" }, "Action": "sts:AssumeRole" } ] }

Fungsi yang didukung

Fungsi-fungsi berikut dapat digunakan dalam nilai-nilai parameter Fn::GetStackOutput (misalnya, untuk membangun StackName atauRoleArn). Nilai dari fungsi-fungsi ini tidak dapat bergantung pada sumber daya.

  • Fn::Base64

  • Fn::FindInMap

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref

Fn::GetStackOutputsendiri dapat digunakan dalam posisi template berikut:

  • Nilai properti sumber daya langsung

  • Di dalam Fn::Join

  • Di dalam Fn::If

  • Di dalam Fn::Select

Lihat Keterbatasan yang Sudah Diketahui di bawah untuk posisi yang belum didukung.

Misalnya, Anda dapat menggunakan Ref untuk meneruskan nilai parameter sebagai nama tumpukan:

Parameters: SourceStackName: Type: String Resources: MyResource: Type: AWS::EC2::Instance Properties: SubnetId: Fn::GetStackOutput: StackName: !Ref SourceStackName OutputName: SubnetId

Keterbatasan yang Sudah Diketahui

Pola penggunaan berikut tidak didukung dalam rilis ini. Semua mengembalikan InternalFailure kesalahan. Support untuk pola-pola ini akan ditambahkan di update future.

  • Fn::GetStackOutputdi dalam nilai peta Fn::Sub variabel

  • Fn::GetStackOutputdi dalam Fn::Base64

  • Fn::GetStackOutputsebagai nilai Outputs bagian langsung

  • Fn::GetStackOutputdi Fn::Equals dalam Conditions bagian

  • Fn::GetStackOutputdi dalam Fn::ImportValue

Gunakan Fn::GetStackOutput langsung sebagai nilai properti sumber daya atau bungkus di dalamFn::Join,Fn::If, atauFn::Select.

Penanganan kesalahan

CloudFormation memvalidasi Fn::GetStackOutput referensi selama operasi pembuatan tumpukan atau pembaruan. Berikut ini adalah kesalahan umum yang mungkin Anda temui:

  • Peran IAM tidak dapat diasumsikan - Operasi tumpukan gagal dengan kesalahan akses ditolak. Verifikasi bahwa peran tersebut dapat diasumsikan oleh peran eksekusi tumpukan konsumsi.

  • Peran IAM tidak memiliki DescribeStacks izin - Operasi tumpukan gagal dengan kesalahan akses ditolak. Verifikasi kebijakan izin peran termasukcloudformation:DescribeStacks.

  • Tumpukan yang direferensikan tidak ada - Operasi tumpukan gagal dengan kesalahan validasi yang menunjukkan tumpukan tidak ditemukan. Jika Anda menyertakan Region parameter, periksa apakah ini adalah wilayah yang benar untuk tumpukan yang ingin Anda referensikan.

  • Kunci keluaran tidak ada pada tumpukan yang direferensikan - Operasi tumpukan gagal dengan kesalahan validasi yang menunjukkan output tidak ditemukan.

  • Tumpukan yang direferensikan berada di Wilayah yang tidak diaktifkan untuk akun tujuan — Operasi tumpukan gagal. Pastikan Wilayah target diaktifkan di akun yang memiliki tumpukan yang direferensikan.

  • Wilayah yang direferensikan tidak valid - Operasi tumpukan gagal dengan kesalahan validasi.

Referensi antara wilayah us-east-1 dan opt-in

Anda mungkin mengalami kesalahan saat menerapkan referensi antara us-east-1 Wilayah dan wilayah keikutsertaan. Untuk menghindari kesalahan tersebut, ikuti panduan ini untuk memperbarui kompatibilitas token untuk titik akhir STS global.

Menggunakan Fn:: GetStackOutput dengan AWS Cloud Development Kit (AWS CDK)

AWS Cloud Development Kit (AWS CDK) (CDK) mendukung Fn::GetStackOutput melalui Fn.getStackOutput() metode ini. Ketika Anda memiliki referensi lintas wilayah atau lintas akun antara tumpukan CDK, CDK sekarang dapat menggunakan Fn::GetStackOutput secara asli alih-alih menghasilkan sumber daya khusus dengan parameter SSM. Ini menyederhanakan template yang disintesis dan menghilangkan kebutuhan akan solusi sebelumnyacrossRegionReferences.

Untuk informasi selengkapnya, lihat Referensi API CDK.

Perbandingan dengan Fn:: ImportValue

Kemampuan Fn::ImportValue Fn::GetStackOutput
Akun yang sama, Wilayah yang sama Didukung Didukung
Cross-account Tidak didukung Didukung
Cross-Region Tidak didukung Didukung
Membutuhkan Ekspor eksplisit Ya Tidak
Jenis referensi Kuat (memblokir penghapusan tumpukan ekspor) Lemah (diselesaikan pada waktu penerapan)
Integritas referensial Ya Tidak

Gunakan Fn::ImportValue saat Anda membutuhkan integritas referensial yang kuat dalam akun dan Wilayah yang sama. Gunakan Fn::GetStackOutput saat Anda membutuhkan referensi lintas akun atau lintas wilayah, atau saat Anda ingin menghindari pengelolaan ekspor eksplisit.

Praktik terbaik

  • Lindungi tumpukan dan output yang direferensikan. Karena Fn::GetStackOutput membuat referensi yang lemah, menghapus tumpukan yang direferensikan tidak mencegah tumpukan konsumsi dibuat atau diperbarui. Namun, operasi selanjutnya yang menyelesaikan kembali referensi akan gagal. Gunakan kebijakan tumpukan, perlindungan penghapusan, atau kebijakan IAM untuk mencegah penghapusan tumpukan yang direferensikan secara tidak sengaja.

  • Lingkup peran IAM secara sempit. Saat mengonfigurasi akses lintas akun RoleArn untuk, batasi DescribeStacks izin ke tumpukan ARN tertentu bila memungkinkan.

  • Waspadai waktu resolusi. Nilai yang direferensikan diselesaikan pada waktu pembuatan atau pembaruan tumpukan. Jika nilai sumber berubah, tumpukan konsumsi tidak diperbarui secara otomatis. Untuk mengambil perubahan, lakukan pembaruan pada tumpukan konsumsi.