Siapkan CI/CD pipeline untuk beban kerja hybrid di Amazon ECS Anywhere dengan menggunakan AWS CDK dan GitLab - AWS Prescriptive Guidance

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

Siapkan CI/CD pipeline untuk beban kerja hybrid di Amazon ECS Anywhere dengan menggunakan AWS CDK dan GitLab

Dr. Rahul Sharad Gaikwad, Amazon Web Services

Ringkasan

Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan AWS yang sudah ada CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya.

Amazon ECS Anywhere adalah perpanjangan dari Amazon Elastic Container Service (Amazon ECS). Ini memberikan dukungan untuk mendaftarkan instans eksternal, seperti server lokal atau mesin virtual (VM), ke kluster Amazon ECS Anda. adalah fitur yang membantu mengurangi biaya dan mengurangi orkestrasi dan operasi kontainer lokal yang kompleks. Anda dapat menggunakan ECS Anywhere untuk menyebarkan dan menjalankan aplikasi kontainer di lingkungan lokal dan cloud. Ini menghilangkan kebutuhan tim Anda untuk mempelajari beberapa domain dan keahlian, atau untuk mengelola perangkat lunak yang kompleks sendiri.

Pola ini menjelaskan step-by-step pendekatan untuk menyediakan cluster Amazon ECS dengan instans Amazon ECS Anywhere dengan menggunakan tumpukan Amazon Web Services (AWS) Cloud Development Kit (AWS CDK). Anda kemudian menggunakan AWS CodePipeline untuk menyiapkan pipeline integrasi berkelanjutan dan penerapan berkelanjutan (CI/CD). Kemudian, Anda mereplikasi repositori GitLab kode Anda ke AWS CodeCommit dan menerapkan aplikasi kontainer Anda di cluster Amazon ECS.

Pola ini dirancang untuk membantu mereka yang menggunakan infrastruktur lokal untuk menjalankan aplikasi kontainer dan menggunakannya GitLab untuk mengelola basis kode aplikasi. Anda dapat mengelola beban kerja tersebut dengan menggunakan layanan AWS Cloud, tanpa mengganggu infrastruktur lokal yang ada.

Prasyarat dan batasan

Prasyarat

  • Akun AWS aktif.

  • Aplikasi kontainer yang berjalan pada infrastruktur lokal.

  • GitLab Repositori tempat Anda mengelola basis kode aplikasi Anda. Untuk informasi selengkapnya, lihat Repository ()GitLab.

  • AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Menginstal atau memperbarui versi terbaru AWS CLI (dokumentasi AWS CLI).

  • AWS CDK Toolkit, diinstal dan dikonfigurasi secara global. Untuk informasi selengkapnya, lihat Menginstal AWS CDK (dokumentasi AWS CDK).

  • npm, diinstal dan dikonfigurasi untuk AWS CDK di. TypeScript Untuk informasi selengkapnya, lihat Mengunduh dan menginstal Node.js dan npm (dokumentasi npm).

Batasan

Versi produk

  • AWS CDK Toolkit versi 2.27.0 atau yang lebih baru

  • npm versi 7.20.3 atau yang lebih baru

  • Node.js versi 16.6.1 atau yang lebih baru

Arsitektur

Tumpukan teknologi target

  • AWS CDK

  • AWS CloudFormation

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Amazon ECS Anywhere

  • Amazon Elastic Container Registry (Amazon ECR)

  • AWS Identity and Access Management (IAM)

  • Manajer Sistem AWS

  • GitLab repositori

Arsitektur target

Diagram arsitektur pengaturan cluster dan CI/CD pipeline Amazon ECS.

