Optimalkan penerapan tanpa server multi-akun dengan menggunakan alur kerja dan Tindakan AWS CDK GitHub - AWS Prescriptive Guidance

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

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.

Arsitektur alur kerja AWS CDK dan GitHub Actions untuk manajemen infrastruktur tanpa server multi-akun.

Solusi ini melakukan langkah-langkah berikut:

  1. Pengembang mengkloning repositori, membuat cabang baru, dan membuat perubahan pada kode aplikasi di lingkungan lokal mereka.

  2. Pengembang melakukan perubahan ini dan mendorong cabang baru ke repositori. GitHub

  3. Pengembang membuat permintaan tarik di GitHub repositori, mengusulkan untuk menggabungkan fitur atau cabang fitur baru mereka ke cabang utama.

  4. 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

  5. Alur kerja CI menyiapkan lingkungan yang diperlukan, menghasilkan tag Docker untuk gambar, dan membangun image Docker menggunakan kode aplikasi.

  6. 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

  7. Alur kerja CI mendorong image Docker yang dibangun ke Amazon ECR.

  8. Alur kerja CI menyimpan tag gambar ke Systems Manager Parameter Store.

  9. Setelah alur kerja CI berhasil diselesaikan, tag gambar Docker akan dikeluarkan.

  10. 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.

  11. Pengembang secara manual memicu alur kerja CD, yang menggunakan alur kerja CD yang dapat digunakan kembali.

  12. 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.

  13. Alur kerja CD menggunakan AWS CDK untuk mensintesis template AWS CloudFormation .

  14. 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

TugasDeskripsiKeterampilan 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:

aws ecr create-repository --repository-name sample-repo

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:

{ "Version": "2008-10-17", "Statement": [ { "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", ], "Condition": { "StringLike": { "aws:sourceArn": "arn:aws:lambda:<Target_Region>:<Target_Account_ID>:function:*" } } }, { "Sid": "new statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Target_Account_ID>:root" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", ], } ] }
AWS DevOps

Konfigurasikan peran untuk peran GitHub OIDC di pusat. Akun AWS

  1. Konfigurasikan AWS ke GitHub OIDC trust sebagai identitas federasi, yang mencakup penambahan penyedia GitHub OIDC ke AWS dan mengonfigurasi kebijakan peran dan kepercayaan di IAM. Untuk melakukannya, ikuti petunjuk dalam Mengonfigurasi OpenID Connect di Amazon Web Services GitHub dalam dokumentasi.

  2. Setelah peran dibuat, tambahkan izin yang diperlukan ke peran. Misalnya, tambahkan izin untuk Amazon ECR dan AWS Systems Manager Parameter Store. Untuk informasi selengkapnya, lihat Mengonfigurasi peran untuk penyedia identitas GitHub OIDC dalam dokumentasi IAM.

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:

cdk bootstrap aws://<Target_Account_ID>/<Target_Region> --trust <Central_Account_ID> --cloudformation-execution-policies arn:aws:iam::aws:policy/<Least_Privilege_Policy>
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:

  • Peran penerbitan file

  • Peran penerbitan gambar

  • Peran pencarian

  • Peran penyebaran

Setiap peran memiliki izin khusus yang disesuaikan dengan tujuannya, mengikuti prinsip hak istimewa paling sedikit. Target_Account_IDDan Target_Region di setiap nama peran membantu menunjukkan bahwa peran ini unik di berbagai wilayah Akun AWS dan wilayah. Pendekatan ini mendukung identifikasi dan manajemen yang jelas dalam pengaturan multi-akun, Multi-wilayah.

Target Account CDK Bootstrap Roles arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region> arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region> arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region> arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>
  • Perbarui kebijakan izin untuk peran OIDC di akun pusat untuk memberinya kemampuan untuk mengambil peran di akun target. Konfigurasi ini memungkinkan penyebaran tumpukan CDK di berbagai tempat. Akun AWS Dengan mengizinkan peran OIDC akun pusat untuk mengadopsi izin yang diperlukan dari akun target, Anda membuat jembatan aman untuk penyebaran CDK lintas akun. Pendekatan ini mempertahankan kontrol akses yang tepat sambil memfasilitasi manajemen infrastruktur multi-akun yang mulus.

Untuk memperbarui kebijakan izin untuk peran OIDC di pusat Akun AWS, gunakan kode berikut:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region>", "arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region>", "arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region>", "arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>" ] } ] }
AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori proyek.

Untuk mengkloning GitHub repositori pola ini, jalankan perintah berikut:

git clone https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions.git
AWS DevOps

Pergi ke jalur Dockerfile.

Untuk menavigasi ke jalur Dockerfile, jalankan perintah berikut:

cd lambda
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:

aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com

Merevisi placeholder AWS_REGION dan AWS_Account_ID dengan informasi Anda.

AWS DevOps

membuat gambar Docker.

Untuk membangun image Docker, jalankan perintah berikut:

docker build --platform linux/arm64 -t sample-app .
AWS DevOps

Tandai dan dorong Gambar Docker.

Untuk menandai dan mendorong image Docker ke repositori Amazon ECR, jalankan perintah berikut:

docker tag sample-app:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG>
docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG>

Merevisi placeholderAWS_Account_ID,, AWS_REGIONECR_REPOSITORY, dan DOCKER_TAG dengan informasi Anda.

AWS DevOps
TugasDeskripsiKeterampilan 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:

ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk synth

Merevisi placeholder berikut dengan informasi Anda:

  • environment— Diganti dengan nama lingkungan tertentu sepertidev,staging, atauprod.

  • image_tag— Ganti dengan tag tertentu untuk gambar Docker seperti v1.0.0 ataulatest.

  • ecr_repo_arn— Ganti dengan Nama Sumber Daya Amazon (ARN) dari repositori Amazon ECR.

AWS DevOps

Menyebarkan tumpukan CDK.

Untuk menyebarkan tumpukan CDK ke Anda Akun AWS, jalankan perintah berikut. --require-approval neverBendera berarti bahwa CDK akan secara otomatis menyetujui dan mengeksekusi semua perubahan. Ini termasuk perubahan yang biasanya ditandai CDK sebagai membutuhkan tinjauan manual (seperti perubahan kebijakan IAM atau penghapusan sumber daya). Pastikan kode CDK dan CI/CD pipeline Anda telah teruji dengan baik dan aman sebelum menggunakan --require-approval never flag di lingkungan produksi.

ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk deploy --require-approval never
AWS DevOps
TugasDeskripsiKeterampilan 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:

git checkout -b <feature_branch> git add . git commit -m "add your changes" git push origin <feature_branch>

Berikut ini adalah contoh perubahan:

  • Perubahan pada logika fungsi Lambda

  • Menambahkan fitur atau fungsionalitas baru ke kode Lambda

  • Memperbaiki bug atau mengoptimalkan kode yang ada dalam fungsi Lambda

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

IsuSolusi

AccessDeniedkesalahan saat menerapkan sumber daya di seluruh Akun AWS, misalnya,AccessDenied: User not authorized to perform: "sts:AssumeRole".

Untuk membantu mengatasi masalah ini, lakukan hal berikut untuk memverifikasi izin lintas akun:

  • Pastikan bahwa peran dan kebijakan IAM yang diperlukan tersedia untuk penerapan lintas akun.

  • Periksa apakah izin assume peran dikonfigurasi dengan benar.

Masalah kompatibilitas karena ketidakcocokan versi, misalnya, undefined: awscdkStack kesalahan dengan versi CDK yang sudah ketinggalan zaman.

Untuk membantu mengatasi masalah ini, lakukan hal berikut untuk memverifikasi bahwa Anda menggunakan versi AWS CDK dan Go yang diperlukan:

  • Pastikan Anda menggunakan versi yang kompatibel dari AWS CDK dan Go.

  • Periksa masalah yang diketahui atau melanggar perubahan dalam versi terbaru.

Kegagalan pipa CI/CD, misalnya, Error: No such file or directory karena konfigurasi YAMB yang salah atau Permission denied untuk cabang yang dilindungi.

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