AWS Network Load Balancing (NLB)

Kusuma Ningrat
13 min readSep 18, 2023

--

Di artikel kali ini, kita akan coba implementasi salah satu type Load Balancing yang ada di AWS yaitu Network Load Balancer. Untuk melihat penjelasan singkat terkait apa itu Load Balancing dan type-type nya apa saja, silahkan merujuk ke laman berikut AWS Elastic Load Balancing.

Oke, sebelum kita lanjut mari lihat architecture yang akan kita bangun terlebih dahulu.

Terlihat bahwa terdapat dua (2) instance berada di Availability Zone (AZ) yang berbeda yang akan dipasangkan web server nginx di masing-masing instance. Kemudian terdapat juga Load Balancer di depan nya akan mendistribusikan traffic dari user ke instances.

Oke, sekarang mari kita mulai untuk pengerjaan nya, silahkan buka console dashboard dari AWS melalui link berikut AWS Management Console.

Pertama, kita buat Virtual Private Cloud (VPC) terlebih dahulu, pada menu search bar ketikan keyword VPC.

Kemudian pada halaman VPC Dashboard, klik tombol Create VPC untuk membuat vpc baru.

Setelah itu, pilih VPC only pada bagian Resource to create dan isikan nama vpc pada bagian Name Tag dengan nilai elb-vpc. Selain itu juga isikan Ipv4 CIDR dengan menggunakan network class C sebagai contoh dengan nilai 192.168.0.0/24 dan biarkan pengaturan yang lainnya secara default. Jika sudah, klik tombol Create VPC pojok kanan bawah dari dialog pembuatan VPC.

Jika sudah, maka akan tampil pesan berhasil pembuatan VPC tersebut.

Oke, selanjutnya sekarang kita buat subnet dengan cara pilih menu Subnets pada panel sebelah kiri.

Terlihat bahwa baru terdapat tiga (3) subnets bawaan dari AWS nya. Langsung saja untuk membuat subnet baru, klik tombol Create subnet.

Setelah itu, isikan beberapa parameter seperti VPC ID, Subnet name dengan nilai subnet-az1, Availability Zone dan IPv4 CIDR Block seperti yang terlihat pada gambar dibawah. Pastikan memilih vpc yang baru saja dibuat ditahap sebelumnya.

Jika sudah, klik tombol Create subnet di pojok kanan bawah pada dialog pembuatan subnet baru.

Selanjutnya, lakukan hal yang sama untuk membuat subnet-az2.

Setelah subnet nya dibuat, maka akan tampil subnet yang baru pada dashboard subnet seperti yang terlihat pada gambar berikut.

Oke, selanjutnya kita buat juga untuk Internet Gateways (IGW) agar service EC2 yang akan menggunakan VPC elb-vpc dapat terhubung keluar (internet). Langsung saja pilih menu Internet gateways.

Disini terlihat baru hanya terdapat satu internet gateway. Langsung saja kita buat baru dengan cara klik tombol Create Internet gateway.

Kemudian, isikan nama internet gateway dengan nilai elb-igw dan klik tombol Create internet gateway.

Setelah internet gateway dibuat, selanjutnya kita hubungkan (attach) internet gateway tersebut ke VPC elb-vpc yang sudah kita buat sebelumnya dengan cara klik tombol Attach to a VPC atau dengan klik tombol dropdown Actions -> Attach to VPC.

Pilih VPC elb-vpc pada parameter Available VPCs dan klik tombol Attach internet gateway.

Oke, sekarang kita sudah berhasil attach Internet gateway ke VPC elb-vpc yang di tandai pada state dari dialog internet gateway nya yaitu Attached.

Oke, selanjutnya kita juga perlu menambahkan route table untuk public-subnet agar dapat listen request dari jaringan manapun (0.0.0.0/0). Langsung saja pilih menu Route tables dan klik tombol Create route table.

