Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Optimalkan penerapan tanpa server multi-akun dengan menggunakan alur kerja dan Tindakan AWS CDK GitHub
Sarat Chandra Pothula dan VAMSI KRISHNA SUNKAVALLI, Amazon Web Services
Ringkasan
Organizations yang menerapkan infrastruktur tanpa server di berbagai lingkungan Akun AWS dan sering menghadapi tantangan seperti duplikasi kode, proses manual, dan praktik yang tidak konsisten. Solusi pola ini menunjukkan cara menggunakan alur kerja AWS Cloud Development Kit (AWS CDK) dalam Go and GitHub Actions yang dapat digunakan kembali untuk merampingkan manajemen infrastruktur tanpa server multi-akun. Solusi ini menunjukkan bagaimana Anda dapat mendefinisikan sumber daya cloud sebagai kode, menerapkan proses integration/continuous penerapan berkelanjutan standar (CI/CD), dan membuat komponen modular yang dapat digunakan kembali.
Dengan menggunakan alat ini, organisasi dapat mengelola sumber daya lintas akun secara efisien, menerapkan pipeline penyebaran yang konsisten, dan menyederhanakan arsitektur tanpa server yang kompleks. Pendekatan ini juga meningkatkan keamanan dan kepatuhan dengan menegakkan praktik standar untuk digunakan Akun AWS, pada akhirnya meningkatkan produktivitas dan mengurangi kesalahan dalam pengembangan dan penerapan aplikasi tanpa server.
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS.
AWS Identity and Access Management (IAM) peran dan izin ada untuk proses penerapan. Ini termasuk izin untuk mengakses repositori Amazon Elastic Container Registry (Amazon ECR) Registry, membuat AWS Lambda fungsi, dan sumber daya lain yang diperlukan di seluruh target. Akun AWS
AWS Command Line Interface (AWS CLI) versi 2.9.11 atau yang lebih baru, diinstal dan dikonfigurasi.
AWS Cloud Development Kit (AWS CDK) versi 2.114.1 atau yang lebih baru, diinstal dan di-bootstrap.
Go 1.22 atau yang lebih baru, diinstal
.
Batasan
Kompatibilitas bahasa — Go adalah bahasa populer untuk aplikasi tanpa server. Namun, selain Go, AWS CDK mendukung bahasa pemrograman lainnya, termasuk C #, Java, Python, dan. TypeScript Jika organisasi Anda memiliki basis kode atau keahlian dalam bahasa lain, Anda mungkin perlu mengadaptasi atau mempelajari Go untuk sepenuhnya menggunakan solusi yang dijelaskan dalam pola.
Kurva belajar — Mengadopsi alur kerja AWS CDK, Go (jika baru bagi organisasi), dan alur kerja yang GitHub dapat digunakan kembali mungkin melibatkan kurva pembelajaran untuk pengembang dan tim. DevOps Pelatihan dan dokumentasi mungkin diperlukan untuk memastikan kelancaran adopsi dan penggunaan teknologi ini secara efektif.
Arsitektur
Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

