Dalam modul ini, Anda akan menerapkan aplikasi node.js Anda sebagai satu set layanan saling terhubung di balik Application Load Balancer (ALB). Kemudian, Anda akan menggunakan ALB untuk mengalihkan lalu lintas dengan mulus dari monolit menjadi layanan mikro. Mulai Membangun

Ini adalah proses yang akan Anda ikuti untuk menerapkan layanan mikro dan dengan aman mentransisikan lalu lintas aplikasi menjauh dari monolit.

ikhtisar arsitektur
  1. Alihkan Lalu Lintas
    Ini merupakan awal konfigurasi. Aplikasi node.js monolitik berjalan dalam kontainer di Amazon ECS.
  2. Mulai Layanan Mikro
    Dengan menggunakan tiga gambar kontainer yang Anda buat dan dorong ke Amazon ECR pada modul sebelumnya, Anda akan memulai tiga layanan mikro pada klaster ECS Amazon yang ada.
  3. Mengonfigurasi Grup Target
    Seperti pada Modul 2, Anda akan menambahkan grup target untuk setiap layanan dan memperbarui Aturan ALB untuk menghubungkan layanan mikro baru.
  4. Menonaktifkan Monolit
    Dengan mengubah satu aturan di ALB, Anda akan mulai merutekan lalu lintas ke layanan mikro yang berjalan. Setelah perutean ulang lalu lintas diverifikasi, nonaktifkan monolit.

Ikuti petunjuk langkah demi langkah berikut untuk menerapkan layanan mikro. Pilih setiap nomor langkah untuk membentangkan bagian.

