Membuat CI/CD pipeline dan kluster Amazon ECS secara otomatis untuk layanan mikro menggunakan AWS CDK - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat CI/CD pipeline dan kluster Amazon ECS secara otomatis untuk layanan mikro menggunakan AWS CDK

Varsha Raju, Amazon Web Services

Ringkasan

Pola ini menjelaskan cara membuat integrasi berkelanjutan dan pengiriman berkelanjutan secara otomatis (CI/CD) pipelines and underlying infrastructure for building and deploying microservices on Amazon Elastic Container Service (Amazon ECS). You can use this approach if you want to set up proof-of-concept CI/CD pipelines to show your organization the benefits of CI/CD, microservices, and DevOps. You can also use this approach to create initial CI/CDpipeline yang kemudian dapat Anda sesuaikan atau ubah sesuai dengan kebutuhan organisasi Anda. 

Pendekatan pola menciptakan lingkungan produksi dan lingkungan non-produksi yang masing-masing memiliki virtual private cloud (VPC) dan cluster Amazon ECS yang dikonfigurasi untuk berjalan di dua Availability Zone. Lingkungan ini dibagi oleh semua layanan mikro Anda dan Anda kemudian membuat CI/CD pipeline untuk setiap layanan mikro. CI/CD Pipeline ini menarik perubahan dari repositori sumber di AWS CodeCommit, membuat perubahan secara otomatis, lalu menerapkannya ke lingkungan produksi dan non-produksi Anda. Ketika pipa berhasil menyelesaikan semua tahapannya, Anda dapat menggunakannya URLs untuk mengakses layanan mikro di lingkungan produksi dan non-produksi.

Prasyarat dan batasan

Prasyarat

  • Akun Amazon Web Services (AWS) yang aktif.

  • Bucket Amazon Simple Storage Service (Amazon S3) yang sudah ada yang berisi file (starter-code.zipterlampir).

  • AWS Cloud Development Kit (AWS CDK), diinstal dan dikonfigurasi di akun Anda. Untuk informasi selengkapnya tentang ini, lihat Memulai AWS CDK dalam dokumentasi AWS CDK.

  • Python 3 danpip, diinstal dan dikonfigurasi. Untuk informasi lebih lanjut tentang ini, lihat dokumentasi Python.

  • Keakraban dengan AWS CDK, AWS CodeBuild, CodePipeline AWS, CodeCommit Amazon Elastic Container Registry (Amazon ECR), Amazon ECS, dan AWS Fargate.

  • Keakraban dengan Docker.

  • Pemahaman tentang CI/CD dan DevOps.

Batasan

  • Batas akun AWS umum berlaku. Untuk informasi selengkapnya tentang hal ini, lihat kuota layanan AWS di dokumentasi AWS General Reference.

Versi produk

  • Kode diuji menggunakan Node.js versi 16.13.0 dan AWS CDK versi 1.132.0.

Arsitektur

AWS Cloud architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.

Diagram menunjukkan alur kerja berikut:

  1. Pengembang aplikasi melakukan kode ke CodeCommit repositori.

  2. Sebuah pipa dimulai.

  3. CodeBuild membangun dan mendorong image Docker ke repositori Amazon ECR

  4. CodePipeline menyebarkan gambar baru ke layanan Fargate yang ada di kluster Amazon ECS non-produksi.

  5. Amazon ECS menarik gambar dari repositori Amazon ECR ke layanan Fargate non-produksi.

  6. Pengujian dilakukan dengan menggunakan URL non-produksi.

  7. Manajer rilis menyetujui penerapan produksi.

  8. CodePipeline menyebarkan gambar baru ke layanan Fargate yang ada di cluster Amazon ECS produksi

  9. Amazon ECS menarik gambar dari repositori Amazon ECR ke dalam layanan Fargate produksi.

  10. Pengguna produksi mengakses fitur Anda dengan menggunakan URL produksi.

Tumpukan teknologi

  • AWS CDK

  • CodeBuild

  • CodeCommit 

  • CodePipeline

  • Amazon ECR 

  • Amazon ECS 

  • Amazon VPC

Otomatisasi dan skala

Anda dapat menggunakan pendekatan pola ini untuk membuat pipeline untuk layanan mikro yang diterapkan di tumpukan AWS bersama. CloudFormation Otomatisasi dapat membuat lebih dari satu cluster Amazon ECS di setiap VPC dan juga membuat pipeline untuk layanan mikro yang digunakan di cluster Amazon ECS bersama. Namun, ini mengharuskan Anda memberikan informasi sumber daya baru sebagai input ke tumpukan pipeline.

