Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Otomatiskan penerapan set tumpukan dengan menggunakan AWS dan AWS CodePipeline CodeBuild
Thiyagarajan Mani, Mihir Borkar, dan Raghu Gowda, Amazon Web Services
Ringkasan
Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya
Dalam integrasi berkelanjutan dan pengiriman berkelanjutan Anda (CI/CD) processes, you might want to deploy applications automatically into all your existing AWS accounts and into new accounts that you add to your organization in AWS Organizations. When you architect a CI/CDsolusi untuk persyaratan ini, kemampuan administrator set tumpukan AWS CloudFormation yang didelegasikan berguna karena memungkinkan lapisan keamanan dengan membatasi akses ke akun manajemen. Namun, AWS CodePipeline menggunakan model izin yang dikelola layanan untuk menyebarkan aplikasi ke beberapa akun dan Wilayah. Anda harus menggunakan akun manajemen AWS Organizations untuk menerapkan dengan kumpulan tumpukan, karena AWS CodePipeline tidak mendukung fitur administrator kumpulan tumpukan yang didelegasikan.
Pola ini menjelaskan bagaimana Anda dapat mengatasi batasan ini. Pola ini menggunakan AWS CodeBuild dan skrip khusus untuk mengotomatiskan penerapan set tumpukan dengan AWS. CodePipeline Ini mengotomatiskan aktivitas penyebaran aplikasi ini:
Menyebarkan aplikasi sebagai set tumpukan ke unit organisasi yang ada () OUs
Memperluas penyebaran aplikasi ke tambahan OUs dan Wilayah
Menghapus aplikasi yang digunakan dari semua atau spesifik OUs atau Wilayah
Prasyarat dan batasan
Prasyarat
Sebelum Anda mengikuti langkah-langkah dalam pola ini:
Buat organisasi di akun manajemen AWS Organizations Anda. Untuk petunjuk, lihat dokumentasi AWS Organizations.
Aktifkan akses tepercaya antara AWS Organizations dan CloudFormation untuk menggunakan izin yang dikelola layanan. Untuk petunjuk, lihat Mengaktifkan akses tepercaya dengan AWS Organizations dalam CloudFormation dokumentasi.
Batasan
Kode yang disertakan dengan pola ini memiliki batasan berikut:
Anda hanya dapat menerapkan satu CloudFormation templat untuk aplikasi; beberapa penerapan templat saat ini tidak didukung.
Menyesuaikan implementasi saat ini membutuhkan DevOps keahlian.
Pola ini tidak menggunakan kunci AWS Key Management System (AWS KMS). Namun, Anda dapat mengaktifkan fungsi ini dengan mengkonfigurasi ulang CloudFormation template yang disertakan dengan pola ini.
Arsitektur

