Pada modul ini, Anda akan memecah aplikasi node.js ke dalam beberapa layanan yang saling terkoneksi dan mendorong citra tiap layanan ke repositori Amazon Elastic Container Registry (Amazon ECR). Mulai Membangun

Arsitektur aplikasi akhir menggunakan Amazon Elastic Container Service (Amazon ECS) dan Application Load Balancer (ALB). 

ikhtisar arsitektur

a. Klien
Klien membuat permintaan lalu lintas melalui port 80.

b. Penyeimbang Muatan
ALB merutekan lalu lintas eksternal ke layanan yang tepat. ALB menginspeksi permintaan klien dan menggunakan aturan perutean untuk mengarahkan permintaan ke instans serta port agar grup target dapat mencocokkan aturan.

c. Grup Target
Tiap layanan memiliki grup target yang melacak instans dan port tiap kontainer yang berjalan untuk layanan tersebut.

d. Layanan mikro
Amazon ECS menerapkan tiap layanan ke dalam kontainer di seluruh klaster EC2. Tiap kontainer hanya menangani satu fitur.

Isolasi Crash
Bahkan organisasi rekayasa terbaik dapat dan memiliki crash fatal dalam produksi. Selain mengikuti seluruh praktik terbaik standar untuk menangani crash dengan baik, satu pendekatan yang dapat membatasi dampak crash tersebut adalah dengan membangun layanan mikro. Arsitektur layanan mikro dianggap baik jika satu bagian mikro layanan Anda crash, maka hanya bagian layanan tersebut yang tidak berfungsi. Layanan lainnya milik Anda dapat terus bekerja dengan baik.

Isolasi untuk Keamanan
Pada aplikasi monolit, jika ada pelanggaran keamanan pada satu fitur aplikasi, misalnya kerentanan yang memungkinkan eksekusi kode jarak jauh, maka Anda pasti menganggap bahwa penyerang juga telah memiliki akses ke semua fitur lain pada sistem. Hal ini dapat berbahaya jika, misalnya, fitur unggah avatar Anda memiliki masalah keamanan yang akhirnya dapat membahayakan database Anda dengan kata sandi pengguna. Memisahkan fitur ke dalam beberapa layanan mikro menggunakan Amazon ECS dapat membantu Anda mengamankan akses ke sumber daya AWS dengan memberikan peran AWS Identity and Access Management (IAM) kepada masing-masing layanan. Ketika praktik terbaik layanan mikro diikuti, maka hasilnya ketika penyerang membahayakan satu layanan, mereka hanya memperoleh akses ke sumber daya layanan tersebut, dan tidak dapat mengakses sumber daya lain secara horizontal dari layanan lain tanpa menerobos ke layanan tersebut juga.

Penskalaan Mandiri
Ketika fitur dipecah ke dalam beberapa layanan, maka jumlah infrastruktur dan jumlah instans yang digunakan oleh masing-masing kelas layanan mikro dapat diskalakan ke atas dan ke bawah secara mandiri. Hal ini memudahkan pengukuran biaya fitur tertentu dan mengidentifikasi fitur yang mungkin perlu dioptimalkan terlebih dahulu. Jika satu fitur tertentu memiliki masalah dengan kebutuhan sumber dayanya, fitur lain tidak akan terpengaruh dan kinerja yang andal tetap dapat dipertahankan.

Laju Pengembangan
Layanan mikro mengurangi risiko dalam pengembangan, sehingga tim dapat membangun dengan lebih cepat. Dalam monolit, menambahkan fitur baru secara potensial dapat berdampak pada fitur lain yang terkandung dalam monolit tersebut. Pengembang harus mempertimbangkan dengan cermat dampak dari kode apa pun yang mereka tambahkan, dan memastikan bahwa mereka tidak merusak apa pun. Di sisi lain, arsitektur layanan mikro yang layak memiliki kode baru untuk fitur baru yang akan dimasukkan ke layanan baru. Pengembang dapat merasa yakin bahwa kode apa pun yang mereka tulis sama sekali tidak akan berdampak pada kode yang ada, kecuali secara eksplisit mereka menuliskan koneksi di antara dua layanan mikro.