Kemudian, isikan detail dari route table seperti Name dan VPC sehingga terlihat seperti pada gambar dibawah.

Setelah pembuatan route table berhasil dilakukan, maka akan tampil seperti pada gambar dibawah.

Terlihat pada tab Routes hanya terdapat satu record yaitu alamat network dari VPC yang kita buat, sekarang kita tambahkan routes nya agar dapat listen dari jaringan manapun. Klik tombol Edit routes.

Kemudian klik Add route dan isikan 0.0.0.0/0 pada parameter Destination dan pilih Internet Gateway pada parameter Target dan pastikan memilih internet gateway yang sudah dibuat sebelumnya yaitu dengan nilai elb-igw. Jika sudah klik tombol Save changes.

Selanjutnya, agar route table yang kita buat menggunakan subnet yang sudah kita buat sebelumnya, maka kita perlu asosiasi subnet tersebut ke route table. Klik tab Subnet associations.

Terlihat pada bagian Subnet without explicit associations terdapat dua subnet. Langsung saja klik tombol Edit subnet associations pada dialog Subnet without explicit associations.

Kemudian pilih subnet yang tersedia dengan cara centang pada list checkbox dari dialog Available subnets dan klik tombol Save associations.

Hasil akhir dari pengaturan route table dan subnet associations akan terlihat seperti pada gambar berikut.

Oke, sampai tahap ini kita sudah berhasil menyiapkan Virtual Private Cloud (VPC) yang akan kita gunakan untuk EC2 instance yang nantinya kita buat.

Selanjutnya sekarang kita buat instance EC2 yaitu Web1 dan Web2. Pada search dialog ketikan keyword EC2.

Maka akan tampil dashboard dari EC2 seperti yang terlihat pada gambar berikut.

Kemudian, pilih menu Instances pada dialog panel sebelah kiri dan pastikan belum terdapat instance yang dibuat.

Oke, selanjutnya kita buat instance baru dengan cara klik tombol Launch Instances.

Sekarang kita isikan detail dari instance nya satu per satu, pertama isikan nama instance nya dengan nilai Web1 dan OS Images (Amazon Machine Image) yang digunakan yaitu Ubuntu Server 22.04 LTS (HVM) dengan architecture 64-bit (x86).

Kemudian pada bagian Instance type pilih t2.micro seperti yang terlihat pada gambar dibawah.

Selanjutnya, untuk Key pair (login) klik tombol Create new key pair dengan nama example sebagai contoh, tipe nya RSA dan format nya .pem .

Selanjutnya, pilih key pair yang sudah dibuat dengan nama example seperti pada gambar berikut.

Kemudian pada bagian Network Settings klik tombol Edit untuk modifikasi pengaturan jaringan untuk instance yang akan kita buat agar menggunakan jaringan virtual yang sudah kita buat sebelumnya.

Pada bagian VPC, pilih VPC yang sudah kita buat sebelumnya dengan nama elb-vpc dan Subnet dengan nama subnet-az1. Selain itu juga untuk Auto-assign public IP atur menjadi enable agar instance yang kita buat memiliki IP publik.

Selanjutnya pada bagian Firewall (security groups), Pilih Create security group untuk membuat security group baru dengan nama webserver beserta deskripsinya.

Jika kita lihat pada bagian Inbound Security Group Rules, disana masih terdapat satu rules yaitu hanya untuk koneksi remote SSH, nah karena kita akan menginstall webserver di dalam instance tersebut, maka kita juga perlu menambahkan rules untuk port webserver (HTTP).

Oke, langsung saja klik tombol Add security group, kemudian untuk Type nya pilih HTTP dan Source type nya Anywhere.

Selanjutnya pada bagian Advanced details scroll kebawah hingga menemukan textbox User data seperti yang terlihat pada gambar berikut.

Jadi pada User data ini, kita akan memasukan script untuk setup web server nginx agar ketika instance nya dibuat maka akan otomatis service web server sudah tersedia pada instance tersebut. Silahkan copy paste script berikut ke User data.

