Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Otomatiskan manajemen pipeline dinamis untuk menerapkan solusi perbaikan terbaru di lingkungan Gitflow dengan menggunakan dan AWS Service CatalogAWS CodePipeline
Balaji Vedagiri, Faisal Shahdad, Shanmugam Shanker, dan Vivek Thangamuthu, Amazon Web Services
Ringkasan
catatan
AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya
Pola ini membahas skenario pengelolaan pipeline hotfix dinamis yang didedikasikan semata-mata untuk menerapkan solusi hotfix ke lingkungan produksi dengan aman. Solusinya diimplementasikan dan dikelola dengan menggunakan AWS Service Catalog portofolio dan produk. EventBridge Aturan Amazon digunakan untuk otomatisasi acara. Pembatasan diberlakukan dengan menggunakan batasan portofolio Service Catalog dan peran AWS Identity and Access Management (IAM) untuk pengembang. Hanya AWS Lambda fungsi yang diizinkan untuk meluncurkan produk Service Catalog, yang dipicu oleh EventBridge aturan. Pola ini dirancang untuk lingkungan dengan pengaturan Gitflow tertentu, yang dijelaskan dalam Informasi tambahan.
Biasanya, perbaikan terbaru diterapkan untuk mengatasi masalah kritis atau keamanan yang dilaporkan di lingkungan hidup, seperti Produksi. Perbaikan terbaru harus diterapkan langsung ke lingkungan Pementasan dan Produksi saja. Pipa Pementasan dan Produksi digunakan secara luas untuk permintaan pengembangan reguler. Pipeline ini tidak dapat digunakan untuk menerapkan perbaikan terbaru karena ada fitur berkelanjutan dalam jaminan kualitas yang tidak dapat dipromosikan ke Produksi. Untuk merilis perbaikan terbaru, pola ini menjelaskan pipeline dinamis dan berumur pendek dengan fitur keamanan berikut:
Pembuatan otomatis - Saluran hotfix dibuat secara otomatis setiap kali cabang hotfix dibuat di repositori. AWS CodeCommit
Pembatasan akses — Pengembang tidak memiliki akses untuk membuat pipeline ini di luar proses perbaikan terbaru.
Tahap terkontrol — Pipeline memiliki tahap terkontrol dengan token akses khusus, memastikan bahwa permintaan tarik (PR) hanya dapat dibuat sekali.
Tahap persetujuan — Tahapan persetujuan disertakan dalam jalur pipa untuk mendapatkan persetujuan yang diperlukan dari pemangku kepentingan terkait.
Penghapusan otomatis - Pipa hotfix secara otomatis dihapus setiap kali
hotfix
cabang dihapus di CodeCommit repositori setelah digabungkan dengan PR.
Prasyarat dan batasan
Prasyarat
Tiga aktif Akun AWS diperlukan sebagai berikut:
Akun alat - Untuk pengaturan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD).
Akun panggung - Untuk pengujian penerimaan pengguna.
Akun produksi - Untuk pengguna akhir bisnis.
(Opsional) Tambahkan Akun AWS untuk bertindak sebagai akun QA. Akun ini diperlukan jika Anda menginginkan penyiapan pipeline utama, termasuk QA, dan solusi pipeline hotfix untuk pengujian.
AWS CloudFormation Tumpukan dengan kondisi opsional untuk diterapkan di akun QA menggunakan pipeline utama, jika diperlukan. Pola masih dapat diuji tanpa pengaturan pipeline utama dengan membuat dan menghapus
hotfix
cabang.Bucket Amazon Simple Storage Service (Amazon S3) untuk menyimpan CloudFormation template yang digunakan untuk membuat produk Service Catalog.
Buat aturan persetujuan PR untuk CodeCommit repositori sesuai dengan persyaratan kepatuhan (setelah membuat repositori).
Batasi izin IAM dari pengembang dan arahan tim untuk menolak eksekusi fungsi prcreation-lambda Lambda karena harus dipanggil
hanya dari pipeline.
Batasan
CloudFormation Penyedia digunakan dalam tahap penerapan, dan aplikasi dikerahkan menggunakan set CloudFormation perubahan. Jika Anda ingin menggunakan opsi penyebaran yang berbeda, ubah CodePipeline tumpukan sesuai kebutuhan.
Pola ini menggunakan AWS CodeBuild dan file konfigurasi lainnya untuk menyebarkan layanan mikro sampel. Jika Anda memiliki jenis beban kerja yang berbeda (misalnya, beban kerja tanpa server), Anda harus memperbarui semua konfigurasi yang relevan.
Pola ini menyebarkan aplikasi dalam satu Wilayah AWS (misalnya, US East (Virginia N.) us-east-1) di seberang. Akun AWS Untuk menyebarkan di beberapa Wilayah, ubah referensi Wilayah dalam perintah dan tumpukan.
Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat layanan AWS menurut Wilayah
. Untuk titik akhir tertentu, lihat Titik akhir dan kuota layanan, dan pilih tautan untuk layanan.
Arsitektur
Diagram di bagian ini menyediakan alur kerja untuk peristiwa siklus hidup pembuatan dan untuk peristiwa siklus hidup penghapusan.