Solusi ini melakukan langkah-langkah berikut:
Pengembang mengkloning repositori, membuat cabang baru, dan membuat perubahan pada kode aplikasi di lingkungan lokal mereka.
Pengembang melakukan perubahan ini dan mendorong cabang baru ke repositori. GitHub
Pengembang membuat permintaan tarik di GitHub repositori, mengusulkan untuk menggabungkan fitur atau cabang fitur baru mereka ke cabang utama.
Permintaan tarik ini memicu alur kerja GitHub Tindakan integrasi berkelanjutan (CI). CI dan alur kerja penerapan berkelanjutan (CD) dalam pola ini menggunakan alur kerja yang dapat digunakan kembali, yang merupakan templat modular yang telah ditentukan sebelumnya yang dapat dibagikan dan dieksekusi di berbagai proyek atau repositori. Alur kerja yang dapat digunakan kembali mempromosikan standardisasi dan efisiensi dalam proses. CI/CD
Alur kerja CI menyiapkan lingkungan yang diperlukan, menghasilkan tag Docker untuk gambar, dan membangun image Docker menggunakan kode aplikasi.
Alur kerja CI mengautentikasi AWS dengan menggunakan peran Akun AWS GitHub OIDC pusat. Untuk alur kerja CI, peran Akun AWS GitHub OIDC pusat menggunakan AWS Security Token Service (AWS STS) untuk mendapatkan kredensil sementara. Kredensi ini memungkinkan peran untuk membangun dan mendorong gambar Docker ke repositori Amazon ECR pusat. Akun AWS
Alur kerja CI mendorong image Docker yang dibangun ke Amazon ECR.
Alur kerja CI menyimpan tag gambar ke Systems Manager Parameter Store.
Setelah alur kerja CI berhasil diselesaikan, tag gambar Docker akan dikeluarkan.
Saat memicu alur kerja CD, pengembang secara manual memasukkan tag gambar gambar Docker yang ingin mereka terapkan. Tag gambar ini sesuai dengan tag yang dihasilkan dan didorong ke Amazon ECR selama alur kerja CI.
Pengembang secara manual memicu alur kerja CD, yang menggunakan alur kerja CD yang dapat digunakan kembali.
Alur kerja CD mengautentikasi dengan AWS menggunakan peran Akun AWS GitHub OIDC pusat. Untuk alur kerja CD, pertama kali AWS STS digunakan untuk mengasumsikan peran Akun AWS GitHub OIDC pusat. Kemudian, peran ini mengasumsikan peran bootstrap CDK untuk penerapan akun target.
Alur kerja CD menggunakan AWS CDK untuk mensintesis template AWS CloudFormation .
Alur kerja CD menyebarkan aplikasi ke target Akun AWS dengan menggunakan penyebaran CDK, menggunakan tag gambar yang ditentukan secara manual untuk fungsi Lambda.
Alat
Layanan AWS
AWS Cloud Development Kit (AWS CDK)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode.
AWS CloudFormationmembantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS CloudFormation merupakan bagian integral dari proses AWS CDK penyebaran. CDK mensintesis CloudFormation template dan kemudian digunakan CloudFormation untuk membuat atau memperbarui sumber daya di lingkungan. AWS
Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
AWS Systems Manager Parameter Store menyediakan penyimpanan hierarkis yang aman untuk manajemen data konfigurasi dan manajemen rahasia.
Alat-alat lainnya
Docker
adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. GitHub Actions
adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment. Go
adalah bahasa pemrograman open source yang didukung Google.
Repositori kode
Kode untuk pola ini tersedia di cicd-github-actions repositori GitHub aws-cdk-golang-serverless-
Praktik terbaik
Desain modular - Atur AWS CDK kode Anda ke dalam konstruksi atau tumpukan modular dan dapat digunakan kembali, mempromosikan penggunaan kembali kode dan pemeliharaan di beberapa akun dan proyek.
Pemisahan kekhawatiran — Pisahkan kode infrastruktur dari kode aplikasi, memungkinkan penyebaran dan pengelolaan independen setiap komponen.
Pembuatan versi dan kekekalan — Perlakukan infrastruktur Anda sebagai kode (IAc), dan gunakan Git untuk kontrol versi. Merangkul prinsip-prinsip infrastruktur yang tidak dapat diubah dengan menciptakan sumber daya baru alih-alih memodifikasi yang sudah ada.
Pengujian dan validasi — Menerapkan strategi pengujian komprehensif, termasuk pengujian unit, pengujian integrasi, dan end-to-end pengujian, untuk membantu mendukung kebenaran dan keandalan AWS CDK kode dan penerapan Anda.
Keamanan dan kepatuhan — Ikuti praktik terbaik AWS keamanan, seperti akses hak istimewa, komunikasi aman, dan enkripsi data. Menerapkan pemeriksaan kepatuhan dan mekanisme audit untuk memastikan kepatuhan terhadap kebijakan organisasi dan persyaratan peraturan. Menerapkan praktik terbaik keamanan untuk gambar kontainer, seperti memindai kerentanan, menegakkan penandatanganan gambar, dan mematuhi persyaratan kepatuhan untuk organisasi Anda.
Pemantauan dan pencatatan - Siapkan mekanisme pemantauan dan pencatatan untuk melacak kesehatan dan kinerja aplikasi dan infrastruktur tanpa server Anda. Gunakan Layanan AWS seperti Amazon CloudWatch, AWS CloudTrail, dan AWS X-Ray untuk tujuan pemantauan dan audit.
Otomatisasi dan CI/CD — Gunakan alur kerja yang GitHub dapat digunakan kembali dan CI/CD alat lain untuk mengotomatiskan proses pembuatan, pengujian, dan penerapan, yang dapat membantu mendukung penerapan yang konsisten dan berulang di beberapa akun.
Manajemen lingkungan - Mempertahankan lingkungan yang terpisah (misalnya, pengembangan, pementasan, dan produksi). Menerapkan strategi untuk mempromosikan perubahan antar lingkungan, memastikan pengujian dan validasi yang tepat sebelum penerapan produksi.
Dokumentasi dan kolaborasi — Dokumentasikan kode infrastruktur, proses penyebaran, dan praktik terbaik untuk memfasilitasi berbagi pengetahuan dan kolaborasi dalam tim Anda.
Optimalisasi biaya — Menerapkan strategi pemantauan dan pengoptimalan biaya, seperti rightsizing sumber daya, memanfaatkan auto-scaling, dan memanfaatkan layanan pengoptimalan biaya seperti dan. AWS AWS Budgets AWS Cost Explorer
Pemulihan dan pencadangan bencana - Rencanakan skenario pemulihan bencana dengan menerapkan mekanisme pencadangan dan pemulihan untuk aplikasi dan sumber daya infrastruktur tanpa server Anda.
Peningkatan berkelanjutan - Tinjau secara teratur dan perbarui praktik, alat, dan proses Anda agar selaras dengan praktik terbaik terbaru, rekomendasi keamanan, dan kemajuan teknologi dalam ekosistem tanpa server.
Tingkatkan postur keamanan — Gunakan AWS PrivateLinkuntuk meningkatkan postur keamanan virtual private cloud (VPC) Anda dengan mengonfigurasi titik akhir VPC antarmuka untuk Amazon AWS Lambda ECR,, dan Parameter Store. AWS Systems Manager
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat repositori Amazon ECR di pusat. Akun AWS | Untuk berbagi gambar kontainer di beberapa Akun AWS, Anda harus mengonfigurasi akses lintas akun untuk Amazon ECR. Pertama, buat repositori Amazon ECR di pusat. Akun AWS Untuk membuat repositori Amazon ECR, jalankan perintah berikut:
Dalam tugas selanjutnya, berikan akses tarik ke yang lain Akun AWS yang perlu menggunakan gambar kontainer. | AWS DevOps |
Tambahkan izin lintas akun ke repositori Amazon ECR. | Untuk menambahkan izin lintas akun ke repositori Amazon ECR di pusat Akun AWS, jalankan kode berikut:
| AWS DevOps |
Konfigurasikan peran untuk peran GitHub OIDC di pusat. Akun AWS |
| AWS DevOps |
Bootstrap AWS lingkungan di target Akun AWS. | Siapkan lingkungan CDK secara spesifik Akun AWS dan Wilayah AWS yang memungkinkan penyebaran lintas akun dari akun pusat dan menerapkan prinsip hak istimewa paling sedikit ke peran eksekusi. CloudFormation Untuk bootstrap AWS lingkungan, jalankan perintah berikut:
| AWS DevOps |
Berikan akses peran Akun AWS OIDC pusat ke peran Akun AWS bootstrap target. | Bootstrap CDK membuat peran IAM berikut yang dirancang untuk diasumsikan oleh pusat Akun AWS selama berbagai tahap proses penyebaran CDK:
Setiap peran memiliki izin khusus yang disesuaikan dengan tujuannya, mengikuti prinsip hak istimewa paling sedikit.
Untuk memperbarui kebijakan izin untuk peran OIDC di pusat Akun AWS, gunakan kode berikut:
| AWS DevOps |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Kloning repositori proyek. | Untuk mengkloning GitHub repositori
| AWS DevOps |
Pergi ke jalur Dockerfile. | Untuk menavigasi ke jalur Dockerfile, jalankan perintah berikut:
| AWS DevOps |
Otentikasi Docker dengan Amazon ECR. | Amazon ECR memerlukan akses aman ke repositori kontainer pribadi Anda. Dengan masuk dengan cara ini, Anda mengizinkan Docker di mesin atau CI/CD lingkungan lokal Anda untuk berinteraksi dengan Amazon ECR dengan aman. Untuk mengautentikasi Docker dengan Amazon ECR, jalankan perintah berikut:
Merevisi placeholder | AWS DevOps |
membuat gambar Docker. | Untuk membangun image Docker, jalankan perintah berikut:
| AWS DevOps |
Tandai dan dorong Gambar Docker. | Untuk menandai dan mendorong image Docker ke repositori Amazon ECR, jalankan perintah berikut:
Merevisi placeholder | AWS DevOps |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Sintesis tumpukan CDK dengan variabel khusus lingkungan. | Untuk menghasilkan CloudFormation template untuk infrastruktur Anda seperti yang didefinisikan dalam kode CDK Anda, jalankan perintah berikut:
Merevisi placeholder berikut dengan informasi Anda:
| AWS DevOps |
Menyebarkan tumpukan CDK. | Untuk menyebarkan tumpukan CDK ke Anda Akun AWS, jalankan perintah berikut.
| AWS DevOps |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat cabang fitur, dan tambahkan perubahan Anda. | Gunakan repositori kloning yang Anda buat sebelumnya, buat cabang fitur, lalu tambahkan perubahan Anda ke kode aplikasi. Gunakan salah satu perintah berikut ini:
Berikut ini adalah contoh perubahan:
GitHub Tindakan akan menggunakan alur kerja yang dapat digunakan kembali dan memicu saluran pipa. CI/CD | AWS DevOps |
Gabungkan perubahan Anda. | Buat permintaan tarik, dan gabungkan perubahan Anda ke main. | AWS DevOps |
Pemecahan Masalah
| Isu | Solusi |
|---|---|
| Untuk membantu mengatasi masalah ini, lakukan hal berikut untuk memverifikasi izin lintas akun:
|
Masalah kompatibilitas karena ketidakcocokan versi, misalnya, | Untuk membantu mengatasi masalah ini, lakukan hal berikut untuk memverifikasi bahwa Anda menggunakan versi AWS CDK dan Go yang diperlukan:
|
Kegagalan pipa CI/CD, misalnya, | Untuk membantu menyelesaikan masalah dengan konfigurasi GitHub Tindakan, verifikasi bahwa alur kerja yang dapat digunakan kembali direferensikan dan dikonfigurasi dengan benar. |
Sumber daya terkait
Sumber daya AWS
Sumber daya lainnya
Mengkonfigurasi OpenID Connect di Amazon
Web GitHub Services (dokumentasi) Quickstart untuk GitHub Tindakan
(GitHub dokumentasi)