Blog AWS Indonesia
Menggunakan AWS App Mesh dengan AWS Fargate
AWS App Mesh adalah service mesh, yang menyediakan framework untuk mengontrol dan memantau berbagai servis komputasi AWS. Pada tulisan Learning AWS AppMesh, saya telah menyediakan panduan agar Anda bisa mulai mencoba Saya telah menunjukkan cara menjalankan aplikasi microservice sederhana ke Amazon Elastic Container Service (Amazon ECS) dan mengkonfigurasi App Mesh untuk menyediakan kontrol traffic dan observabilitas.
Dalam tulisan ini, saya akan menunjukkan bagaimana cara menjalankan aplikasi colorteller
yang sama menggunakan ECS dengan launch type AWS Fargate.
Contoh pada tulisan ini sudah disederhanakan agar mudah dimengerti, tetapi di dunia nyata, menciptakan service mesh untuk menghubungkan antar servis komputasi berbeda akan bermanfaat. Fargate adalah servis komputasi dari AWS yang akan membantu Anda menjalankan container di ECS tanpa perlu mengonfigurasi dan mengelola Amazon Elastic Compute Cloud (Amazon EC2).
Gambaran Solusi
Tulisan ini mengasumsikan bahwa Anda sudah memiliki container yang berjalan di ECS, tetapi ingin mengalihkan workload Anda untuk menggunakan Fargate.
Gunakan versi baru servis colorteller
dengan Fargate, dan kemudian mulai mengalihkan traffic ke servis tersebut. Jika semuanya berjalan dengan baik, alihkan lebih banyak traffic ke versi baru hingga melayani 100% dari semua permintaan. Gunakan label blue untuk mewakili versi colorteller
lama dan green untuk mewakili versi colorteller
baru. Diagram berikut menunjukkan model pemrogram aplikasi Color.
Anda ingin mulai mengalihkan traffic dari servis versi 1 (colorteller-blue
) ke servis versi 2 (colorteller-green
).
Di App Mesh, setiap versi dari sebuah servis merupakan kode yang berjalan di atas servis komputasi, dalam hal ini adalah task yang berjalan di atas Amazon ECS dan AWS Fargate. Setiap servis memiliki representasi virtual node masing-masing dalam sebuah Mesh.
Diagram berikut menunjukkan konfigurasi App Mesh dari aplikasi Color.
Dalam demo ini, colorteller-blue
berjalan di ECS menggunakan launch type EC2 dan colorteller-green
berjalan di ECS menggunakan launch type Fargate. Tujuannya adalah untuk menguji colorteller-green
dengan sebagian traffic, dan terus ditingkatkan secara bertahap hingga akhirnya akan menangani 100% traffic.
Model komputasi AWS dari aplikasi Color
Prasyarat
Sebelum lanjut, siapkan sumber daya dan jalankan aplikasi Color seperti yang telah dijelaskan dalam tulisan Integrating AWS X-Ray with AWS App Mesh.
Menjalankan aplikasi Fargate
Setelah anda selesai menjalankan aplikasi Color, lakukan konfigurasi sehingga traffic Anda mengarah ke colorteller-blue
untuk saat ini. Warna biru mewakili versi 1 dari servis colorteller
Anda.
Masuk ke konsol App Mesh dan navigasi ke Virtual router dari mesh Anda. Konfigurasi rute HTTP untuk mengirim 100% traffic ke virtual node colorteller-blue
.
Tangkapan layar berikut menunjukkan rute di konsol App Mesh.
Lakukan pengujian servis dan konfirmasi di AWS X-Ray bahwa traffic mengalir melalui colorteller-blue
seperti yang diharapkan tanpa error.
Tangkapan layar berikut menunjukkan relasi dengan virtual node colorgateway
.
Menjalankan versi baru colorteller di Fargate
Selagi servis colorteller-blue
tetap berfungsi, jalankan colorteller-green
di Fargate untuk menangani traffic secara perlahan. Mulai dengan 30% dari total traffic Anda.
Jika pemantauan Anda menunjukkan servis 2 healthy, tingkatkan ke 60%, lalu akhirnya menjadi 100%. Di dunia nyata, Anda dapat memilih peningkatan yang lebih granular dengan peluncuran otomatis (dan rollback jika masalah muncul), tetapi demonstrasi ini dibuat sederhana.
Lakukan push gateway
dan colorteller
container image ke ECR (lihat Deploy Images) di tulisan sebelumnya, dan kemudian jalankan ECS task dengan container image tersebut. Untuk tulisan ini, jalankan ECS task menggunakan launch type Fargate dengan colorteller
dan envoy
container image yang sama. Ini mengatur envoy
container berjalan sebagai sidecar untuk container colorteller
.
Anda tidak perlu mengonfigurasi EC2 secara manual dengan launch type Fargate. Fargate secara otomatis menempatkan sidecar pada physical instance dan lifecycle yang sama dengan aplikasi container utama.
Untuk mulai menjalankan Fargate dan mengalihkan traffic ke sana, ikuti langkah-langkah ini:
Langkah 1: Perbarui konfigurasi mesh
Anda dapat mengunduh AWS CloudFormation template yang diperbarui dari GitHub di dalam walkthroughs/fargate
.
Konfigurasi mesh yang telah diperbarui ini menambahkan virtual node baru (colorteller-green-vn
). Hal ini juga memperbarui virtual router (colorteller-vr
) untuk servis colorteller
sehingga mendistribusikan traffic antara virtual node blue dan green dengan rasio 2:1. Dengan kata lain, node green menerima sepertiga traffic.
Langkah 2: Menjalankan green task ke Fargate
Script fargate-colorteller.sh
membuat definisi template berparameter sebelum menjalankan CloudFormation template fargate-colorteller.yaml
. Perubahan untuk meluncurkan colorteller
task sebagai Fargate task ada dalam fargate-colorteller-task-def.json
.
Verifikasi servis yang berjalan diatas Fargate
Anda bisa mendapatkan URL dari aplikasi Color dari CloudFormation template output di konsol AWS, atau bisa juga diambil menggunakan AWS CLI:
Simpan URL ke environment variable aplikasi Color sehingga Anda dapat menggunakannya untuk beberapa permintaan curl:
Rasio 2: 1 dari blue ke green memberikan hasil yang dapat diprediksi. Kosongkan histogram dan jalankan beberapa kali hingga Anda mendapatkan hasil green:
Ini mencerminkan hasil yang diharapkan untuk rasio 2: 1. Periksa juga di konsol AWS X-Ray Anda.
Tangkapan layar berikut menunjukkan konsol X-Ray setelah pengujian awal.
Hasilnya terlihat bagus: 100% sukses, tidak ada Error.
Anda sekarang dapat meningkatkan peluncuran versi baru (green) dari layanan Anda yang berjalan di Fargate.
Menggunakan AWS CloudFormation untuk mengelola stacks Anda memungkinkan Anda menjaga konfigurasi di bawah kontrol versi dan menyederhanakan proses menjalankan sumber daya. AWS CloudFormation juga memberi Anda pilihan untuk memperbarui virtual route di appmesh-colorapp.yaml
dan menjalankan konfigurasi mesh yang telah diperbarui dengan menggunakan appmesh-colorapp.sh
.
Untuk tulisan ini, gunakan konsol App Mesh untuk melakukan perubahan. Pilih Virtual router untuk appmesh-mesh, dan edit colorteller-route. Perbarui rute HTTP sehingga colorteller-blue-vn
menangani 33,3% dari traffic dan colorteller-green-vn
sekarang menangani 66,7%.
Jalankan lagi tes verifikasi sederhana Anda:
Jika hasilnya terlihat bagus, periksa kembali hasilnya di konsol X-Ray.
Terakhir, alihkan 100% traffic Anda ke versi colorteller
baru menggunakan konsol App Mesh yang sama. Kali ini, modifikasi template konfigurasi mesh dan jalankan ulang:
#appmesh-colorteller.yaml
ColorTellerRoute:
Type: AWS::AppMesh::Route
DependsOn:
- ColorTellerVirtualRouter
- ColorTellerGreenVirtualNode
Properties:
MeshName: !Ref AppMeshMeshName
VirtualRouterName: colorteller-vr
RouteName: colorteller-route
Spec:
HttpRoute:
Action:
WeightedTargets:
- VirtualNode: colorteller-green-vn
Weight: 1
Match:
Prefix: "/"
Sekali lagi, ulangi proses verifikasi Anda di CLI dan X-Ray untuk mengonfirmasi bahwa versi baru Anda berjalan dengan sukses.
Kesimpulan
Dalam panduan ini, saya menunjukkan kepada Anda bagaimana meluncurkan pembaruan dari versi 1 (blue) servis colorteller
ke versi 2 (green). Saya menunjukkan bahwa App Mesh mendukung ECS yang Anda jalankan sebagai EC2 task dan sebagai Fargate task.
Dalam panduan saya berikutnya, saya akan menunjukkan bahwa App Mesh menangani bahkan layanan yang diluncurkan langsung pada instance EC2 tanpa menggunakan container. Ini memberikan cara yang seragam dan kuat untuk mengontrol dan memantau aplikasi microservice Anda di AWS.
Artikel ini diterjemahkan dari artikel asli berjudul “Using AWS App Mesh with Fargate” yang ditulis oleh Ignacio Riesgo dan Tony Pujals.