Waktu penyelesaian: 20 menit

Layanan yang Digunakan:


Ikuti instruksi langkah demi langkah di bawah ini untuk memecah monolit. Pilih tiap nomor langkah untuk memperluas bagian.

break-the-monolith
  • Langkah 1. Menyediakan Repositori ECR

    Pada dua modul sebelumnya, Anda menerapkan aplikasi sebagai monolit menggunakan satu layanan dan satu repositori citra kontainer. Untuk menerapkan aplikasi sebagai tiga layanan mikro, Anda perlu menyediakan tiga repositori (satu untuk tiap layanan) di Amazon ECR.

    Tiga layanan kita adalah:

    1. pengguna
    2. thread
    3. postingan

    Buat tiga repositori dengan mengulang langkah berikut untuk tiap layanan:

    • Navigasi ke konsol Amazon ECR.
    • Pilih Buat repositori.
    • Di halaman Buat repositori, bidang Nama repositori, buat repositori untuk layanan (postingan, thread, atau pengguna).
      ⚐ Catatan: Untuk opsi Tandai ketetapan, jangan ubah pengaturan default.

    Anda seharusnya memiliki empat repositori di Amazon ECR. Catat informasi repositori untuk tiap layanan mikro yang Anda buat. Informasi ini akan diperlukan pada langkah berikutnya. Informasi yang Anda butuhkan ada di format berikut:
    [account-id].dkr.ecr.[region].amazonaws.com/[service-name]

    repositori
  • Langkah 2. Mengautentikasi Docker dengan AWS (opsional)

    Anda perlu akses ke Docker untuk membangun dan mendorong citra bagi tiap layanan. Jika Anda mengerjakan tutorial ini pada waktu yang berbeda, Anda mungkin telah keluar dari Docker. Jika ini yang terjadi, ikuti langkah berikut untuk masuk kembali ke Docker.

    • Jalankan $(aws ecr get-login --no-include-email --region [your-region])
      Ganti [your-region], contohnya: $(aws ecr get-login --no-include-email --region us-west-2)

    jika autentikasi berhasil, Anda akan menerima pesan konfirmasi: Login Berhasil.

  • Langkah 3. Membangun dan Mendorong Citra untuk Tiap Layanan

    Pada folder proyek amazon-ecs-nodejs-microservices/3-microservices/services, Anda akan memiliki folder dengan file untuk tiap layanan. Perhatikan bagaimana tiap layanan mikro merupakan klon dari layanan monolit sebelumnya.

    Anda dapat melihat bagaimana tiap layanan kini menjadi khusus dengan membandingkan file db.json di tiap layanan dan di layanan api monolit. Semua postingan, thread, dan pengguna sebelumnya disimpan di satu file database. Kini, masing-masing disimpan di file database untuk layanannya masing-masing.

    Buka terminal Anda, dan atur jalur Anda ke ~/amazon-ecs-nodejs-microservices/3-microservices/services

    Membangun dan Menandai Tiap Citra

    • Di terminal, jalankan docker build -t [service-name] ./[service-name]
      Ganti [service-name], contoh: docker build -t posts ./posts

    • Setelah selesai membangun, tandai citra agar Anda dapat mendorongnya ke repositori:
      docker tag [service-name]:latest [account-ID].dkr.ecr.[region].amazonaws.com/[service-name]:v1
      Ganti [service-name], [account-ID], dan [region], contoh: docker tag posts:latest [account-id].dkr.ecr.us-west-2.amazonaws.com/posts:v1

    • Dorong citra Anda ke ECR: docker push [account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1
      Ganti [service-name], [account-ID], dan [region].

    Jika Anda menavigasi ke repositori ECR, Anda harus melihat citra yang ditandai dengan v1. 

    ♻ Ulangi langkah tersebut untuk tiap citra layanan mikro.  

    ⚐ CATATAN: Pastikan untuk membangun dan menandai ketiga citra.