Arsitektur untuk pipeline CI/CD penerapan ini menangani hal berikut:
Membatasi akses langsung ke akun manajemen dengan mendelegasikan tanggung jawab penyebaran set tumpukan ke CI/CD akun khusus sebagai administrator set tumpukan untuk penerapan aplikasi.
Menggunakan model izin yang dikelola layanan untuk menyebarkan aplikasi secara otomatis setiap kali akun baru dibuat dan dipetakan di bawah OU.
Memastikan konsistensi versi aplikasi di semua akun di tingkat lingkungan.
Menggunakan beberapa tahap persetujuan di tingkat repositori dan pipa untuk menyediakan lapisan keamanan dan tata kelola tambahan untuk aplikasi yang digunakan.
Mengatasi batasan saat ini CodePipeline dengan menggunakan skrip penerapan yang dibuat khusus CodeBuild untuk menerapkan atau menghapus kumpulan tumpukan dan instance tumpukan secara otomatis. Untuk ilustrasi kontrol aliran dan hierarki panggilan API yang diterapkan oleh skrip kustom, lihat bagian Informasi tambahan.
Membuat set tumpukan individu untuk pengembangan, pengujian, dan lingkungan produksi. Selain itu, Anda dapat membuat kumpulan tumpukan yang menggabungkan beberapa OUs dan Wilayah di setiap tahap. Misalnya, Anda dapat menggabungkan sandbox dan pengembangan OUs dalam tahap penyebaran pengembangan.
Mendukung penerapan aplikasi ke, atau pengecualian dari, subset akun atau daftar. OUs
Otomatisasi dan skala
Anda dapat menggunakan kode yang disediakan dengan pola ini untuk membuat CodeCommit repositori AWS dan pipeline kode untuk aplikasi Anda. Anda kemudian dapat menerapkan ini sebagai set tumpukan ke beberapa akun di tingkat OU. Kode ini juga mengotomatiskan komponen seperti topik Amazon Simple Notification Service (Amazon SNS) untuk memberi tahu pemberi persetujuan, peran AWS Identity and Access Management (IAM) yang diperlukan, dan kebijakan kontrol layanan (SCP) untuk diterapkan di akun manajemen.
Alat
Layanan AWS
AWS CloudFormation membantu Anda menyiapkan sumber daya AWS, menyediakannya dengan cepat dan konsisten, serta mengelolanya sepanjang siklus hidupnya di seluruh akun dan Wilayah AWS.
AWS CodeBuild adalah layanan build terkelola penuh yang membantu Anda mengompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
AWS CodeCommit adalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi, tanpa perlu mengelola sistem kontrol sumber Anda sendiri.
AWS CodeDeploy mengotomatiskan penerapan ke Amazon Elastic Compute Cloud (Amazon EC2) atau instans lokal, fungsi AWS Lambda, atau layanan Amazon Elastic Container Service (Amazon ECS).
AWS CodePipeline membantu Anda memodelkan dan mengonfigurasi berbagai tahapan rilis perangkat lunak dengan cepat dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
AWS Organizations adalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.
Amazon Simple Notification Service (Amazon SNS) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email.
Repositori kode
Kode untuk pola ini tersedia di repositori GitHub automated-code-pipeline-stackset-deployment
Praktik terbaik
Pola ini membatasi akses langsung ke akun manajemen saat menerapkan aplikasi di tingkat OU. Menambahkan beberapa tahapan persetujuan ke proses pipeline dan repositori membantu memberikan keamanan dan tata kelola tambahan untuk aplikasi dan komponen yang Anda terapkan dengan menggunakan pendekatan ini.
Epik
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Aktifkan semua fitur di akun manajemen. | Aktifkan semua fitur di akun manajemen untuk organisasi Anda dengan mengikuti petunjuk dalam dokumentasi AWS Organizations. | Administrator AWS, Administrator platform |
Buat CI/CD akun. | Di AWS Organizations, di organisasi Anda, buat CI/CD akun khusus, dan tetapkan tim untuk memiliki dan mengontrol akses ke akun. | Administrator AWS |
Tambahkan administrator yang didelegasikan. | Di akun manajemen, daftarkan CI/CD akun yang Anda buat di langkah sebelumnya sebagai administrator kumpulan tumpukan yang didelegasikan. Untuk petunjuk, lihat CloudFormation dokumentasi AWS. | Administrator AWS, Administrator platform |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Kloning repositori kode. |
| AWS DevOps |
Buat topik SNS. | Anda dapat menggunakan
| AWS DevOps |
Buat peran IAM untuk CI/CD komponen. | Anda dapat menggunakan
| AWS DevOps |
Buat CodeCommit repositori dan pipeline kode untuk aplikasi Anda. | Anda dapat menggunakan
| AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Kloning repositori aplikasi. | Template CI/CD pipeline yang Anda gunakan sebelumnya membuat contoh repositori aplikasi dan pipeline kode. Untuk mengkloning dan memverifikasi repositori:
| Pengembang aplikasi, Insinyur data |
Tambahkan artefak aplikasi. | Perbarui repositori aplikasi dengan menggunakan template. CloudFormation catatanSolusi ini mendukung penyebaran hanya satu CloudFormation template.
| Pengembang aplikasi, Insinyur data |
Perbarui file konfigurasi penyebaran. | Perbarui
Pola ini membuat kumpulan tumpukan individual untuk setiap lingkungan dengan menambahkan nama lingkungan ke nama set tumpukan yang Anda berikan dalam file konfigurasi penerapan. | Pengembang aplikasi, Insinyur data |
Komit perubahan dan terapkan set tumpukan. | Komit perubahan yang Anda tentukan dalam template aplikasi Anda, dan gabungkan serta terapkan kumpulan tumpukan ke beberapa lingkungan tahap demi tahap:
| Pengembang aplikasi, Insinyur data |
Pemecahan Masalah
Isu | Solusi |
---|---|
Penerapan gagal dengan pengecualian: Ubah Nama file Parameter Template sebagai -parameter- .json dengan, nama default tidak diperbolehkan <application name><evn> | File parameter CloudFormation template harus mengikuti konvensi penamaan yang ditentukan. Perbarui nama file parameter dan coba lagi. |
Penerapan gagal dengan pengecualian: Mengubah Nama CloudFormation Template sebagai.yl, default template.yml/template.yaml tidak diperbolehkan <application name> | Nama CloudFormation template harus mengikuti konvensi penamaan yang ditentukan. Perbarui nama file dan coba lagi. |
Penerapan gagal dengan pengecualian: Tidak ada CloudFormation Template yang valid dan File Parameternya yang ditemukan untuk lingkungan {nama lingkungan} | Periksa konvensi penamaan file untuk CloudFormation templat dan file parameternya untuk lingkungan yang ditentukan. |
Penerapan gagal dengan pengecualian: Tindakan penerapan tidak valid yang disediakan dalam file konfigurasi penerapan. Opsi yang valid adalah 'menyebarkan' dan 'hapus'. | Anda menetapkan nilai yang tidak valid untuk |
Sumber daya terkait
GitHub automated-code-pipeline-stackset-repositori penyebaran
Mengaktifkan semua fitur di organisasi Anda (dokumentasi AWS Organizations)
Daftarkan administrator yang didelegasikan ( CloudFormation dokumentasi AWS)
Target tingkat akun untuk Set Stack yang dikelola layanan (dokumentasi CloudFormation AWS)
Informasi tambahan
Diagram alir
Diagram alir berikut menggambarkan kontrol aliran dan hierarki panggilan API yang diimplementasikan oleh skrip khusus untuk mengotomatiskan penerapan set tumpukan.