Alat

  • AWS CDK — AWS Cloud Development Kit (AWS CDK) adalah kerangka kerja pengembangan perangkat lunak untuk mendefinisikan infrastruktur cloud dalam kode dan menyediakannya melalui AWS. CloudFormation

  • AWS CodeBuild — AWS CodeBuild adalah layanan build yang dikelola sepenuhnya di cloud. CodeBuild mengompilasi kode sumber Anda, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.

  • AWS CodeCommit — AWS CodeCommit adalah layanan kontrol versi yang memungkinkan Anda menyimpan dan mengelola repositori Git secara pribadi di AWS Cloud. CodeCommit menghilangkan kebutuhan bagi Anda untuk mengelola sistem kontrol sumber Anda sendiri atau khawatir tentang penskalaan infrastrukturnya.

  • AWS CodePipeline — AWS CodePipeline adalah layanan pengiriman berkelanjutan yang dapat Anda gunakan untuk memodelkan, memvisualisasikan, dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perangkat lunak Anda. Anda dapat dengan cepat memodelkan dan mengonfigurasi berbagai tahapan proses rilis perangkat lunak. CodePipeline mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak Anda secara terus menerus.

  • Amazon ECS — Amazon Elastic Container Service (Amazon ECS) adalah layanan manajemen kontainer yang sangat skalabel dan cepat yang digunakan untuk menjalankan, menghentikan, dan mengelola kontainer di cluster. Anda dapat menjalankan tugas dan layanan Anda pada infrastruktur tanpa server yang dikelola oleh AWS Fargate. Atau, untuk kontrol lebih lanjut atas infrastruktur, Anda dapat menjalankan tugas dan layanan Anda di klaster instans Amazon Elastic Compute Cloud (Amazon EC2) yang Anda kelola.

  • Docker — Docker membantu pengembang untuk mengemas, mengirim, dan menjalankan aplikasi apa pun sebagai wadah yang ringan, portabel, dan mandiri.

Kode

Kode untuk pola ini tersedia di starter-code.zip file cicdstarter.zip dan (terlampir).

Epik

TugasDeskripsiKeterampilan yang dibutuhkan
Siapkan direktori kerja untuk AWS CDK.
  1. Buat direktori bernama cicdproject di mesin lokal Anda.

  2. Unduh cicdstarter.zip file (terlampir) ke dalam cicdproject direktori dan unzip. Ini membuat folder bernamacicdstarter.

  3. Jalankan perintah cd <user-home>/cicdproject/cicdstarter

  4. Siapkan lingkungan virtual Python dengan menjalankan perintah. python3 -m venv .venv

  5. Jalankan perintah source ./.venv/bin/activate.

  6. Konfigurasikan lingkungan AWS Anda dengan menjalankan aws configure perintah atau dengan menggunakan variabel lingkungan berikut: 

    • AWS_ACCESS_KEY_ID

    • AWS_SECRET_ACCESS_KEY 

    • AWS_DEFAULT_REGION

AWS DevOps, infrastruktur Cloud
TugasDeskripsiKeterampilan yang dibutuhkan
Buat infrastruktur bersama.
  1. Di direktori kerja Anda, jalankan cd cicdvpcecs perintah. 

  2. Jalankan pip3 install -r requirements.txt perintah untuk menginstal semua dependensi Python yang diperlukan

  3. Jalankan cdk bootstrap command untuk mengatur lingkungan AWS untuk AWS CDK. 

  4. Jalankan perintah cdk synth --context aws_account=<aws_account_ID> --context aws_region=<aws-region>

  5. Jalankan perintah cdk deploy --context aws_account=<aws_account_ID> --context aws_region=<aws-region>.

  6. CloudFormation Tumpukan AWS membuat infrastruktur berikut:

    • VPC non-produksi bernama cicd-vpc-ecs/cicd-vpc-nonprod

    • VPC produksi bernama cicd-vpc-ecs/cicd-vpc-prod

    • Cluster Amazon ECS non-produksi bernama cicd-ecs-nonprod

    • Cluster Amazon ECS produksi bernama cicd-ecs-prod