Diagram ini mewakili dua alur kerja utama yang dijelaskan dalam pola ini, menyediakan kluster Amazon ECS dan menyiapkan CI/CD pipeline yang menyiapkan dan menyebarkan pipeline, sebagai CI/CD berikut:

  1. Penyediaan cluster Amazon ECS

    1. Saat Anda menerapkan tumpukan AWS CDK pertama, itu membuat CloudFormation tumpukan di AWS.

    2. CloudFormation Tumpukan ini menyediakan kluster Amazon ECS dan sumber daya AWS terkait.

    3. Untuk mendaftarkan instans eksternal dengan kluster Amazon ECS, Anda harus menginstal AWS Systems Manager Agent (Agen SSM) di VM Anda dan mendaftarkan VM sebagai instans yang dikelola AWS Systems Manager. 

    4. Anda juga harus menginstal agen penampung Amazon ECS dan Docker di VM Anda untuk mendaftarkannya sebagai instance eksternal dengan cluster Amazon ECS.

    5. Ketika instans eksternal terdaftar dan dikonfigurasi dengan cluster Amazon ECS, instans dapat menjalankan beberapa kontainer di VM Anda, yang terdaftar sebagai instance eksternal.

    6. Cluster Amazon ECS aktif dan dapat menjalankan beban kerja aplikasi melalui kontainer. Instans container Amazon ECS Anywhere berjalan di lingkungan lokal tetapi dikaitkan dengan cluster Amazon ECS di cloud.

  2. Menyiapkan dan menyebarkan pipa CI/CD

    1. Saat Anda menerapkan tumpukan AWS CDK kedua, itu membuat CloudFormation tumpukan lain di AWS.

    2. CloudFormation Tumpukan ini menyediakan pipeline CodePipeline dan sumber daya AWS terkait.

    3. Anda mendorong dan menggabungkan perubahan kode aplikasi ke repositori lokal GitLab . 

    4. GitLab Repositori secara otomatis direplikasi ke repositori. CodeCommit

    5. Pembaruan CodeCommit repo secara otomatis dimulai CodePipeline. 

    6. CodePipeline menyalin kode dari CodeCommit dan membuat build aplikasi yang dapat diterapkan. CodeBuild

    7. CodePipeline membuat image Docker dari lingkungan CodeBuild build dan mendorongnya ke repo Amazon ECR.

    8. CodePipeline memulai CodeDeploy tindakan yang menarik gambar kontainer dari repo Amazon ECR.

    9. CodePipeline menyebarkan gambar kontainer di kluster Amazon ECS.

Otomatisasi dan skala

Pola ini menggunakan AWS CDK sebagai alat infrastruktur sebagai kode (IAc) untuk mengonfigurasi dan menerapkan arsitektur ini. AWS CDK membantu Anda mengatur sumber daya AWS dan menyiapkan Amazon ECS Anywhere dan pipeline. CI/CD

Alat

Layanan AWS

  • AWS Cloud Development Kit (AWS CDK) adalah kerangka kerja pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan infrastruktur AWS Cloud dalam kode.

  • 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 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 Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

  • 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 terukur yang membantu Anda menjalankan, menghentikan, dan mengelola kontainer di klaster. Pola ini juga menggunakan Amazon ECS Anywhere, yang menyediakan dukungan untuk mendaftarkan server lokal atau VM ke cluster Amazon ECS Anda.

Alat lainnya

  • Node.js adalah lingkungan JavaScript runtime berbasis peristiwa yang dirancang untuk membangun aplikasi jaringan yang dapat diskalakan.

  • npm adalah registri perangkat lunak yang berjalan di lingkungan Node.js dan digunakan untuk berbagi atau meminjam paket dan mengelola penyebaran paket pribadi.

  • Vagrant adalah utilitas open-source untuk membangun dan memelihara lingkungan pengembangan perangkat lunak virtual portabel. Untuk tujuan demonstrasi, pola ini menggunakan Vagrant untuk membuat VM lokal.

Repositori kode

Kode untuk pola ini tersedia di pipeline GitHub CI/CD untuk Amazon ECS Anywhere menggunakan repositori AWS CDK.

Praktik terbaik

Pertimbangkan praktik terbaik berikut saat menerapkan pola ini:

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Verifikasi versi AWS CDK.

Verifikasi versi AWS CDK Toolkit dengan memasukkan perintah berikut.

cdk --version

Pola ini membutuhkan versi 2.27.0 atau yang lebih baru. Jika Anda memiliki versi yang lebih lama, ikuti petunjuk dalam dokumentasi AWS CDK untuk memperbaruinya.

DevOps insinyur

Verifikasi versi npm.

Verifikasi versi npm dengan memasukkan perintah berikut.

npm --version

Pola ini membutuhkan versi 7.20.3 atau yang lebih baru. Jika Anda memiliki versi sebelumnya, ikuti petunjuk dalam dokumentasi npm untuk memperbaruinya.

DevOps insinyur

Siapkan kredensi AWS.

Siapkan kredensi AWS dengan memasukkan aws configure perintah dan mengikuti petunjuknya.

$aws configure AWS Access Key ID [None]: <your-access-key-ID> AWS Secret Access Key [None]: <your-secret-access-key> Default region name [None]: <your-Region-name> Default output format [None]:
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori kode AWS CDK.

  1. Kloning pipeline CI/CD untuk Amazon ECS Anywhere menggunakan repositori AWS CDK untuk pola ini dengan memasukkan perintah berikut.

    git clone https://github.com/aws-samples/amazon-ecs-anywhere-cicd-pipeline-cdk-sample.git
  2. Arahkan ke direktori kloning dengan memasukkan perintah berikut.

    cd amazon-ecs-anywhere-cicd-pipeline-cdk-sample
DevOps insinyur

Bootstrap lingkungan.

Menerapkan CloudFormation template ke akun dan Wilayah AWS yang ingin Anda gunakan dengan memasukkan perintah berikut.

cdk bootstrap <account-number>/<Region>

Untuk informasi selengkapnya, lihat Bootstrapping di dokumentasi AWS CDK.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Instal dependensi paket dan kompilasi file. TypeScript

Instal dependensi paket dan kompilasi TypeScript file dengan memasukkan perintah berikut.

$cd EcsAnywhereCdk $npm install $npm fund

Perintah ini menginstal semua paket dari repositori sampel. Untuk informasi selengkapnya, lihat npm ci dan npm install di dokumentasi npm. Jika Anda mendapatkan kesalahan tentang paket yang hilang saat Anda memasukkan perintah ini, lihat bagian Pemecahan Masalah dari pola ini.

DevOps insinyur

Bangun proyek.

Untuk membangun kode proyek, masukkan perintah berikut.

npm run build

Untuk informasi selengkapnya tentang membangun dan menerapkan project, lihat aplikasi AWS CDK pertama Anda di dokumentasi AWS CDK.

DevOps insinyur

Terapkan tumpukan infrastruktur Amazon ECS Anywhere.

  1. Buat daftar tumpukan dengan memasukkan perintah berikut.

    $cdk list
  2. Konfirmasikan bahwa output mengembalikan EcsAnywhereInfraStack dan ECSAnywherePipelineStack tumpukan.

  3. Menyebarkan EcsAnywhereInfraStack tumpukan dengan memasukkan perintah berikut.

    $cdk  deploy EcsAnywhereInfraStack
DevOps insinyur

Verifikasi pembuatan dan output tumpukan.

  1. Masuk ke AWS Management Console dan buka CloudFormation konsol di https://console.aws.amazon.com/cloudformation/.

  2. Pada halaman Stacks, pilih EcsAnywhereInfraStack tumpukan.

  3. Konfirmasikan bahwa status tumpukan adalah salah satu CREATE_IN_PROGRESS atauCREATE_COMPLETE.

    Menyiapkan cluster Amazon ECS dapat memakan waktu. Jangan lanjutkan sampai pembuatan tumpukan selesai.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan VM Anda.

Buat VM Vagrant dengan memasukkan vagrant up perintah dari direktori root tempat Vagrantfile berada. Untuk informasi lebih lanjut, lihat dokumentasi Vagrant.

DevOps insinyur

Daftarkan VM Anda sebagai instance eksternal.

  1. Masuk ke Vagrant VM dengan menggunakan perintah. vagrant ssh Untuk informasi lebih lanjut, lihat dokumentasi Vagrant.

  2. Instal AWS CLI di VM dengan mengikuti petunjuk penginstalan AWS CLI dan memasukkan perintah berikut. 

    $ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" \ > -o "awscliv2.zip" $sudo apt install unzip $unzip awscliv2.zip $sudo ./aws/install $aws configure AWS Access Key ID [None]: <your-access-key-ID> AWS Secret Access Key [None]: <your-secret-access-key> Default region name [None]: <your-Region-name> Default output format [None]:
  1. Buat kode aktivasi dan ID yang dapat Anda gunakan untuk mendaftarkan VM Anda dengan AWS Systems Manager dan untuk mengaktifkan instans eksternal Anda. Output dari perintah ini mencakup ID aktivasi dan nilai kode aktivasi.

    aws ssm create-activation \ > --iam-role EcsAnywhereInstanceRole \ > | tee ssm-activation.json

    Jika Anda menerima kesalahan saat menjalankan perintah ini, lihat bagian Pemecahan Masalah.

  2. Ekspor ID aktivasi dan nilai kode.

    export ACTIVATION_ID=<activation-ID> export ACTIVATION_CODE=<activation-code>
  3. Unduh skrip instalasi ke VM Anda.

    curl --proto "https" -o "ecs-anywhere-install.sh" \ > "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh"
  4. Jalankan skrip instalasi di VM Anda.

    sudo bash ecs-anywhere-install.sh \ --cluster EcsAnywhereCluster \ --activation-id $ACTIVATION_ID \ --activation-code $ACTIVATION_CODE \ --region <region-name>

Ini mengatur VM Anda sebagai instans eksternal Amazon ECS Anywhere dan mendaftarkan instans di cluster Amazon ECS. Untuk informasi selengkapnya, lihat Mendaftarkan instans eksternal ke klaster di dokumentasi Amazon ECS. Jika Anda mengalami masalah apa pun, lihat bagian Pemecahan Masalah.

DevOps insinyur

Verifikasi status Amazon ECS Anywhere dan VM eksternal.

Untuk memverifikasi apakah VM Anda terhubung ke bidang kontrol Amazon ECS dan berjalan, gunakan perintah berikut.

$aws ssm describe-instance-information $aws ecs list-container-instances --cluster $CLUSTER_NAME
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat cabang di CodeCommit repo.