Contoh file konfigurasi penyebaran
Membuat set tumpukan baru
File konfigurasi penerapan berikut membuat kumpulan tumpukan baru yang disebut sample-stack-set
di Wilayah AWS us-east-1
dalam tiga OUs.
{ "deployment_action": "deploy", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }
Menerapkan tumpukan yang ada disetel ke OU lain
Jika Anda menerapkan konfigurasi yang ditunjukkan pada contoh sebelumnya dan Anda ingin menerapkan kumpulan tumpukan ke OU tambahan yang dipanggil dev-org-unit-2
di lingkungan pengembangan, file konfigurasi penerapan mungkin terlihat seperti berikut ini.
{ "deployment_action": "deploy", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1", "dev-org-unit-2"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }
Menerapkan tumpukan yang ada yang disetel ke Wilayah AWS lain
Jika Anda menerapkan konfigurasi yang ditunjukkan pada contoh sebelumnya dan Anda ingin menerapkan kumpulan tumpukan ke AWS Region (us-east-2
) tambahan di lingkungan pengembangan untuk dua OUs (dev-org-unit-1
dandev-org-unit-2
), file konfigurasi penerapan mungkin terlihat seperti berikut.
catatan
Sumber daya dalam CloudFormation template harus valid dan spesifik Wilayah.
{ "deployment_action": "deploy", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1", "dev-org-unit-2"], "regions": ["us-east-1", "us-east-2"], "filter_accounts": [], "filter_type": "" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }
Menghapus instans tumpukan dari Wilayah OU atau AWS
Katakanlah konfigurasi penerapan yang ditunjukkan pada contoh sebelumnya telah diterapkan. File konfigurasi berikut menghapus instance tumpukan dari kedua Wilayah OUdev-org-unit-2
.
{ "deployment_action": "deploy", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1"], "regions": ["us-east-1", "us-east-2"], "filter_accounts": [], "filter_type": "" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }
File konfigurasi berikut menghapus instance tumpukan dari Wilayah AWS us-east-1
untuk keduanya OUs di lingkungan pengembangan.
{ "deployment_action": "deploy", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1", "dev-org-unit-2"], "regions": ["us-east-2"], "filter_accounts": [], "filter_type": "" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }
Menghapus seluruh set tumpukan
File konfigurasi penerapan berikut menghapus seluruh kumpulan tumpukan dan semua instance tumpukan yang terkait.
{ "deployment_action": "delete", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1", "dev-org-unit-2"], "regions": ["us-east-2"], "filter_accounts": [], "filter_type": "" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }
Mengecualikan akun dari penerapan
File konfigurasi penyebaran berikut mengecualikan akun111122223333
, yang merupakan bagian dari OUdev-org-unit-1
, dari penerapan.
{ "deployment_action": "deploy", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": ["111122223333"], "filter_type": "DIFFERENCE" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }
Menyebarkan aplikasi ke subset akun di OU
File konfigurasi deployment berikut menyebarkan aplikasi ke hanya tiga akun (111122223333
,444455556666
, dan777788889999
) di OU. dev-org-unit-1
{ "deployment_action": "deploy", "stack_set_name": "sample-stack-set", "stack_set_desciption": "this is a sample stack set", "deployment_targets": { "dev": { "org_units": ["dev-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": ["111122223333", "444455556666", "777788889999"], "filter_type": "INTERSECTION" }, "test": { "org_units": ["test-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" }, "prod": { "org_units": ["prod-org-unit-1"], "regions": ["us-east-1"], "filter_accounts": [], "filter_type": "" } }, "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"], "auto_deployement": "True", "retain_stacks_on_account_removal": "True", "region_deployment_concurrency": "PARALLEL" }