AWS DevOps, infrastruktur Cloud
Pantau CloudFormation tumpukan AWS.
  1. Masuk ke AWS Management Console, buka CloudFormation konsol AWS, lalu pilih cicd-vpc-ecs tumpukan dari daftar. 

  2. Di panel detail tumpukan, pilih tab Peristiwa dan pantau kemajuan pembuatan tumpukan Anda.

AWS DevOps, infrastruktur Cloud
Uji CloudFormation tumpukan AWS.
  1. Setelah CloudFormation tumpukan cicd-vpc-ecs AWS dibuat, pastikan bahwa cicd-vpc-ecs/cicd-vpc-nonprod dan cicd-vpc-ecs/cicd-vpc-prod VPCs dibuat. 

  2. Pastikan bahwa cluster ECS cicd-ecs-nonprod dan cicd-ecs-prod Amazon dibuat.

penting

Pastikan Anda merekam IDs untuk keduanya VPCs dan grup keamanan IDs untuk grup keamanan default di keduanya VPCs.

AWS DevOps, infrastruktur Cloud
TugasDeskripsiKeterampilan yang dibutuhkan
Buat infrastruktur untuk layanan mikro.
  1. Beri nama layanan mikro Anda. Misalnya, pola ini digunakan myservice1 sebagai nama microservice.

  2. Di direktori kerja Anda jalankan cd <working-directory>/cdkpipeline perintah.

  3. Jalankan perintah pip3 install -r requirements.txt.

  4. Jalankan cdk synth perintah lengkap yang tersedia di bagian Informasi tambahan dari pola ini.

  5. Jalankan cdk deploy perintah lengkap yang tersedia di bagian Informasi tambahan dari pola ini.

catatan

Anda juga dapat memberikan nilai untuk kedua perintah dengan menggunakan cdk.json file di direktori.

AWS DevOps, infrastruktur Cloud
Pantau CloudFormation tumpukan AWS.

Buka CloudFormation konsol AWS dan pantau kemajuan myservice1-cicd-stack tumpukan. Akhirnya, status berubah menjadi CREATE_COMPLETE.

AWS DevOps, infrastruktur Cloud
Uji CloudFormation tumpukan AWS.
  1. Di CodeCommit konsol AWS, verifikasi bahwa repositori bernama myservice1 ada dan berisi kode starter.

  2. Di CodeBuild konsol AWS, verifikasi bahwa proyek build bernama myservice1 ada.

  3. Di konsol Amazon ECR, verifikasi bahwa repositori Amazon ECR bernama ada. myservice1

  4. Di konsol Amazon ECS, verifikasi bahwa layanan Fargate myservice1 bernama ada di klaster Amazon ECS non-produksi dan produksi.

  5. Di konsol Amazon Elastic Compute Cloud (Amazon EC2), verifikasi bahwa Application Load Balancer non-produksi dan produksi dibuat. Catat nama DNS dari. ALBs

  6. Di CodePipeline konsol AWS, verifikasi bahwa pipeline bernama myservice1 ada. Itu harus memilikiSource,, BuildDeploy-NonProd, dan Deploy-Prod tahapan. Pipa juga harus memiliki in progress status.

  7. Pantau pipa sampai semua tahapan selesai. 

  8. Menyetujui secara manual untuk produksi.

  9. Di jendela browser, masukkan nama DNS dari file. ALBs

  10. Aplikasi harus ditampilkan Hello World dalam non-produksi dan produksi URLs.

Gunakan pipa.
  1. Buka CodeCommit repositori yang Anda buat sebelumnya dan buka file. index.js 

  2. Ganti Hello World denganHello CI/CD.

  3. Simpan dan komit perubahan ke cabang utama.

  4. Verifikasi bahwa pipa dimulai dan bahwa perubahan melewatiBuild,Deploy-NonProd, dan Deploy-Prod  tahapan. 

  5. Menyetujui produksi secara manual.

  6. Baik produksi maupun non-produksi sekarang URLs harus ditampilkanHello CICD.

AWS DevOps, infrastruktur Cloud
Ulangi epik ini untuk setiap layanan mikro.

Ulangi tugas dalam epik ini untuk membuat CI/CD pipeline untuk setiap layanan mikro Anda.

AWS DevOps, infrastruktur Cloud

Sumber daya terkait

Informasi tambahan

Perintah cdk synth

cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

cdk deploy perintah

cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

Lampiran

Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip