Jalankan beban kerja berbasis peristiwa dan terjadwal dalam skala besar dengan AWS Fargate - AWS Prescriptive Guidance

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

Jalankan beban kerja berbasis peristiwa dan terjadwal dalam skala besar dengan AWS Fargate

HARI OHM PRASATH RAJAGOPAL, 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

Pola ini menjelaskan cara menjalankan beban kerja terjadwal dan berbasis peristiwa pada skala besar di Amazon Web Services (AWS) Cloud dengan menggunakan AWS Fargate.

Dalam kasus penggunaan pola ini diatur, kode dipindai untuk informasi sensitif AWS, seperti nomor akun AWS dan kredensil, setiap kali permintaan tarik dikirimkan. Permintaan tarik memulai fungsi Lambda. Fungsi Lambda memanggil tugas Fargate yang menangani pemindaian kode. Lambda dimulai setiap kali permintaan tarik baru diajukan. Jika pemindaian menemukan informasi sensitif, Amazon Simple Notification Service (Amazon SNS) mengirimkan hasil pemindaian dalam pesan email.

Pola ini sangat membantu dalam kasus penggunaan bisnis berikut:

  • Jika bisnis Anda harus menjalankan banyak beban kerja terjadwal dan berbasis peristiwa yang tidak dapat dijalankan oleh AWS Lambda karena keterbatasan sekitar runtime (batas 15 menit) atau memori

  • Jika Anda ingin AWS mengelola instans yang disediakan untuk beban kerja ini

Saat Anda menggunakan pola ini, Anda memiliki opsi untuk membuat virtual private cloud (VPC) baru. Pola ini juga menggunakan AWS CodeCommit.

Prasyarat dan batasan

Prasyarat

  • Akun AWS yang aktif

  • AWS CodeCommit untuk menghosting basis kode dan membuat permintaan tarik

  • AWS Command Line Interface (AWS CLI) versi 1.7 atau yang lebih baru, diinstal dan dikonfigurasi di macOS, Linux, atau Windows

  • Beban kerja berjalan dalam wadah

  • Apache Maven yang dapat dieksekusi diatur di classpath

Arsitektur

Proses permintaan tarik yang mengarah ke tugas Fargate dalam wadah dan topik SNS yang mengirim email.

Aliran keseluruhan mencakup langkah-langkah berikut.

  1. Setiap kali permintaan tarik baru dikirimkan CodeCommit, fungsi Lambda dimulai. Fungsi Lambda mendengarkan melalui acara CodeCommit Pull Request State Change melalui Amazon. EventBridge

  2. Fungsi Lambda mengirimkan tugas Fargate baru dengan parameter lingkungan berikut untuk memeriksa kode dan memindainya.

    RUNNER → <<TaskARN>> SNS_TOPIC → <<SNSTopicARN>> SUBNET → <<Subnet in which Fargate task gets launched>>

    Jika pemindaian menemukan informasi sensitif dalam kode, Fargate mendorong pesan baru ke topik Amazon SNS.

  3. Pelanggan SNS membaca pesan dari topik dan mengirim pesan email.

Teknologi

  • AWS CodeCommit

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon Elastic Container Service (Amazon ECS)

  • Amazon EventBridge

  • AWS Fargate

  • AWS Lambda

  • Amazon SNS

  • Docker

Alat

Alat

  • AWS CLI — AWS Command Line Interface (CLI) adalah alat terpadu untuk mengelola layanan AWS Anda.

  • AWS CodeCommit — AWS CodeCommit adalah layanan kontrol sumber terkelola penuh yang menampung repositori berbasis Git yang aman. Dengan menggunakan CodeCommit, tim dapat berkolaborasi dalam kode dalam lingkungan yang aman dan sangat skalabel.

  • Amazon ECR - Amazon Elastic Container Registry (Amazon ECR) adalah registri terkelola penuh yang dapat digunakan pengembang untuk menyimpan, mengelola, dan menyebarkan gambar kontainer Docker.

  • Amazon ECS - Amazon Elastic Container Service (Amazon ECS) adalah layanan manajemen kontainer yang sangat skalabel dan cepat. Anda dapat menggunakan Amazon ECS untuk menjalankan, menghentikan, dan mengelola kontainer di klaster.

  • AWS Fargate — AWS Fargate adalah teknologi yang dapat Anda gunakan dengan Amazon ECS untuk menjalankan container tanpa harus mengelola server atau cluster instans Amazon. EC2

  • AWS Lambda — AWS Lambda adalah layanan komputasi yang mendukung menjalankan kode tanpa menyediakan atau mengelola server. Lambda menjalankan kode Anda hanya saat diperlukan dan menskalakan secara otomatis, dari beberapa permintaan per hari hingga ribuan per detik.

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) adalah layanan terkelola yang menyediakan pengiriman pesan dari penerbit ke pelanggan (juga dikenal sebagai produsen dan konsumen). Penerbit berkomunikasi secara asinkron dengan pelanggan dengan mengirim pesan ke topik, yang merupakan titik akses logis dan saluran komunikasi. Klien yang berlangganan topik SNS menerima pesan yang dipublikasikan menggunakan protokol yang didukung, seperti Lambda, email, pemberitahuan push seluler, dan pesan teks seluler (SMS).

  • Docker — Docker membantu Anda membangun, menguji, dan mengirimkan aplikasi dalam paket yang disebut kontainer.

  • Klien Git — Baris perintah atau alat desktop untuk memeriksa artefak yang diperlukan

  • Maven - Apache Maven adalah alat manajemen proyek untuk mengelola pembangunan, pelaporan, dan dokumentasi proyek secara terpusat.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Unduh kodenya.

Di bagian Lampiran, unduh file.zip dan ekstrak file.

Pengembang, administrator sistem AWS

Siapkan repo.

Jalankan mvn clean install di folder root.

Pengembang, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat repositori Amazon ECR dan masuk.

Buka konsol Amazon ECR. Di panel navigasi, pilih Repositori, lalu pilih Buat repositori. Untuk bantuan tentang ini dan cerita lainnya, lihat bagian Sumber daya terkait.

Pengembang, administrator sistem AWS

Dorong gambar kontainer Anda.

Buka repositori, pilih Lihat perintah push, dan masuk ke Docker. Setelah Anda masuk, jalankan perintah, dengan substitusi yang diperlukan, yang ada di bawah Dorong gambar kontainer di bagian Informasi tambahan. Ini mengunggah gambar kontainer Docker yang digunakan untuk melakukan pemindaian kode. Setelah unggahan selesai, salin URL build terbaru di repositori Amazon ECR.

Pengembang, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat CodeCommit repositori.

Untuk membuat CodeCommit repositori AWS baru, jalankan perintah di bawah Buat CodeCommit repositori di bagian Informasi tambahan.

Pengembang, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat sebuah VPC.

Jika Anda ingin menggunakan VPC baru daripada yang sudah ada, jalankan perintah di bawah Buat VPC di bagian Informasi tambahan. Skrip AWS Cloud Development Kit (AWS CDK) akan menampilkan VPC dan subnet yang dibuat. IDs

Pengembang, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat cluster dan tugas.

Untuk membuat klaster Amazon ECS dan definisi tugas Fargate, jalankan perintah di bawah Buat klaster dan tugas di bagian Informasi tambahan. Pastikan ID VPC yang benar dan URI repo Amazon ECR diteruskan sebagai parameter saat menjalankan skrip shell. Skrip membuat definisi tugas Fargate yang menunjuk ke gambar Docker (bertanggung jawab untuk pemindaian). Script kemudian membuat pekerjaan dan peran eksekusi terkait.

Pengembang, administrator sistem AWS

Verifikasi cluster Amazon ECS.

Buka konsol Amazon ECS. Di panel navigasi, pilih Clusters, dan pilih cluster Amazon ECS yang baru dibuat bernama Fargate-Job-Cluster. Setelah ini, pilih Definisi tugas di panel navigasi, dan konfirmasikan bahwa ada definisi tugas baru dengan awalanawscdkfargateecsTaskDef.

Pengembang, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Membuat sebuah topik SNS.

Untuk membuat topik SNS, jalankan perintah di bawah Buat topik SNS di bagian Informasi tambahan. Setelah pembuatan berhasil, perhatikanSNS ARN, yang digunakan pada langkah berikutnya.

Pengembang, administrator sistem AWS

Buat pelanggan SNS.

Untuk membuat pelanggan email untuk topik SNS, jalankan perintah di bawah Buat pelanggan SNS di bagian Informasi tambahan. Pastikan untuk mengganti TopicARN dan Email address digunakan dalam perintah CLI. Untuk menerima notifikasi email, pastikan untuk mengonfirmasi alamat email yang digunakan sebagai pelanggan.

Pengembang, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat fungsi dan pemicunya.

Untuk membuat fungsi Lambda dengan CodeCommit pemicu, jalankan perintah di bawah fungsi Lambda dan CodeCommit picu di bagian Informasi tambahan. Pastikan untuk mengganti parameter dengan nilai yang sesuai sebelum menjalankan perintah. Skrip membuat fungsi Lambda dan mengonfigurasinya untuk dipanggil saat permintaan tarik baru dibuat.

Pengembang, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Uji aplikasi.

Jika Anda memeriksa informasi sensitif AWS apa pun ke CodeCommit repo, fungsi Lambda harus dimulai. Fungsi Lambda memulai tugas Fargate, yang memindai kode dan mengirimkan hasil pemindaian dalam pemberitahuan email.

Pengembang, administrator sistem AWS

Sumber daya terkait

Informasi tambahan

Dorong gambar wadah

> cd 1-ecr-image-push > ./run.sh <<ecr-repository>>

Buat CodeCommit repositori

aws codecommit create-repository --repository-name test-repo --repository-description "My Test repository"

Buat VPC

> cd 2-create-vpc > ./run.sh

Keluaran

aws-batch-cdk-vpc-efs-launch-template.privatesubnet = subnet-<<id>> aws-batch-cdk-vpc-efs-launch-template.publicsubnet = subnet-<<id>> aws-batch-cdk-vpc-efs-launch-template.vpcid = vpc-<<id>>

Buat cluster dan tugas

> export CDK_DEFAULT_ACCOUNT = <<aws_account_id>> > export CDK_DEFAULT_REGION = <<aws_region>> > cd 3-create-ecs-task > ./run.sh <<vpc-id>> <<ecr-repo-uri>>

Keluaran

aws-cdk-fargate-ecs.CLUSTERNAME = Fargate-Job-Cluster aws-cdk-fargate-ecs.ClusterARN = <<cluster_arn>> aws-cdk-fargate-ecs.ContainerARN = Fargate-Container aws-cdk-fargate-ecs.TaskARN = <<task_arn>> aws-cdk-fargate-ecs.TaskExecutionRole = <<execution_role_arn>> aws-cdk-fargate-ecs.TaskRole = <<task_role_arn>>

Buat topik SNS

aws sns create-topic --name code-commit-topic

Buat pelanggan SNS

aws sns subscribe \ --topic-arn <<topic_arn>> \ --protocol email \ --notification-endpoint <<email_address>>

Fungsi dan pemicu Lambda CodeCommit

> export CDK_DEFAULT_ACCOUNT = <<aws_account_id>> > export CDK_DEFAULT_REGION = <<aws_region>> > cd 5-Lambda-CodeCommit-Trigger > ./run.sh <<taskarn>> <<snstopicarn>> subnet-<<id>> <<codecommitarn>>

Keluaran

aws-cdk-fargate-lambda-event.Cloudwatchrule = <<cloudwatchrule>> aws-cdk-fargate-lambda-event.CodeCommitLambda = AWS-Code-Scanner-Function aws-cdk-fargate-lambda-event.LambdaRole = <<lambdaiamrole>>

Lampiran

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