#!/bin/bash

echo "Installing Nginx"
sudo apt update && sudo apt install nginx -y
echo "<h1>Hello From Web1</h1>" > /var/www/html/index.html
sudo systemctl enable --now nginx

Oke, jika sudah klik tombol Launch Instance dan tunggu beberapa saat untuk pembuatan instance nya.

Sampai tahap ini kita sudah membuat satu instance dengan nama Web1, selanjutnya kita akan buat instance Web2 dengan spesifikasi yang sama seperti Web1.

Langsung saja klik tombol Launch Instances.

Sekarang kita isikan detail dari instance nya satu per satu, pertama isikan nama instance nya dengan nilai Web1 dan OS Images (Amazon Machine Image) yang digunakan yaitu Ubuntu Server 22.04 LTS (HVM) dengan architecture 64-bit (x86).

Kemudian pada bagian Instance type pilih t2.micro seperti yang terlihat pada gambar dibawah.

Selanjutnya, pilih key pair yang sudah dibuat dengan nama example seperti pada gambar berikut.

Kemudian pada bagian Network Settings klik tombol Edit untuk modifikasi pengaturan jaringan untuk instance yang akan kita buat agar menggunakan jaringan virtual yang sudah kita buat sebelumnya.

Pada bagian VPC, pilih VPC yang sudah kita buat sebelumnya dengan nama elb-vpc dan Subnets dengan nama subnet-az2. Selain itu juga untuk Auto-assign public IP atur menjadi enable agar instance yang kita buat memiliki IP publik.

Selanjutnya pada bagian Firewall (security groups), Pilih Select existing security group dan pilih security group yang sudah dibuat sebelumnya dengan nama webserver.

Kemudian klik tombol Add security group untuk menambahkan rules HTTP, untuk Type nya pilih HTTP dan Source type Anywhere.

Selanjutnya pada bagian Advanced details scroll kebawah hingga menemukan textbox User data seperti yang terlihat pada gambar berikut.

Jadi pada User data ini, kita akan memasukan script untuk setup web server nginx agar ketika instance nya dibuat maka akan otomatis service web server sudah tersedia pada instance tersebut. Silahkan copy paste script berikut ke User data.

#!/bin/bash

echo "Installing Nginx"
sudo apt update && sudo apt install nginx -y
echo "<h1>Hello From Web2</h1>" > /var/www/html/index.html
sudo systemctl enable --now nginx

Jika sudah, klik tombol Launch Instance dan tunggu beberapa saat untuk proses pembuatan instance nya.

Jika sudah, maka akan terlihat dua instance yang sedang berjalan dengan nama Web1 dan Web2.

Selanjutnya, silahkan coba akses dari akses web server dari kedua instance tersebut menggunakan alamat IP publik dari masing-masing instance. Carannya dengan memilih salah satu instance kemudian pada detail instance copy alamat IP publik dari instance tersebut.

Kemudian buka alamat IP Publik tersebut melalui Web Browser.

Lakukan hal yang sama juga untuk instance Web2.

Oke, sampai disini kita sudah membuat dua web server. Selanjutnya kita akan membuat Load Balancer agar traffic dari user ke web server yang kita buat dibagi ke setiap instance. Selain itu juga, kita akan hanya memiliki satu domain yang akan digunakan untuk mengakses kedua web server tersebut.

Langsung saja pada dashboard EC2 scroll ke bawah kemudian pilih menu Load Balancers.

Langsung saja klik tombol Create load balancer untuk membuat load balancer baru.

Seperti yang sudah dijelaskan pada artikel sebelumnya, di AWS terdapat beberapa jenis Load Balancer. Namun pada artikel kali ini kita akan menggunakan salah satu yaitu Network Load Balancer, langsung saja klik tombol Create pada dialog Network Load Balancer.