Diagram sebelumnya untuk membuat peristiwa siklus hidup menunjukkan hal berikut:
Pengembang membuat
hotfix-*
cabang di CodeCommit repositori untuk mengembangkan solusi terkait hotfix.Acara pembuatan
hotfix-*
cabang ditangkap melalui EventBridge aturan. Rincian acara termasuk nama repositori dan nama cabang.EventBridge Aturan memanggil AWS Lambda fungsi
hotfix-lambda-function
. EventBridge Aturan meneruskan informasi acara ke fungsi Lambda sebagai input.Fungsi Lambda memproses input untuk mengambil nama repositori dan nama cabang. Ini meluncurkan produk Service Catalog dengan nilai yang diambil dari input yang diproses.
Produk Service Catalog mencakup pengaturan pipeline yang akan menyebarkan solusi ke lingkungan Stage dan Production. Blok pipa mencakup tahapan sumber, pembuatan, dan penerapan. Juga, ada tahap persetujuan manual untuk mempromosikan penyebaran untuk lingkungan Produksi.
Tahap sumber mengambil kode dari repositori dan
hotfix-*
cabang yang dibuat pada langkah pertama. Kode diteruskan ke tahap pembuatan melalui bucket Amazon S3 untuk artefak. Pada tahap build, image container dibuat yang menyertakan hotfix yang dikembangkan dihotfix-*
cabang dan didorong ke Amazon Elastic Container Registry (Amazon ECR).Tahap penerapan ke lingkungan panggung memperbarui Amazon Elastic Container Service (Amazon ECS) dengan image container terbaru yang menyertakan hotfix. Hotfix digunakan dengan membuat dan mengeksekusi set perubahan. CloudFormation
Fungsi
prcreation-lambda
Lambda dipanggil setelah penerapan berhasil di lingkungan Stage. Fungsi Lambda ini membuat PR darihotfix-*
cabang kedevelop
danmain
cabang repositori. Fungsi Lambda memastikan bahwa perbaikan yang dikembangkan dihotfix-*
cabang terbelakang dan disertakan dalam penerapan berikutnya.Tahap persetujuan manual membantu memastikan bahwa pemangku kepentingan yang diperlukan meninjau perbaikan dan memberikan persetujuan untuk diterapkan dalam Produksi.
Tahap penerapan ke lingkungan produksi memperbarui Amazon ECS dengan gambar kontainer terbaru yang menyertakan perbaikan terbaru. Hotfix digunakan dengan membuat dan mengeksekusi set perubahan. CloudFormation

