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-nameOutputName:output-nameRegion:regionRoleArn:role-arn
Sebagai alternatif, Anda dapat menggunakan bentuk pendek:
!GetStackOutput StackName:stack-nameOutputName:output-nameRegion:regionRoleArn: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:DescribeStacksizin 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 petaFn::Subvariabel -
Fn::GetStackOutputdi dalamFn::Base64 -
Fn::GetStackOutputsebagai nilaiOutputsbagian langsung -
Fn::GetStackOutputdiFn::EqualsdalamConditionsbagian -
Fn::GetStackOutputdi dalamFn::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 termasuk
cloudformation:DescribeStacks. -
Tumpukan yang direferensikan tidak ada - Operasi tumpukan gagal dengan kesalahan validasi yang menunjukkan tumpukan tidak ditemukan. Jika Anda menyertakan
Regionparameter, 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::GetStackOutputmembuat 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
RoleArnuntuk, batasiDescribeStacksizin 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.