Kemudian kita isikan detail konfigurasi dari Load Balancer yang kita inginkan. Pertama pada bagian Basic configuration atur nama Load Balancer yang akan kita buat menjadi NLB-Example, Kemudian Scheme nya Internet-facing karena akan menerima request melalui internet dan IP address type nya IPv4.

Selanjutnya pada bagian Network mapping, pilih vpc yang sudah kita buat yaitu dengan nama elb-vpc dan centang kedua subnet nya seperti yang terlihat pada gambar dibawah.

Setelah itu, pada bagian Security groups remove default security group dan pilih security group dengan nama webserver seperti yang terlihat pada gambar berikut.

Dibagian Listener and routing kita perlu membuat target group terlebih dahulu, tujuannya agar route dari load balancer yang kita buat akan request ke target group tersebut yang berisikan instance web server yaitu Web1 dan Web2. Selain itu juga, target group akan melakukan health check terhadap EC2 instance nya. Langsung saja klik link Create target group.

Untuk target type nya biarkan default yaitu Instances karena kita akan meneruskan request nya ke EC2 instance.

Kemudian pada target group name, isikan nama target group misalkan disini contohnya example-tg.

Jika sudah, biarkan pengaturan lain secara default dan klik tombol Next.

Disini pada bagian Register Targets, akan terlihat dua instances yang tersedia yaitu Web1 dan Web2.

Sekarang kita daftarkan instances tersebut ke target group nya dengan cara memilih kedua instance tersebut kemudian klik tombol Include as pending below.

Di bagian Review Targets terlihat bahwa status health check untuk instance nya masing pending. Langsung saja klik tombol Create target group.

Jika sudah, maka akan terlihat satu target group yang baru saja kita buat seperti pada gambar dibawah.

Perhatikan pada kolom Load Balancer bahwa belum ada asosiasi load balancer ke target group tersebut, ini dikarenakan kita belum selesai membuat load balancer nya. Silahkan kembali ke pembuatan load balancer.

Silahkan klik reload button pada bagian Default Action dan pastikan terdapat satu target group yang sudah kita buat.

Jika sudah, silahkan review summary dari pembuatan Load Balancer nya dibawah dan jika di rasa sudah sesuai, langsung saja klik tombol Create load balancer.

Tunggu beberapa saat untuk proses pembuatan Load Balancer nya hingga State dari Load Balancer nya active.

Oke, langkah terakhir kita uji coba load balancer nya. Copy DNS Name dari load balancer terlebih dahulu pada bagian detail.

Kemudian paste domain nya di web browser seperti yang terlihat pada gambar.

Oke, disini load balancer akan melakukan request ke instance Web2 terlebih dahulu. Coba lakukan refresh pada web browser, maka akan terlihat dua tampilan yang berbeda, karena load balancer akan melakukan request ke dua instance web server tersebut.

Coba stop salah satu instance web server nya dan kemudian lihat apa yang akan terjadi. Sebagai contoh disini saya akan stop instance Web2.

Kemudian coba akses lagi domain dari load balancer nya dengan cara merefresh web browser.

Oke, kira-kira apa yang muncul ?, Benerrr, jadi load balancer hanya akan meneruskan request ke instance Web1 sehingga hanya muncul tampilan web dari Web1. Kemudian bagaimana kalau kita hidupkan instance Web2 lagi ? Oke, lets try it.

Kira-kira apa yang terjadi ? Yuupss bener, jadi load balancer akan otomatis pick up instance yang baru hidup atau akan membagi lagi traffic nya ke dua instance tersebut.

Oke, jadi itu merupakan cara pembuatan Load Balancer dengan type Network Load Balancer pada AWS:)

Clean up!! jangan lupa untuk menghapus semua resource agar tidak dikenai biaya:v

--

--

Kusuma Ningrat

I spend a lot of time in front of Computer to stay alive and to keep cloud's blue.