Diagram sebelumnya untuk menghapus peristiwa siklus hidup menunjukkan hal berikut:
Pengembang menghapus
hotfix-*
cabang setelah berhasil menyebarkan hotfix ke lingkungan produksi.Peristiwa penghapusan
hotfix-*
cabang ditangkap melalui aturan. EventBridge Rincian acara termasuk nama repositori dan nama cabang.EventBridge Aturan tersebut memanggil fungsi Lambda. EventBridge Aturan meneruskan informasi acara ke fungsi Lambda sebagai input.
Fungsi Lambda memproses input untuk mengambil nama repositori dan nama cabang. Fungsi Lambda menentukan produk Service Catalog masing-masing dari input yang diteruskan dan kemudian mengakhiri produk.
Penghentian produk yang disediakan oleh Service Catalog menghapus pipeline dan sumber daya yang relevan yang dibuat sebelumnya dalam produk tersebut.
Otomatisasi dan skala
Pola ini mencakup EventBridge aturan dan fungsi Lambda, yang dapat menangani beberapa permintaan pembuatan cabang hotfix secara paralel. Fungsi Lambda menyediakan produk Service Catalog untuk aturan acara yang cocok.
Penyiapan pipeline ditangani dengan menggunakan produk Service Catalog, yang menyediakan kemampuan kontrol versi. Solusi ini juga menskalakan secara otomatis untuk menangani beberapa pengembangan perbaikan terbaru untuk aplikasi yang sama secara paralel.
Fungsi prcreation-lambda
memastikan bahwa perubahan hotfix ini juga digabungkan kembali ke dalam main
dandevelop
cabang melalui pembuatan permintaan tarik otomatis. Pendekatan ini penting untuk menjaga agardevelop
cabang tetap up to date dengan semua perbaikan dan menghindari potensi regresi kode.main
Proses ini membantu menjaga konsistensi di seluruh cabang dan mencegah regresi kode dengan memastikan bahwa semua cabang berumur panjang memiliki perbaikan terbaru.
Alat
Layanan AWS
AWS CloudFormationmembantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
AWS CodeBuildadalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
AWS CodeCommitadalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi, tanpa perlu mengelola sistem kontrol sumber Anda sendiri. AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Untuk informasi selengkapnya, lihat Cara memigrasikan AWS CodeCommit repositori Anda ke penyedia Git lain
. AWS CodePipelinemembantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
Amazon Elastic Container Service (Amazon ECS) adalah layanan manajemen kontainer yang cepat dan dapat diskalakan yang membantu Anda menjalankan, menghentikan, dan mengelola kontainer di klaster.
AWS Key Management Service (AWS KMS) membantu Anda membuat dan mengontrol kunci kriptografi untuk membantu melindungi data Anda.
AWS Service Catalogmembantu Anda mengelola katalog layanan TI secara terpusat yang disetujui. AWS Pengguna akhir dapat dengan cepat men-deploy hanya layanan IT yang disetujui yang mereka butuhkan, mengikuti batasan yang ditetapkan oleh organisasi Anda.
Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
Alat lainnya
AWS CloudFormation Linter (cfn-lint)
adalah linter yang memeriksa template CloudFormation YAMAL atau JSON terhadap spesifikasi sumber daya. CloudFormation Ini juga melakukan pemeriksaan lain, seperti memeriksa nilai yang valid untuk properti sumber daya dan kepatuhan terhadap praktik terbaik. cfn-nag
adalah alat open source yang mengidentifikasi potensi masalah keamanan dalam CloudFormation template dengan mencari pola. Docker
adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. Pola ini menggunakan Docker untuk membangun dan menguji gambar kontainer secara lokal. Git
adalah sistem kontrol versi terdistribusi open-source.
Repositori kode
Kode untuk pola ini tersedia di repositori GitHub dynamic_hotfix_codepipeline
Praktik terbaik
Tinjau dan sesuaikan peran IAM dan kebijakan kontrol layanan (SCP) di lingkungan Anda untuk memastikan bahwa mereka membatasi akses dengan tepat. Ini sangat penting untuk mencegah tindakan apa pun yang dapat mengesampingkan langkah-langkah keamanan yang termasuk dalam pola ini. Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat Berikan hak istimewa terkecil dan praktik terbaik Keamanan dalam dokumentasi IAM.
Epik
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Kloning repositori. | Untuk mengkloning repositori
| AWS DevOps |
Ekspor variabel lingkungan untuk penyebaran CloudFormation tumpukan. | Tentukan variabel lingkungan berikut yang akan digunakan sebagai masukan ke CloudFormation tumpukan nanti dalam pola ini.
| AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Buat sumber daya yang diperlukan untuk CI/CD di akun alat. | Untuk menyebarkan CloudFormation tumpukan di akun alat, gunakan perintah berikut. (Hapus
Catat sumber daya yang dibuat oleh CodeCommit repositori dan Amazon ECR dari tumpukan sebelumnya. Parameter ini diperlukan untuk mengatur | AWS DevOps |
Buat sumber daya yang diperlukan untuk CI/CD akun beban kerja. |
| AWS DevOps |
Perbarui kebijakan bucket artefak S3 untuk mengizinkan akses akun beban kerja. | Untuk memperbarui prasyarat CloudFormation tumpukan di akun alat, gunakan perintah berikut untuk menambahkan semua izin yang diperlukan untuk akun beban kerja Tahap dan Produksi. (Hapus
| AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Siapkan portofolio dan produk Service Catalog. | Untuk menyiapkan portofolio dan produk Service Catalog, lakukan hal berikut:
| AWS DevOps |
Siapkan fungsi Lambda. | Solusi ini menggunakan fungsi Lambda berikut untuk mengelola alur kerja hotfix:
Untuk mengaktifkan fungsi Lambda untuk menyediakan dan menghentikan produk Service Catalog saat
| AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Siapkan pipa untuk | Untuk mengatur pipeline untuk cabang utama, jalankan perintah berikut di akun alat. Ganti parameter untuk
| AWS DevOps |
Menyebarkan aplikasi menggunakan |
| AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Buat | Untuk membuat pipeline untuk
| AWS DevOps |
Hapus | Untuk menghapus
| AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Bersihkan sumber daya yang digunakan. | Untuk membersihkan sumber daya yang digunakan sebelumnya, lakukan hal berikut:
Untuk informasi selengkapnya, lihat Menghapus produk yang disediakan di dokumentasi Service Catalog. | AWS DevOps |
Pemecahan Masalah
Isu | Solusi |
---|---|
Perubahan yang Anda komit ke CodeCommit repositori tidak diterapkan. | Periksa CodeBuild log untuk kesalahan dalam tindakan build Docker. Lihat informasi yang lebih lengkap dalam dokumentasi CodeBuild . |
Produk Service Catalog tidak sedang disediakan. | Tinjau CloudFormation tumpukan terkait untuk peristiwa yang gagal. Lihat informasi yang lebih lengkap dalam dokumentasi CloudFormation . |
Sumber daya terkait
Informasi tambahan
Pola ini dirancang untuk lingkungan dengan pengaturan Gitflow yang diadopsi untuk alur kerja pengembangan dalam proses CI/CD . Pipa mengikuti siklus penyebaran yang dimulai dari pengembangan dan bergerak melalui jaminan kualitas (QA), tahap, dan lingkungan produksi. CI/CD Penyiapan mencakup dua cabang git dengan penerapan promosi ke lingkungan sebagai berikut:
develop
Cabang menyebar ke lingkungan pengembangan.main
Cabang menyebar ke lingkungan QA, panggung, dan produksi.
Dalam pengaturan ini, merupakan tantangan untuk menerapkan perbaikan terbaru atau patch keamanan lebih cepat daripada siklus penerapan biasa sementara pengembangan aktif fitur baru sedang berlangsung. Proses khusus diperlukan untuk mengatasi perbaikan terbaru atau permintaan keamanan, memastikan bahwa lingkungan hidup tetap berfungsi dengan baik dan aman.
Namun, Anda dapat menggunakan opsi lain yang tersedia tanpa memerlukan proses penyebaran khusus jika:
CI/CD Proses ini dilengkapi dengan pengujian otomatis, seperti fungsional dan end-to-end pengujian, yang menghilangkan kebutuhan untuk pengujian manual dan mencegah penundaan penerapan ke produksi. Namun, jika pengujian otomatis tidak terintegrasi dengan baik ke dalam CI/CD proses, mendorong perbaikan kecil ke lingkungan produksi dapat menjadi kompleks dan rumit bagi pengembang. Ini karena mungkin ada fitur baru yang menunggu di lingkungan QA untuk persetujuan dan sign-off. Perbaikan terbaru atau perbaikan keamanan tidak dapat didorong ke produksi secara langsung secara bersamaan.
Tim pengembangan terus menerapkan fitur baru ke dalam lingkungan produksi, mengintegrasikan perbaikan terbaru atau patch keamanan ke dalam penerapan terjadwal dari setiap fitur baru. Dengan kata lain, pembaruan fitur berikutnya ke lingkungan produksi terdiri dari dua komponen: Penambahan fitur baru dan dimasukkannya hotfix atau patch keamanan. Namun, jika siklus penerapan tidak berkelanjutan, mungkin ada beberapa fitur baru yang sudah menunggu persetujuan di lingkungan QA. Mengelola versi yang berbeda dan memastikan perubahan yang benar diterapkan kembali kemudian dapat menjadi kompleks dan rawan kesalahan.
catatan
Jika Anda menggunakan versi 2 AWS CodePipeline dengan pemicu yang tepat yang disiapkan di hotfix
cabang, Anda masih memerlukan proses khusus untuk menangani permintaan yang tidak terjadwal. Di versi 2, Anda dapat mengatur pemicu untuk permintaan push atau pull. Eksekusi akan segera diantri atau dieksekusi, tergantung pada keadaan pipa sebelumnya. Namun, dengan pipa khusus, perbaikan diterapkan segera ke lingkungan produksi, memastikan bahwa masalah mendesak diselesaikan tanpa penundaan.