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.


$ ./appmesh-colorapp.sh
...
Waiting for changeset to be created..
Waiting for stack create/update to complete
...
Successfully created/updated stack - DEMO-appmesh-colorapp

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.


$ ./fargate-colorteller.sh
...
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - DEMO-fargate-colorteller

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:


$ colorapp=$(aws cloudformation describe-stacks --stack-name=$ENVIRONMENT_NAME-ecs-colorapp --query="Stacks[0].Outputs[?OutputKey=='ColorAppEndpoint'].OutputValue" --output=text); echo $colorapp
http://DEMO-Publi-YGZIJQXL5U7S-471987363.us-west-2.elb.amazonaws.com

Simpan URL ke environment variable aplikasi Color sehingga Anda dapat menggunakannya untuk beberapa permintaan curl:


$ curl $colorapp/color
{"color":"blue", "stats": {"blue":1}}

Rasio 2: 1 dari blue ke green memberikan hasil yang dapat diprediksi. Kosongkan histogram dan jalankan beberapa kali hingga Anda mendapatkan hasil green:


$ curl $colorapp/color/clear
cleared fargate
$ for ((n=0;n<200;n++)); do echo "$n: $(curl -s $colorapp/color)"; done
0: {"color":"blue", "stats": {"blue":1}}
1: {"color":"green", "stats": {"blue":0.5,"green":0.5}}
2: {"color":"blue", "stats": {"blue":0.67,"green":0.33}}
3: {"color":"green", "stats": {"blue":0.5,"green":0.5}}
4: {"color":"blue", "stats": {"blue":0.6,"green":0.4}}
5: {"color":"green", "stats": {"blue":0.5,"green":0.5}}
6: {"color":"blue", "stats": {"blue":0.57,"green":0.43}}
7: {"color":"blue", "stats": {"blue":0.63,"green":0.38}}
8: {"color":"green", "stats": {"blue":0.56,"green":0.44}}
...
199: {"color":"blue", "stats": {"blue":0.66,"green":0.34}}

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:


$ curl $colorapp/color/clear
cleared fargate
$ for ((n=0;n<200;n++)); do echo "$n: $(curl -s $colorapp/color)"; done
0: {"color":"green", "stats": {"green":1}}
1: {"color":"blue", "stats": {"blue":0.5,"green":0.5}}
2: {"color":"green", "stats": {"blue":0.33,"green":0.67}}
3: {"color":"green", "stats": {"blue":0.25,"green":0.75}}
4: {"color":"green", "stats": {"blue":0.2,"green":0.8}}
5: {"color":"green", "stats": {"blue":0.17,"green":0.83}}
6: {"color":"blue", "stats": {"blue":0.29,"green":0.71}}
7: {"color":"green", "stats": {"blue":0.25,"green":0.75}}
...
199: {"color":"green", "stats": {"blue":0.32,"green":0.68}}

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: "/"
$ ./appmesh-colorapp.sh
...
Waiting for changeset to be created..
Waiting for stack create/update to complete
...
Successfully created/updated stack - DEMO-appmesh-colorapp

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.