break-the-monolith
  • Langkah 1. Tulis Definisi Tugas untuk Layanan Anda

    Anda akan menerapkan tiga layanan baru ke klaster yang Anda luncurkan di Modul 2. Seperti Modul 2, Anda akan menulis Task Definition untuk setiap layanan.

    ⚐ CATATAN: Anda dapat menambahkan beberapa kontainer pada satu definisi tugas. Ini berarti Anda dapat menjalankan ketiga layanan mikro sebagai kontainer berbeda dari layanan tunggal. Namun, pendekatan ini masih monolitik karena masing-masing kontainer harus menyesuaikan secara linier dengan layanan. Sasaran Anda adalah memiliki tiga layanan independen. Setiap layanan memerlukan definisi tugasnya sendiri menjalankan kontainer dengan gambar untuk layanannya masing-masing.

    Anda dapat membuat definisi tugas ini dari konsol Amazon ECS, atau melakukan percepatan dengan menulisnya sebagai JSON. Untuk menulis definisi tugas sebagai file JSON, ikuti langkah ini:

    1. Dari konsol Amazon Elastic Container Services, di bawah Amazon ECS, pilih Task definition.
    2. Di halaman Task definition, pilih tombol Create new Task Definition.
    3. Pada halaman Select launch type compatibility, pilih opsi EC2 lalu pilih Next step.
    4. Di halaman Konfigurasikan definisi tugas dan kontainer, gulir ke bagian Volume, lalu pilih tombol Configure via JSON.
    5. Salin dan tempel snippet kode berikut ke kolom JSON, menggantikan kode yang sudah ada.
      Ingatlah untuk mengganti placeholder [service-name], [account-ID], [region], [tag].

    ⚐ Catatan: Parameter berikut digunakan untuk definisi tugas:

    • Nama = [service-name: posts, threads, and users] 
    • Gambar = [Amazon ECR repository image URL]:latest 
    • cpu = 256 
    • memori = 256 
    • Port Kontainer = 3000 
    • Postingan Host = 0
    {
        "containerDefinitions": [
            {
                "name": "[service-name]",
                "image": "[account-id].dkr.ecr.[region].amazonaws.com/[service-name]:[tag]",
                "memoryReservation": "256",
                "cpu": "256",
                "essential": true,
                "portMappings": [
                    {
                        "hostPort": "0",
                        "containerPort": "3000",
                        "protocol": "tcp"
                    }
                ]
            }
        ],
        "volumes": [],
        "networkMode": "bridge",
        "placementConstraints": [],
        "family": "[service-name]"
    }

    ♻ Ulangi langkah yang sama untuk membuat definisi tugas untuk setiap layanan:

    • postingan
    • thread
    • pengguna
  • Langkah 2. Mengonfigurasi Application Load Balancer: Grup Target

    Seperti dalam Modul 2, konfigurasi grup target untuk setiap layanan (posts, threads, dan users). Grup target memungkinkan lalu lintas menjangkau layanan tertentu dengan benar. Anda akan mengonfigurasikan grup target dengan AWS CLI. Namun, sebelum melanjutkan, pastikan Anda memiliki nama VPC yang digunakan untuk tutorial ini:

    • Navigasikan ke bagian Penyeimbang Muatan di Konsol EC2.
    • Pilih kotak centang di samping demo, pilih tab Description, dan cari atribut VPC (dalam format ini: vpc-xxxxxxxxxxxxxxxxx).
      ⚐ Catatan: Atribut VPC akan diperlukan saat Anda mengonfigurasi grup target.

    Mengonfigurasi Grup Target

    Di terminal Anda, masukkan perintah berikut untuk membuat grup target setiap layanan (posts, threads, dan users). Selain itu, Anda akan membuat grup target (drop-traffic) untuk menjaga lalu lintas tidak mencapai monolit setelah layanan mikro Anda berjalan penuh. Ingatlah untuk mengganti placeholder berikut: [region], [service-name], dan [vpc-attribute].

    Nama layanan: posts, threads, users, dan drop-traffic

    aws elbv2 create-target-group --region [region] --name [service-name] --protocol HTTP --port 80 --vpc-id [vpc-attribute] --healthy-threshold-count 2 --unhealthy-threshold-count 2 --health-check-timeout-seconds 5 --health-check-interval-seconds 6
    grup target
  • Langkah 3. Konfigurasikan Aturan Listener

    Listener memeriksa permintaan koneksi yang masuk ke ALB Anda untuk merutekan lalu lintas dengan benar.

    Saat ini, keempat layanan Anda (monolit dan ketiga layanan mikro) berjalan di balik load balancer yang sama. Untuk membuat transisi dari monolit ke layanan mikro, Anda akan mulai merutekan lalu lintas ke layanan mikro dan berhenti merutekan lalu lintas ke monolit.

    Akses aturan listener

    Perbarui Aturan Listener

    Terdapat hanya satu listener di tab ini. Lakukan langkah berikut untuk mengedit aturan listener:

    • Pada kolom Rules, pilih View/edit rules.
    • Di halaman Rules, pilih tombol plus (+).
      Opsi Insert Rule akan muncul di halaman tersebut. 
    • Gunakan template aturan berikut untuk memasukkan aturan yang diperlukan termasuk satu aturan untuk menjaga lalu lintas ke monolit dan satu aturan untuk setiap layanan mikro:
      • IF Path = /api/[service-name]* THEN Forward to [service-name]
        Misalnya: IF Path = /api/posts* THEN Forward to posts
      • Masukkan aturan dalam urutan berikut:
        • api: /api* forwards to api
        • users: /api/users* forwards to users
        • threads: /api/threads* forwards to threads
        • posts: /api/posts* forwards to posts
    • Pilih Simpan.
    • Pilih panah mundur di sudut kiri atas halaman untuk kembali ke konsol load balancer.
    Mengonfigurasi Application Load Balancer Listener Rules
  • Langkah 4. Menerapkan Layanan Mikro Anda

    Menerapkan tiga layanan mikro (posts, threads, dan users) ke klaster Anda. Ulangi langkah berikut untuk masing-masing dari ketiga layanan mikro Anda:

    • Navigasikan ke konsol Amazon ECS dan pilih Clusters dari bilah menu kiri.
    • Pilih klaster BreakTheMonolith-Demo, pilih tab Services lalu pilih Create.
    • Pada halaman Configure service, edit parameter berikut (dan pertahankan nilai default untuk parameter yang tidak tertera di bawah ini):
      • Untuk Launch type, pilih EC2.
      • Untuk Task Definition, pilih tombol Enter a value untuk secara otomatis memilih nilai revisi tertinggi.
        Misalnya: api:1 
      • Untuk Service name, masukkan nama layanan (posts, threads, atau users).
      • Untuk Number of tasks, masukkan 1
    • Pilih Langkah berikutnya.
    • Pada halaman Configure network, bagian Load balancing, lakukan hal berikut:
      • Untuk Load balancer type, pilih Application Load Balancer.
      • Untuk Service IAM role, pilih BreakTheMonolith-Demo-ECSServiceRole.
      • Untuk Load balancer name, pastikan demo dipilih.
      • Di bagian Container to load balance, pilih tombol Add to load balancer dan lakukan pengeditan berikut:
        • Untuk kolom Production listener port, atur ke 80:HTTP.
        • Untuk Target grup name, pilih grup yang sesuai: (posts, threads, atau users)
    • Pilih Langkah berikutnya.
    • Di bagian Set Auto Scaling, pilih Next step.
    • Pada halaman Review, pilih Create Service.
    • Pilih View Service.

    Hanya peru beberapa detik untuk layanan Anda memulai. Periksa kembali apakah semua layanan dan tugas berjalan dan aktif sebelum Anda melanjutkan.

    Amazon ECS Menerapkan Layanan Mikro
  • Langkah 5. Beralih Lalu Lintas ke Layanan Mikro Anda

    Layanan mikro Anda sekarang berjalan, tetapi semua lalu lintas masih mengalir ke layanan monolit. Untuk mengubah rute lalu lintas ke layanan mikro, ambil langkah-langkah berikut untuk memperbarui aturan listener:

    • Navigasikan ke bagian bagian Penyeimbang Muatan Konsol EC2.
    • Pilih kotak centang di samping demo untuk melihat perincian Load Balancer.
    • Pilih tab Listeners.
      Terdapat hanya satu listener yang tercantum.
    • Pada kolom Rules, pilih View/edit rules.
    • Di halaman Rules, pilih tombol minus (-) dari menu bagian atas.
    • Hapus aturan pertama (/api* forwards to api) dengan memilih kotak centang di samping aturan.
    • Pilih Delete.
    • Perbarui aturan default untuk meneruskan ke drop-traffic:
      • Pilih tombol edit (pensil) dari menu bagian atas.
      • Pilih ikon edit (pensil) di samping aturan default (HTTP 80: default action).
      • Pilih ikon edit (pensil) di kolom THEN untuk mengedit Forward to.
      • Di kolom Target group, pilih drop-traffic.
      • Pilih tombol Update.

    Lihat tangkapan layar berikut untuk contoh aturan yang diperbarui.

    Amazon EC2 Mengalihkan Lalu Lintas ke Layanan Mikro

    Menonaktifkan monolit: Dengan lalu lintas saat ini mengalir ke layanan mikro, Anda dapat menonaktifkan layanan monolit.

    • Buka kembali ke klaster Amazon ECS BreakTheMonolith-Demo-ECSCluster.
    • Di tab Services, pilih kotak centang di samping api, lalu pilih Update.
    • Di halaman Configure service, cari Number of tasks lalu masukkan 0.
    • Pilih Skip to review.
    • Pilih Update Service.

    Amazon ECS sekarang akan mengosongkan koneksi dari kontainer yang telah diterapkan oleh layanan pada klaster kemudian menghentikan kontainer. Jika Anda memperbarui daftar Penerapan atau Tugas setelah sekitar 30 detik, Anda akan melihat bahwa jumlah tugas akan turun menjadi 0. Layanan ini masih aktif, jadi jika Anda perlu mundur karena alasan apa pun, Anda bisa memperbaruinya untuk menerapkan lebih banyak tugas.

    Secara opsional, Anda dapat menghapus layanan api. Di tab Services, pilih kotak centang di samping api, pilih Delete, dan konfirmasi penghapusan.

    Anda kini telah mentransisikan node.js dari monolit ke layanan mikro sepenuhnya, tanpa waktu henti!

  • Langkah 6. Validasi Penerapan Anda

    Cari URL layanan Anda: Ini merupakan URL yang sama yang Anda gunakan di Modul 2 untuk tutorial ini.

    • Navigasikan ke bagian Penyeimbang Muatan konsol EC2.
    • Pilih kotak centang di samping demo untuk melihat perincian Load Balancer.
    • Di tab Description, cari DNS name lalu pilih ikon salin di akhir URL. 
    • Tempel nama DNS ke tab atau jendela browser.

    Anda tentu akan melihat pesan ‘Ready to receive requests’.

    Lihat nilai untuk setiap layanan mikro: ALB Anda merutekan lalu lintas berdasarkan URL permintaan. Untuk melihat setiap layanan, cukup tambah nama layanan di akhir nama DNS:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts
    lihat nilai untuk setiap layanan mikro

    ⚐ CATATAN: URL ini menunjukkan performa yang sama dengan ketika monolit diterapkan. Ini sangat penting karena setiap API atau konsumen yang akan terhubung ke aplikasi ini tidak akan terpengaruh oleh perubahan yang Anda buat. Beralih dari monolit ke layanan mikro tidak memerlukan perubahan pada bagian lain infrastruktur Anda.

    Anda juga dapat menggunakan alat seperti Postman untuk menguji API Anda.