Buat cabang bernama main dalam CodeCommit repo dengan membuat komit pertama untuk repositori. Anda dapat mengikuti dokumentasi AWS untuk Membuat komit CodeCommit. Berikut adalah contoh perintah tersebut.

aws codecommit put-file \ --repository-name EcsAnywhereRepo \ --branch-name main \ --file-path README.md \ --file-content "Test" \ --name "Dev Ops" \ --email "devops@example.com" \ --commit-message "Adding README."
DevOps insinyur

Siapkan pencerminan repo.

Anda dapat mencerminkan GitLab repositori ke dan dari sumber eksternal. Anda dapat memilih repositori mana yang berfungsi sebagai sumber. Cabang, tag, dan komit disinkronkan secara otomatis. Siapkan cermin dorong antara GitLab repositori yang menghosting aplikasi Anda dan repositori. CodeCommit Untuk petunjuk, lihat Mengatur cermin dorong dari GitLab ke CodeCommit (GitLab dokumentasi).

catatan

Secara default, mirroring secara otomatis menyinkronkan repositori. Jika Anda ingin memperbarui repositori secara manual, lihat Memperbarui cermin (GitLab dokumentasi).

DevOps insinyur

Menyebarkan tumpukan CI/CD pipa.

Menyebarkan EcsAnywherePipelineStack tumpukan dengan memasukkan perintah berikut.

$cdk deploy EcsAnywherePipelineStack
DevOps insinyur

Uji CI/CD pipa.

  1. Buat perubahan kode aplikasi dan dorong ke sumber, GitLab repo lokal. Untuk informasi selengkapnya, lihat Opsi Push (GitLab dokumentasi). Misalnya, edit ../application/index.html file untuk memperbarui nilai versi aplikasi.

  2. Ketika kode direplikasi ke CodeCommit repo, ini memulai pipeline. CI/CD Lakukan salah satu tindakan berikut:

    • Jika Anda menggunakan pencerminan otomatis untuk menyinkronkan GitLab repo dengan CodeCommit repo, lanjutkan ke langkah berikutnya.

    • Jika Anda menggunakan pencerminan manual, dorong perubahan kode aplikasi ke CodeCommit repo dengan mengikuti instruksi di Perbarui cermin (GitLab dokumentasi).

  3. Di mesin lokal Anda, di browser web, masukkan http://localhost:80. Ini membuka halaman web NGINX karena port 80 diteruskan ke localhost di Vagrantfile. Konfirmasikan bahwa Anda dapat melihat nilai versi aplikasi yang diperbarui. Ini memvalidasi pipeline dan penerapan gambar.

  4. (Opsional) Jika Anda ingin memverifikasi penerapan di AWS Management Console, lakukan hal berikut:

    1. Buka konsol Amazon ECS di https://console.aws.amazon.com/ecs/.

    2. Dari bilah navigasi, pilih Wilayah untuk digunakan.

    3. Di panel navigasi, pilih Klaster.

    4. Pada halaman Clusters, pilih EcsAnywhereClustercluster.

    5. Pilih Definisi Tugas.

    6. Konfirmasikan wadah sedang berjalan.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Bersihkan dan hapus sumber daya.

Setelah Anda berjalan melalui pola ini, Anda harus menghapus proof-of-concept sumber daya yang Anda buat. Untuk membersihkan, masukkan perintah berikut.

$cdk destroy EcsAnywherePipelineStack $cdk destroy EcsAnywhereInfraStack
DevOps insinyur

Pemecahan Masalah

IsuSolusi

Kesalahan tentang paket yang hilang saat menginstal dependensi paket.

Masukkan salah satu perintah berikut untuk menyelesaikan paket yang hilang.

$npm ci

atau

$npm install -g @aws-cdk/<package_name>

Ketika Anda menjalankan aws ssm create-activation perintah pada VM, Anda menerima kesalahan berikut.

An error occurred (ValidationException) when calling the CreateActivation operation: Nonexistent role or missing ssm service principal in trust policy: arn:aws:iam::000000000000:role/EcsAnywhereInstanceRole

EcsAnywhereInfraStackTumpukan belum sepenuhnya digunakan, dan peran IAM yang diperlukan untuk menjalankan perintah ini belum dibuat. Periksa status tumpukan di CloudFormation konsol. Coba lagi perintah setelah status berubah menjadiCREATE_COMPLETE.

Pemeriksaan kesehatan Amazon ECS kembaliUNHEALTHY, dan Anda melihat kesalahan berikut di bagian Layanan cluster di konsol Amazon ECS.

service EcsAnywhereService was unable to place a task because no container instance met all of its requirements. Reason: No Container Instances were found in your cluster.

Mulai ulang agen Amazon ECS di Vagrant VM Anda dengan memasukkan perintah berikut.

$vagrant ssh $sudo systemctl restart ecs $sudo systemctl status ecs

Sumber daya terkait