32.4 C
Jakarta
Sabtu, 12 Juli 2025

Penerapan 3 Tier Architecture di AWS serta Panduan Langkah demi Langkah

Membangun aplikasi web yang andal dan skalabel di cloud merupakan tugas krusial yang dihadapi setiap pengembang modern. Dalam artikel ini, saya akan berbagi pengalaman saya dalam menerapkan aplikasi web menggunakan arsitektur tiga tingkat Amazon Web Services (AWS).

Kita akan membahas cara membagi aplikasi kita menjadi tiga lapisan berbeda: lapisan web yang menangani permintaan pengguna, lapisan aplikasi yang memproses logika bisnis, dan lapisan basis data yang mengelola penyimpanan data.

Di akhir artikel ini, Anda akan memahami bagaimana bagian-bagian ini bekerja sama untuk menciptakan aplikasi yang sangat tersedia, skalabel, dan aman yang dapat berkembang sesuai kebutuhan Anda.

Mari kita mulai dengan diagram arsitektur:

Dalam arsitektur ini, Application Load Balancer (ALB) yang menghadap publik digunakan untuk meneruskan lalu lintas klien, yang diterima melalui Internet Gateway ke instans EC2 di tingkat web. Tingkat web dilengkapi dengan server web Nginx yang dikonfigurasi untuk melayani situs web React.js.

Server EC2 tersebut kemudian mengalihkan panggilan API kami ke Application Load Balancer yang menghadap internal. ALB internal kemudian meneruskan lalu lintas tersebut ke tingkat aplikasi, yang dilengkapi dengan server EC2 dengan logika bisnis yang ditulis dalam Node.js.

Tingkat aplikasi memanipulasi data dalam database Aurora MySQL dan mengembalikannya ke tingkat web kami. Penyeimbangan beban, pemeriksaan kesehatan, dan grup penskalaan otomatis dibuat di setiap lapisan untuk menjaga ketersediaan arsitektur ini. Gateway NAT dibuat, jika server dalam tingkat aplikasi yang diterapkan di dalam subnet privat perlu mengakses internet dengan aman.

Bucket S3 berisi kode aplikasi yang perlu diterapkan di dalam server di tingkat web dan tingkat aplikasi. Selain itu, CloudWatch digunakan untuk memantau metrik yang terkait dengan server EC2. Saya juga telah menggunakan registrar domain GoDaddy dan AWS Certificate Manager untuk mengakses aplikasi web saya menggunakan domain saya sendiri.

Setelah kita memiliki gambaran umum keseluruhan arsitektur, mari kita bahas setiap langkah yang saya ikuti untuk mengimplementasikan semua yang telah saya jelaskan di atas.

Harap dicatat bahwa nilai yang saya tentukan dalam diagram arsitektur (CIDR blocks, Availablity Zones, dll.) tidak harus sama dengan arsitektur Anda. Anda tidak harus memilih AZ atau rentang CIDR yang tepat. Selama sesuai dengan tujuan, Anda dapat memilih nilai apa pun yang Anda inginkan.

1. Unduh kode dari GitHub ke sistem lokal Anda

Sepanjang proyek ini, saya merujuk repositori GitHub aws-three-tier-web-architecture-workshop. Dalam repositori ini, AWS telah menyediakan semua berkas kode relevan yang diperlukan untuk diterapkan di tingkat web dan tingkat aplikasi.

2. Buat VPC dan sumber daya yang relevan

Mari kita mulai implementasinya dengan membuat VPC.
Amazon Virtual Private Cloud (VPC) sangat penting dalam arsitektur tiga tingkat AWS karena menciptakan jaringan privat yang terisolasi tempat Anda dapat meluncurkan sumber daya dengan aman.

VPC seperti bagian privat Anda sendiri di cloud AWS tempat Anda mengontrol segalanya, mulai dari rentang IP dan perutean jaringan hingga aturan keamanan. Manfaat utamanya adalah Anda dapat menempatkan tingkat aplikasi Anda di subnet yang berbeda (publik untuk tingkat web, privat untuk tingkat aplikasi dan basis data) untuk mengontrol akses.

Isolasi jaringan ini membantu melindungi sumber daya sensitif seperti basis data dari akses internet langsung sekaligus memungkinkan server web Anda melayani lalu lintas publik, menjadikan arsitektur Anda aman dan fungsional.
– Dari konsol AWS Anda, cari VPC dan pilih layanannya.
– Klik Buat VPC.
– Anda akan melihat dua opsi untuk membuat VPC; VPC saja dan VPC dan lainnya. Opsi VPC dan lainnya menyediakan cara yang lebih cepat dan mudah untuk membuat VPC dan sumber daya terkait. Untuk lebih memahami keseluruhan arsitektur VPC, mari kita pilih opsi VPC saja.
– Tambahkan tag Nama ke VPC Anda dan berikan CIDR IPv4 seperti yang ditunjukkan pada diagram arsitektur di atas.
– Biarkan semua opsi lainnya sebagai default dan klik Buat VPC.

VPC yang Anda buat akan muncul di bagian VPC Anda.

Sekarang mari kita buat subnetnya.
Subnet dalam VPC sangat penting untuk mengatur dan mengamankan sumber daya AWS Anda dengan membagi jaringan menjadi segmen-segmen yang lebih kecil.

Manfaat utamanya adalah Anda dapat membuat subnet publik (untuk sumber daya yang memerlukan akses internet, seperti server web) dan subnet privat (untuk sumber daya sensitif seperti basis data). Dalam arsitektur kami, kami membuat enam subnet.
– Dari panel sebelah kiri, klik Subnet, lalu klik Buat subnet.
– Dari panel tarik-turun di bawah ID VPC, pilih VPC yang Anda buat, dan CIDR VPC terkait akan ditampilkan di bawahnya.
– Seperti yang Anda lihat pada diagram arsitektur di atas, kita perlu membuat enam subnet; tiga di setiap zona ketersediaan. Jadi, kita perlu menambahkan setiap subnet satu per satu dengan menentukan nama yang membantu mengidentifikasi masing-masing subnet secara terpisah pada tahap implementasi selanjutnya, zona ketersediaan yang relevan, dan blok CIDR yang relevan.
– Pastikan Anda menambahkan nilai yang relevan di kolom yang relevan di bagian Pengaturan subnet seperti yang ditunjukkan di bawah ini, lalu klik Tambahkan subnet baru dan ulangi proses yang sama hingga Anda menambahkan keenam subnet beserta nama subnet uniknya, masing-masing Zona Ketersediaan, dan masing-masing blok CIDR subnet IPV4.

– Lalu klik Buat subnet.

Anda akan melihat subnet yang Anda buat muncul di bagian Subnet.

Seperti yang mungkin Anda perhatikan, kami tidak melakukan implementasi khusus saat membuat subnet yang ingin kami publikkan, dibandingkan dengan subnet yang ingin kami privatkan. Untuk saat ini, semuanya dibuat dengan cara yang sama. Kami akan segera mengubahnya.

– Klik kotak centang di depan salah satu subnet yang ingin Anda deklarasikan sebagai publik.
– Klik Tindakan dan pilih Edit pengaturan subnet.

– Di bagian Pengaturan Penetapan IP Otomatis, centang kotak Aktifkan penetapan alamat IPV4 publik secara otomatis.
– Biarkan semua opsi lainnya tidak berubah, gulir ke bawah, dan klik Simpan.
– Lakukan hal yang sama untuk subnet lain yang ingin Anda deklarasikan sebagai publik.

Pengaturan ini saja tidak akan membuat subnet-subnet ini menjadi publik. Yang benar-benar membuatnya publik adalah prosedur yang harus kita ikuti setelah membuat tabel routing. Kita akan membahasnya nanti.

Sekarang mari kita buat Gateway Internet.

Gateway Internet (IGW) adalah komponen penting dalam VPC Anda yang berfungsi sebagai gateway antara sumber daya publik Anda dan internet.

IGW berfungsi sebagai pintu gerbang yang memungkinkan komunikasi dua arah, memungkinkan sumber daya di subnet publik Anda (seperti server web) untuk mengakses internet, dan memungkinkan lalu lintas masuk dari internet untuk mencapai sumber daya publik Anda.

– Dari panel sebelah kiri, pilih Internet gateway, lalu klik Buat internet gateway.
– Cukup berikan nama pada Name tag, lalu klik Buat internet gateway.

Gerbang internet Anda akan muncul di bagian Gerbang Internet.

Sekarang mari kita buat Gerbang NAT.

Gateway NAT (Network Address Translation) sangat penting bagi sumber daya di subnet privat yang perlu mengakses internet sambil tetap aman dari lalu lintas masuk. Gateway ini berfungsi sebagai pintu satu arah yang memungkinkan sumber daya privat Anda (seperti server aplikasi) mengakses internet untuk hal-hal seperti pembaruan perangkat lunak atau panggilan API eksternal, tetapi mencegah lalu lintas internet masuk mencapai sumber daya privat ini.

Gateway NAT berada di subnet publik dan bertindak sebagai perantara, meneruskan permintaan dari sumber daya privat ke internet sambil menjaga keamanan. Untuk ketersediaan tinggi, kami membuat dua Gateway NAT terpisah dalam arsitektur kami di dalam dua subnet publik di dua Zona Ketersediaan.

– Dari panel sebelah kiri, pilih NAT gateways dan klik Create NAT gateway.
– Berikan nama.
– Di bagian Subnet, pilih subnet tempat Anda ingin menempatkan NAT Gateway. Kita membutuhkan satu di setiap subnet publik, jadi pilih salah satu subnet publik.
– Biarkan Connectivity type sebagai Public dan klik Allocate Elastic IP.
– Kemudian klik Create NAT gateway dan akan terlihat di bagian NAT gateways.

– Klik Buat gateway NAT sekali lagi dan ulangi proses yang sama untuk menempatkan Gateway NAT kedua di subnet publik lainnya.

Sekarang mari kita buat tabel rute.

Tabel rute dalam VPC merupakan komponen jaringan penting yang mengontrol aliran lalu lintas antar subnet dan ke/dari internet. Setiap subnet harus dikaitkan dengan tabel rute, yang berisi aturan (rute) yang menentukan ke mana lalu lintas dapat diarahkan.

Dalam arsitektur kami, kami membuat satu tabel rute untuk subnet publik guna mengarahkan lalu lintas mereka ke internet melalui Internet Gateway dan dua tabel rute lainnya untuk setiap subnet privat tempat server aplikasi ditempatkan untuk mengarahkan lalu lintas mereka ke internet melalui setiap NAT Gateway.

– Dari panel sebelah kiri, pilih Tabel rute dan klik Buat tabel rute.
– Tambahkan Nama, pilih VPC Anda, dan klik Buat tabel rute.

– Tabel yang Anda buat akan muncul di bawah tabel Rute. Ulangi proses yang sama untuk membuat dua tabel rute lainnya.

Sekarang saatnya menambahkan rute yang relevan ke setiap tabel rute dan mengaitkan subnetnya. Mari kita mulai dengan tabel rute publik.

– Klik kotak centang di depan tabel rute publik Anda dan pilih Rute. Anda akan melihat sudah ada satu entri di dalam tabel rute. Setelah Anda menambahkan entri lainnya, entri tersebut akan muncul di sini seperti yang ditunjukkan di bawah ini. Entri yang sudah ada di dalam tabel akan merutekan lalu lintas secara lokal, jika lalu lintas tersebut ditujukan ke suatu lokasi (IP) di dalam VPC yang sama. Sekarang kita perlu menentukan apa yang harus dilakukan dengan lalu lintas yang ditujukan ke luar VPC.

– Klik Edit rute.
– Lalu klik Tambahkan rute.
– Dari menu tarik-turun di sebelah kiri, pilih rute 0.0.0.0/0 yang berarti tujuan apa pun (pada dasarnya internet) dan dari menu tarik-turun di sebelah kanan, pilih opsi Gerbang Internet, lalu pilih gerbang internet yang Anda buat sebelumnya.

– Klik Simpan perubahan.

Tabel rute ini pada dasarnya merutekan lalu lintas yang diarahkan ke suatu lokasi (IP) di dalam VPC yang sama; secara lokal, dan mengarahkan lalu lintas yang ditujukan ke luar VPC (internet) menuju Gateway Internet. Sekarang mari kita lampirkan tabel rute ini ke subnet yang relevan. Seperti yang sudah Anda duga, tabel rute ini seharusnya dilampirkan dengan subnet publik.

– Jadi, klik kotak centang di depan tabel rute yang baru saja Anda kerjakan, sama seperti yang Anda lakukan sebelumnya, lalu klik Asosiasi subnet.
– Di bagian Asosiasi subnet eksplisit, klik Edit asosiasi subnet.
– Pilih subnet yang ingin Anda deklarasikan sebagai publik dari daftar di bawah Subnet yang tersedia, lalu klik Simpan asosiasi.

Langkah di atas adalah langkah paling krusial dalam mempublikasikan subnet yang relevan.

Sekarang kita harus mengulangi proses yang sama, yaitu mengedit rute dan mengaitkan subnet, dengan dua tabel rute lainnya.

Mari kita pilih salah satu dari dua tabel rute yang tersisa.

– Buka Rute dan klik Edit rute.
– Dari menu tarik-turun di sebelah kiri, pilih rute 0.0.0.0/0 yang berarti tujuan apa pun (pada dasarnya internet). Kali ini, dari menu tarik-turun di sebelah kanan, pilih opsi Nat Gateway, lalu pilih Nat Gateway yang diterapkan di subnet publik dalam zona ketersediaan yang sama dengan subnet privat yang akan Anda kaitkan dengan tabel rute ini (lihat diagram arsitektur).

– Klik Simpan perubahan.
– Sekarang, seperti sebelumnya, buka bagian Asosiasi subnet, klik Edit asosiasi subnet, pilih subnet yang relevan, lalu klik Simpan asosiasi.
– Ulangi proses yang sama untuk tabel rute yang tersisa.

3. Buat IAM Role

Sekarang kita perlu membuat peran IAM agar dapat melampirkannya ke instans EC2.

Peran IAM (Identity dan Access Management) sangat penting untuk mengelola akses ke sumber daya AWS secara aman. Peran IAM memungkinkan Anda menerapkan manajemen akses yang terperinci di seluruh infrastruktur AWS Anda, memastikan setiap komponen memiliki izin yang dibutuhkan, tidak lebih, tidak kurang.

Setelah peran IAM terpasang, instans EC2 dapat mengakses S3 dengan aman untuk mendapatkan kode aplikasi dan juga dapat mengelola instans dengan aman menggunakan AWS Session Manager.

– Dari konsol AWS Anda, cari IAM dan pilih layanannya.
– Dari panel sebelah kiri, klik Peran.
– Lalu klik Buat peran.
– Biarkan layanan AWS sebagai jenis entitas Tepercaya dan pilih EC2 sebagai Kasus penggunaan dari menu tarik-turun.
– Klik Berikutnya.
– Sekarang kita perlu menambahkan izin. Di bagian Izin dan kebijakan, ketik s3readonly di dalam bilah pencarian.
– Kebijakan AmazonS3ReadOnlyAccess akan muncul dan centang kotak di depannya.
– Kita perlu menambahkan satu izin lagi. Kosongkan bilah pencarian dan ketik ssmmanaged.
– Kebijakan AmazonSSMManagedInstanceCore akan muncul dan centang kotak di depannya juga.
– Klik Berikutnya.
– Masukkan nama yang bermakna, di bawah Nama peran untuk mengidentifikasi peran yang Anda buat.
– Pastikan kedua kebijakan yang Anda pilih di atas terlihat di bawah Ringkasan kebijakan izin dan klik Buat peran.

Sekarang mari kita lanjutkan dan terapkan database aplikasi kita.

4. Buat instans basis data RDS

Kami memilih RDS untuk tujuan ini.

Amazon RDS (Relational Database Service) adalah layanan basis data terkelola yang menyederhanakan pengaturan, pengoperasian, dan penskalaan basis data dalam arsitektur cloud. Layanan ini mendukung berbagai mesin basis data seperti MySQL, PostgreSQL, Oracle, dan SQL Server. Layanan ini memungkinkan penerapan multi-AZ untuk failover otomatis, menyediakan solusi basis data yang tangguh, aman, dan mudah dikelola sehingga pengembang dapat berfokus pada logika aplikasi, alih-alih administrasi basis data.

– Dari konsol AWS Anda, cari RDS dan pilih layanannya.
– Dari panel sebelah kiri, pilih Basis Data dan klik Buat basis data.
– Di sini Anda akan melihat dua opsi untuk pembuatan basis data; Pembuatan Standar dan Pembuatan Mudah.

Untuk melihat potensi RDS yang sesungguhnya, kita perlu membuat database dengan fitur “Standard Create”, tetapi biayanya sangat mahal; hampir 60 USD per bulan.

Di sisi lain, fitur “Easy Create” sangat murah, tetapi tidak memungkinkan penerapan multi-AZ, tidak memungkinkan penerapan Database di dalam VPC pilihan kita karena database secara otomatis diterapkan di dalam VPC default dan juga menetapkan grup keamanan default ke instans database.

Namun, grup keamanan dapat diedit setelah database dibuat. Dengan menggulir ke bawah ke bagian “Lihat pengaturan default untuk Easy Create”, Anda dapat lebih memahami konfigurasi yang dapat diedit setelah database dibuat.

Karena pembuatan Standar membutuhkan biaya yang besar dan kita hanya perlu menghubungkan database dengan server tier aplikasi untuk proyek ini, mari kita lanjutkan dengan metode Pembuatan Mudah. Namun, perlu diingat bahwa sekarang instans database tidak akan di-deploy di dalam VPC yang kita buat sebelumnya.

Sekarang akan di-deploy di VPC yang sama sekali berbeda, yaitu VPC default. Jadi, setelah membuat instans database, kita perlu membangun komunikasi antara kedua VPC tersebut, serta antara instans database dan server tier aplikasi kita.

Jadi, mari kita mulai prosesnya dengan membuat instans database.

– Pilih “Buat Mudah” sebagai metode pembuatan basis data.
– Untuk jenis Mesin, pilih Aurora (Kompatibel dengan MySQL).
– Biarkan opsi Dev/Test sebagai ukuran instans DB dan masukkan nama untuk klaster DB Anda di bagian pengenal klaster DB.
– Untuk nama pengguna Master, masukkan nama pengguna pilihan Anda.
– Pilih “Manajemen Mandiri” di bawah “Manajemen Kredensial”.
– Hapus centang pada opsi “Buat Kata Sandi Otomatis” dan masukkan kata sandi pilihan Anda sebagai kata sandi Master, lalu konfirmasikan.

Baca Juga: 
AWS meningkatkan infrastrukturnya untuk tugas intensif memori

Pastikan Anda mengingat nama pengguna Master dan kata sandi Master karena kita akan membutuhkannya nanti.

– Sekarang klik Buat basis data.

Basis data yang Anda buat akan muncul di bagian Basis Data.

– Sekarang, klik instans basis data.

Anda akan melihat lima poin penting di sini.

– Endpoint
– Nomor port yang ditetapkan dengan instans (3306: port default untuk protokol MySQL)
– ID VPC
– Zona ketersediaan tempat instans database di-deploy (Dalam kasus saya, us-east-1c)
– Grup keamanan VPC yang ditetapkan dengan instans.

Harap dicatat bahwa kami akan membutuhkan informasi di atas untuk penerapan mendatang.

– Sekarang, klik nama grup keamanan di bawah Grup keamanan VPC.
– Anda akan diarahkan ke bagian Grup Keamanan. Klik ID Grup Keamanan.

Di bagian Aturan Masuk, Anda akan melihat bahwa sudah ada aturan default. Kita perlu menambahkan aturan lain untuk mengizinkan port 3306 secara khusus.

– Klik Edit inbound rules.
– Klik Tambahkan aturan dan dari menu tarik-turun di bawah Jenis, pilih MYSQL/Aurora.
– Protokol (TCP) dan rentang Port (3306) akan diterapkan secara otomatis di kolom yang relevan. Untuk Sumber, pilih Anywhere-IPv4 dari menu tarik-turun dan klik Simpan aturan.

Ini sama sekali bukan praktik yang baik. Mengizinkan siapa pun mengakses basis data adalah sesuatu yang seharusnya tidak pernah dilakukan. Untuk meningkatkan keamanan, yang seharusnya kita lakukan adalah mengizinkan hanya server tingkat aplikasi untuk mengakses basis data melalui port 3306.

Hal ini dapat dilakukan dengan memilih grup keamanan tingkat aplikasi sebagai Sumber di atas. Namun, karena tingkat aplikasi, beserta setiap komponen lain dari arsitektur kita, di-deploy di VPC yang berbeda, kita tidak dapat melakukan tindakan tersebut di sini. Oleh karena itu, kita harus melanjutkan dengan mekanisme ini untuk membangun komunikasi dengan basis data.

Namun, kita masih perlu menghubungkan kedua VPC tersebut. Untuk itu, kita akan membuat Koneksi Peering VPC.

Peering VPC adalah koneksi jaringan yang memungkinkan komunikasi langsung antara dua VPC, meskipun keduanya berada di akun atau wilayah AWS yang berbeda. Hal ini memungkinkan instans di VPC yang berbeda untuk berkomunikasi seolah-olah berada di jaringan yang sama.

– Jadi, kita perlu kembali ke konsol VPC. Cari VPC dan pilih layanannya.
– Dari panel sebelah kiri, pilih Koneksi peering.
– Klik Buat koneksi peering.
– Berikan Nama untuk koneksi tersebut.
– Untuk ID VPC (Requester), pilih VPC default dari menu tarik-turun.
– Biarkan opsi Akun dan Wilayah tetap pada nilai defaultnya.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah ID VPC (Penerima).
– Klik Buat koneksi peering.

Anda akan melihat koneksi yang Anda buat di bagian koneksi peering.

– Pilih koneksi tersebut, klik Tindakan, lalu pilih Terima permintaan.

Sekarang kedua VPC telah terhubung. Yang perlu dilakukan hanyalah memperbarui tabel rute agar tabel rute mengetahui ke mana harus mengarahkan lalu lintas di setiap skenario.

Sebelum itu, kita perlu mengetahui CIDR IPv4 dari subnet tempat instans basis data kita berada. Anda sudah tahu AZ-nya, karena kita sudah menentukannya sebelumnya. Anda hanya perlu menemukan CIDR IPv4.

– Dari panel sebelah kiri, pilih Subnet.
– Anda akan melihat semua subnet yang tersedia di wilayah Anda. Sekarang gulir secara horizontal hingga Anda melihat kolom Zona Ketersediaan.
– Temukan AZ yang relevan dan tentukan rentang IP masing-masing dari kolom CIDR IPv4 (Dalam kasus ini, 172.31.16.0/20).

Subnet tingkat aplikasi adalah subnet yang akan mengakses basis data. Jadi, kita perlu mengedit tabel rute yang terhubung dengannya.

– Klik Route tables dari panel sebelah kiri.
– Pilih salah satu dari dua tabel rute yang terhubung dengan subnet privat tingkat aplikasi.
– Buka Routes dan klik Edit routes.
– Klik Tambahkan route.
– Tambahkan IPv4 CIDR yang telah ditentukan sebelumnya sebagai Tujuan dan pilih Koneksi Peering sebagai Target dari menu tarik-turun.
– Klik Simpan perubahan.
– Ikuti prosedur yang sama dan tambahkan entri yang sama pada tabel rute lain yang terhubung dengan subnet privat tingkat aplikasi lainnya.

Sekarang kita perlu menambahkan rute di dalam tabel rute VPC default tempat instans db kita berada. Kita perlu memberi instruksi pada tabel rute tersebut tentang cara menjangkau subnet privat dari tier aplikasi yang terletak di dalam VPC kita.

– Karena Anda telah menentukan ID VPC dari VPC default sebelumnya, cari tabel rute yang relevan sesuai dengan nilai yang ada di kolom VPC dan klik kotak centang yang ada di awal baris.
– Buka Rute dan klik Edit rute.
– Klik Tambahkan rute.
– Tambahkan CIDR IPv4 dari salah satu dari dua subnet privat di dalam tier aplikasi di bawah Tujuan dan pilih Koneksi Peering sebagai Target dari menu tarik-turun.
– Tambahkan rute lain dan sekarang lakukan hal yang sama untuk subnet privat lainnya.
– Klik Simpan perubahan.
– Sekarang buka Asosiasi subnet dan klik Edit asosiasi subnet di bawah bagian Asosiasi subnet eksplisit.
– Temukan subnet yang relevan dari CIDR IPv4 dan centang kotak subnet yang relevan.
– Klik Simpan asosiasi.

Sekarang kami telah berhasil membangun komunikasi penuh antara server tingkat aplikasi di VPC kami sendiri dan instansi basis data di VPC default.

5. Buat Security Groups

Mari kita buat Security Groups relevan yang perlu dilampirkan ke berbagai sumber daya dalam arsitektur kita.

Security Groups memungkinkan kontrol terperinci atas lalu lintas masuk dan keluar ke sumber daya tertentu dalam jaringan, secara efektif menentukan perangkat mana yang dapat berkomunikasi satu sama lain, sehingga meminimalkan risiko akses tidak sah.

Untuk memastikan keamanan dalam arsitektur kami, langkah-langkah berikut:

– Security Groups ALB Eksternal menerima jenis lalu lintas HTTP pada port 80 dari mana saja, karena meneruskan lalu lintas ke server web yang perlu diakses publik.
– Security Groups server web hanya menerima jenis lalu lintas HTTP pada port 80 dari grup keamanan penyeimbang beban eksternal.
– Security Groups ALB Internal hanya menerima jenis lalu lintas HTTP pada port 80 dari grup keamanan server web.
– Security Groups server aplikasi hanya menerima jenis lalu lintas TCP Kustom pada port 4000 (umumnya digunakan untuk menjalankan aplikasi yang dibangun menggunakan lingkungan runtime Node.js) dari Security Groups ALB internal.
– Meskipun kami tidak dapat mengimplementasikannya dalam arsitektur ini, akan jauh lebih aman jika kami juga membuat Security Groups tingkat basis data dan membiarkannya menerima jenis lalu lintas MYSQL/Aurora pada port 3306 dari Security Groups server aplikasi.

Mari kita terapkan grup keamanan di atas satu per satu. Saya akan memberikan panduan umum tentang cara membuat Security Groups.

– Dari panel sebelah kiri, pilih Grup keamanan.
– Klik Buat Grup Keamanan.
– Berikan nama unik untuk Grup Keamanan, agar Anda dapat mengidentifikasinya nanti selama implementasi.
– Berikan Deskripsi yang sesuai.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah VPC.
– Klik Tambahkan aturan di bagian Aturan masuk.
– Pilih jenis lalu lintas yang sesuai untuk setiap skenario dari menu tarik-turun di bawah Jenis. Setelah Anda memilih jenis lalu lintas, kolom di bawah Protokol dan Rentang port akan terisi otomatis, kecuali untuk TCP Kustom. Di sana, Anda harus menambahkan nomor port secara manual sebagai 4000.
– Untuk Sumber, pilih Anywhere-IPv4 untuk grup keamanan ALB eksternal dan Kustom untuk grup keamanan lainnya.
– Jangan buat perubahan apa pun di bagian Aturan keluar dan klik Buat Grup Keamanan.

Anda perlu membuat empat Security Groups: masing-masing untuk ALB Eksternal, tingkat web, ALB internal, dan tingkat aplikasi. Anda hanya perlu menambahkan satu aturan masuk di setiap Security Groups. Dengan merujuk jenis lalu lintas dan nomor port yang telah saya sebutkan di atas, Anda dapat membuatnya dengan mudah.

Saya telah menunjukkan contoh di bawah ini, dari Security Groups tingkat aplikasi yang menerima lalu lintas TCP Kustom pada port 4000 dari Security Groups ALB internal.

Semua Security Groups akan ditampilkan di bagian Security Groups. Setelah membuat keempat Security Groups, mari kita lanjutkan dan buat load balancers.

6. Buat load Balancers dan Grup Target

Kita perlu membuat dua load Balancers, satu menghadap internet dan yang lainnya sebagai komponen internal.

AWS Load Balancer membantu mendistribusikan lalu lintas masuk ke beberapa server untuk memastikan ketersediaan dan keandalan yang tinggi. Load Balancer ini secara otomatis merutekan permintaan ke instans yang sehat, mencegah kelebihan beban dan meningkatkan kinerja.

Mari kita buat penyeimbang beban eksternal terlebih dahulu.

– Cari EC2 dan pilih layanannya.
– Dari panel sebelah kiri, pilih Load Balancer.
– Klik Buat Load Balancer.
– Pilih Load Balancer Aplikasi sebagai jenis Load Balancer. Klik Buat.
– Beri nama Load Balancer dan pertahankan Skema sebagai menghadap Internet.
– Pertahankan IPv4 sebagai jenis alamat IP Load Balancer.
– Di bagian Pemetaan jaringan, pilih VPC Anda dari menu tarik-turun dan pilih dua Zona Ketersediaan dengan mengeklik kotak centang. Pastikan Anda memilih Subnet yang relevan, tempat server yang relevan akan di-deploy di setiap AZ, dari menu tarik-turun.
– Di bagian Security Groups, hapus grup keamanan default yang telah dipilih secara default, dan pilih Security Groups yang Anda buat sebelumnya untuk Load Balancer, dari menu tarik-turun.
– Di bagian Listeners and routing, pertahankan Listeners sebagai HTTP:80

Sekarang kita perlu menambahkan grup target ke load balancer. Untuk itu, pertama-tama kita perlu membuatnya.

Grup Target adalah kumpulan instans, kontainer, atau alamat IP yang menerima lalu lintas dari load balancer. Grup Target memungkinkan Anda mengelompokkan sumber daya backend dan menerapkan pemeriksaan kesehatan untuk memantau statusnya. Hubungan antara load balancer dan Grup Target sederhana: load balancer mendistribusikan lalu lintas ke target yang terdaftar di Grup Target, memastikan distribusi beban yang efisien dan toleransi kesalahan.

– Klik Buat Target group.
– Anda akan diarahkan ke tab baru. Di sana, pilih Instans sebagai jenis target.
– Gulir ke bawah dan masukkan Target group name.
– Karena server web akan ditempatkan di dalam Target Group ini, biarkan Protokol: Port sebagai HTTP: 80
– Biarkan jenis alamat IP sebagai IPv4 dan pilih VPC Anda dari menu tarik-turun.
– Biarkan Versi Protokol sebagai HTTP1 dan Protokol Pemeriksaan Kesehatan sebagai HTTP.
– Masukkan jalur Pemeriksaan Kesehatan sebagai /health
– Klik Berikutnya, jangan daftarkan target apa pun untuk saat ini, gulir ke bawah dan klik Buat Target Group.
– Sekarang kembali ke tab sebelumnya dan pilih Target Group yang baru saja Anda buat dari menu tarik-turun. Anda mungkin perlu mengeklik ikon penyegaran tersebut jika Target Group tidak terlihat.
– Biarkan semua opsi lainnya sebagai default, gulir ke bawah dan klik Buat load balancer.

Penyeimbang beban eksternal berhasil dibuat. Anda dapat mengulangi proses yang sama untuk membuat load balancer internal dan Target Groupnya.

Saat membuat load balancer, Anda tetap dapat menggunakan HTTP: 80 untuk “Listener” di bagian “Listeners and routing”. Namun, saat membuat arget Group baru, Anda harus mengubah nomor port di bagian “Protocol: Port” dari nilai default 80 menjadi 4000, karena server aplikasi akan ditempatkan di dalam arget Group ini.

Sekarang, Anda dapat melihat kedua Load balancer di bagian “Load balancers”.

Perhatikan DNS Name di depan setiap Load balancer. Itu akan dibutuhkan di bagian selanjutnya.

7. Buat S3 Bucket

Sekarang, kita perlu membuat S3 bucket yang akan digunakan untuk menyimpan kode aplikasi yang perlu di-deploy di server web tier dan app tier.

Amazon S3 (Simple Storage Service) adalah layanan penyimpanan objek yang sangat skalabel dan tahan lama, krusial bagi arsitektur cloud modern. S3 menyediakan solusi penyimpanan yang fleksibel, aman, dan skalabel yang terintegrasi secara mulus dengan layanan AWS lainnya, menjadikannya komponen penting dalam arsitektur berbasis cloud.

– Dari konsol AWS Anda, cari S3 dan pilih layanannya.
– Klik Buat bucket.
– Berikan nama unik di bawah Nama bucket.
– Biarkan semua opsi lainnya sebagai default, gulir ke bawah, dan klik Buat bucket.
– Bucket yang Anda buat akan ditampilkan di bawah bagian Bucket tujuan umum. Klik bucket yang Anda buat.

Di dalam berkas zip yang kita unduh pada Langkah 1, terdapat folder bernama application-code, yang berisi berkas-berkas relevan yang perlu disertakan dalam server application-tier dan web-tier. Kita perlu mengunggah folder ini ke bucket yang telah kita buat, tetapi ada beberapa perubahan yang perlu dilakukan sebelum melakukannya.

– Masuk ke dalam folder application-code dan edit berkas nginx.conf. Anda cukup menggunakan Notepad untuk ini.
– Gulir ke bawah dan temukan baris tempat proksi untuk ALB internal harus ditentukan.

– Salin DNS Name load balancer internal yang Anda buat sebelumnya, lalu tempel di sini.
– Simpan berkas.
– Sekarang, masuk ke folder app-tier.
– Seharusnya ada berkas JavaScript bernama DbConfig.js. Buka berkas tersebut menggunakan editor kode pilihan Anda.

Di sana Anda perlu menentukan nilai untuk DB_HOST, DB_USER, DB_PWD, DB_DATABASE dalam tanda apostrof ( ‘ ‘ ).

DB_HOST: Salin Titik Akhir instans basis data yang telah ditentukan pada Langkah 4 dan tempel di sini.
DB_USER: Tambahkan nama pengguna Master yang Anda masukkan saat membuat basis data pada Langkah 4.
DB_PWD: Tambahkan kata sandi Master yang Anda masukkan saat membuat basis data pada Langkah 4.
DB_DATABASE: Berikan nama pilihan Anda. Anda harus menggunakan nama yang sama saat membuat basis data MySQL pada langkah-langkah selanjutnya.

Pastikan Anda menambahkan nilai dengan benar.

– Simpan berkas.
– Sekarang kembali ke bucket S3 yang telah Anda buat dan klik Unggah.
– Anda dapat menyeret dan melepas seluruh folder kode aplikasi di sini atau klik Tambahkan folder, pilih folder kode aplikasi, dan unggah.
– Gulir ke bawah dan klik Unggah.

Sekarang saatnya mengonfigurasi server aplikasi dan server web.

8. Buat server aplikasi

Mari kita mulai dari backend aplikasi kita dengan menerapkan EC2 instans untuk tingkat aplikasi.

EC2 Instans hanyalah mesin virtual di cloud AWS yang menjalankan aplikasi Anda. Instans ini menyediakan daya komputasi dan dapat dikonfigurasi dengan berbagai jumlah CPU, memori, penyimpanan, dan kapasitas jaringan sesuai kebutuhan Anda.

– Kembali ke konsol EC2.
– Dari panel sebelah kiri, pilih Instans.
– Klik Luncurkan instans
– Berikan Nama.
– Untuk Amazon Machine Image, lanjutkan dengan pilihan default (Amazon Linux 2023 AMI)
– Biarkan juga Jenis instans dalam nilai default-nya (t2.micro)
– Dari menu tarik-turun di bawah Pasangan kunci, pilih Lanjutkan tanpa pasangan kunci.

Kami melakukan ini untuk meningkatkan keamanan lebih lanjut. Tanpa membuat pasangan kunci, kami akan menggunakan AWS Session Manager untuk masuk ke EC2 instans.

– Kemudian klik tombol Edit di bagian Pengaturan Jaringan.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah VPC.
– Di bagian Subnet, pilih salah satu dari dua subnet privat dalam tingkat aplikasi, tempat kita ingin menerapkan server aplikasi.
– Pastikan opsi Tetapkan IP publik otomatis diatur ke Nonaktif.
– Di bagian Firewall (security groups), klik opsi Pilih grup keamanan yang ada dan pilih grup keamanan yang Anda buat sebelumnya untuk server tingkat aplikasi.
– Biarkan semua pengaturan lainnya sebagai default, gulir ke bawah dan perluas bagian Detail lanjutan.
– Dari menu tarik-turun di bawah IAM instance profile, pastikan Anda memilih IAM Role yang Anda buat di Langkah 3.
– Biarkan semua opsi lainnya sebagai default, dan klik Launch instance.
– Instans yang Anda buat akan muncul di bawah Instans. Pilih kotak centang di depannya dan klik Connect.
– Anda akan diarahkan ke tab Pengelola Sesi. Sekarang klik Connect.

Baca Juga: 
Pengelolaan Layanan Memimpin Ekosistem AWS saat Klien Mencari Keamanan

Jika Anda tidak dapat terhubung dan muncul pesan seperti SSM Agent is not online, segarkan halaman dan kesalahan akan hilang. Jika kesalahan terus muncul kembali, berarti Anda telah melakukan kesalahan saat menerapkan grup keamanan atau tabel rute. Harap periksa kembali dan pastikan Anda telah melakukan semuanya dengan benar hingga tahap ini.

– Pada shell yang diberikan, masukkan perintah berikut satu per satu.

# =========================================
# COMMANDS TO RUN IN THE APPLICATION SERVER
# =========================================

sudo -su ec2-user

sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

sudo dnf install mysql80-community-release-el9-1.noarch.rpm -y

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

sudo dnf install mysql-community-client -y

mysql --version

# TO TEST CONNECTION BETWEEN APP-SERVER & DATABASE SERVER
mysql -h  -u  -p 

# Create the database
create DATABASE ;

# View the databases and check if it's created
show databases;

# Start using the database
use 

# Create a table (Copy the whole code block below and paste on the shell)

CREATE TABLE IF NOT EXISTS myexpenses (
    id INT NOT NULL AUTO_INCREMENT,
    amount DECIMAL(10,2),
    description VARCAHR(100),
    PRIMARY KEY(id)
);

# Verify whether the table is created correctly
show tables;

# Add an item to the table
INSERT INTO myexpenses (amount,description) VALUES ('5000','clothes');

# Check whether the item is added
SELECT * FROM myexpenses;

#===============================
# COPYING CONTENT FROM S3 BUCKET
#===============================
cd /home/ec2-user

# Make sure to add your S3 bucket name before entering the below code line
sudo aws s3 cp s3:///application-code/app-tier app-tier --recursive

cd app-tier

sudo chown -R ec2-user:ec2-user /home/ec2-user/app-tier

sudo chmod -R 755 /home/ec2-user/app-tier

#===============================
# INSTALLING NODEJS
#===============================

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

source ~/.bashrc

nvm install 16

nvm use 16

npm install -g pm2

npm install

npm audit fix

#===============================
# STARTING INDEX.JS FILE
#===============================

# Start Application with PM2 (PM2 is process manager for NodeJS)
pm2 start index.js  

# Set PM2 to Start on Boot
pm2 startup     

sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v16.20.2/bin /home/ec2-user/.nvm/versions/node/v16.20.2/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user

# Save the current configuration
pm2 save        

# To do the health check
curl http://localhost:4000/health

Jika Anda mengalami kesalahan selama konfigurasi di atas, periksa kembali setiap perintah yang diberikan dan pastikan Anda tidak melewatkan atau salah memasukkan perintah.

– Setelah selesai, klik Terminate untuk keluar dari Session Manager.

Kita telah berhasil mengonfigurasi server untuk di-deploy di dalam subnet privat tingkat aplikasi, yang merupakan backend aplikasi kita. Sekarang kita perlu menggunakan instans ini sebagai cetak biru saat men-deploy server aplikasi baru (EC2 instances). Untuk itu, kita perlu membuat AMI dari EC2 instance ini.

Amazon Machine Image (AMI) adalah semacam cetak biru atau snapshot server. AMI berisi sistem operasi, aplikasi, dan konfigurasi yang Anda butuhkan. AMI digunakan sebagai templat untuk meluncurkan EC2 instance baru dengan konfigurasi yang konsisten.

– Pilih kotak centang di depan EC2 instance Anda.
– Klik Actions > Image dan templates > Create image.

– Masukkan Image name.
– Biarkan semua opsi lainnya seperti default, gulir ke bawah dan klik Create image.

Sekarang, mari buat templat peluncuran untuk memanfaatkan AMI ini dalam pembuatan EC2 instance.

Templat Peluncuran adalah berkas konfigurasi yang berisi semua pengaturan yang diperlukan untuk meluncurkan EC2 instance, seperti jenis instans, grup keamanan, penyimpanan, dan pengaturan jaringan. Templat ini seperti resep lengkap untuk membuat server baru, sehingga memudahkan pemeliharaan konfigurasi yang konsisten.

– Dari panel sebelah kiri, pilih Launch Templates
– Klik Create launch template
– Berikan Launch template name dan Template version description
– Aktifkan Auto Scaling guidance.
– Gulir ke bawah ke bagian Application dan OS Images, klik AMI Saya, lalu pilih AMI yang Anda buat dari menu tarik-turun.
– Di bagian Jenis instans, pilih t2.micro
– Jangan buat perubahan apa pun pada Key pair dan Subnet.
– Pilih Security group yang Anda buat untuk tingkatan aplikasi dari menu tarik-turun.
– Klik Buat Create launch template.

Sekarang mari buat grup penskalaan otomatis untuk mengelola instans di dalam subnet privat tingkatan aplikasi.

Auto Scaling Group secara otomatis menambahkan atau menghapus EC2 instance berdasarkan permintaan. Grup ini menggunakan Templat Peluncuran untuk membuat instans baru saat dibutuhkan dan dapat menghapusnya saat permintaan menurun.

– Dari panel sebelah kiri, pilih Auto Scaling Groups.
– Klik Buat Auto Scaling Groups.
– Berikan Name dan pilih Launch template yang Anda buat sebelumnya dari menu tarik-turun.
– Klik Berikutnya.
– Di bagian Jaringan, pilih VPC Anda dan pilih Availability Zones and subnets yang terkait dengan tingkat aplikasi, dari menu tarik-turun di bagian masing-masing.
– Klik Berikutnya.
– Di bagian Load balancing, pilih Attach to an existing load balancer yang ada dan pilih grup target penyeimbang beban dari menu tarik-turun di bawah Existing load balancer target groups.
– Biarkan yang lain sebagai default dan klik Berikutnya.
– Mari kita Konfigurasikan ukuran dan penskalaan grup. Masukkan Kapasitas yang Diinginkan sebagai 2, Kapasitas Minimum yang Diinginkan sebagai 2, dan Kapasitas Maksimum yang Diinginkan sebagai 4. Ini akan membuat 2 instans EC2 di tingkat aplikasi dan selalu mempertahankan 2 instans kecuali ada permintaan yang lebih tinggi. Jika permintaan lebih tinggi, tingkatkan jumlah instans hingga 4.
– Di bagian Penskalaan Otomatis, pilih Kebijakan Penskalaan Pelacakan Target.
– Untuk jenis metrik, pilih Pemanfaatan CPU Rata-rata dari menu tarik-turun. Ini akan secara otomatis membuat alarm CloudWatch.
– Tentukan nilai Anda sendiri atau tetapkan nilai Target menjadi 50 dan Pemanasan Instans menjadi 30.
– Biarkan yang lain sebagai default, gulir ke bawah, dan klik Lewati untuk meninjau.
– Gulir ke bawah, dan klik Create Auto Scaling group.

Sekarang, jika Anda kembali ke Instances dari panel sisi kiri, Anda akan melihat bahwa dua instance sedang diterapkan, persis seperti yang kita tentukan.

9. Buat server web

Setelah Anda berhasil mengimplementasikan seluruh lapisan aplikasi, Anda juga perlu melakukan hal yang sama untuk lapisan web.

– Klik Luncurkan instans
– Berikan Nama.
– Untuk Amazon Machine Image, lanjutkan dengan pilihan default (Amazon Linux 2023 AMI)
– Biarkan juga jenis Instans dalam nilai default-nya (t2.micro)
– Dari menu tarik-turun di bawah Pasangan kunci, pilih Lanjutkan tanpa pasangan kunci.
– Kemudian klik tombol Edit di bagian Pengaturan jaringan.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah VPC.
– Di bawah bagian Subnet, pilih salah satu dari dua subnet publik dalam web tier, tempat kita ingin menerapkan server web.
– Pastikan Tetapkan IP publik otomatis diatur ke Aktifkan.
– Di bawah bagian Firewall (grup keamanan), klik opsi Pilih grup keamanan yang ada dan pilih grup keamanan yang Anda buat sebelumnya untuk server web tier.
– Biarkan semua pengaturan lainnya sebagai default, gulir ke bawah dan perluas bagian Detail lanjutan. Dari menu tarik-turun di bawah profil instans IAM, pastikan Anda memilih Peran IAM yang Anda buat di Langkah 3.
– Biarkan semua opsi lainnya sebagai default, lalu klik Luncurkan instans.
– Instans yang Anda buat akan muncul di bawah Instans. Centang kotak di depannya dan klik Sambungkan.
– Anda akan diarahkan ke tab Pengelola Sesi. Sekarang, klik Sambungkan.
– Pada shell yang diberikan, masukkan perintah berikut satu per satu.

# =========================================
# COMMANDS TO RUN IN THE WEB SERVER
# =========================================

# =========================================
# COPY WEB-TIER CODE FROM S3
# =========================================

sudo -su ec2-user

cd /home/ec2-user


# Make sure to add your S3 bucket name before entering the below code line
sudo aws s3 cp s3:///application-code/web-tier web-tier --recursive

sudo chown -R ec2-user:ec2-user /home/ec2-user

sudo chmod -R 755 /home/ec2-user

# =========================================
# INSTALLING NODEJS (FOR USING REACT LIBRARY)
# =========================================

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

source ~/.bashrc

nvm install 16

nvm use 16

cd /home/ec2-user/web-tier

npm install

# =========================================
# BUILDING THE APP FOR PRODUCTION
# =========================================

# Below command is used to build the code which can be served by the webserver (Nginx)
cd /home/ec2-user/web-tier

npm run build

# =========================================
# INSTALLING NGINX (WEBSERVER)
# =========================================

sudo yum install nginx -y 

cd /etc/nginx

sudo mv nginx.conf nginx-backup.conf

#Make sure to add your S3 bucket name before entering the below code line
sudo aws s3 cp s3:///application-code/nginx.conf . 

sudo chmod -R 755 /home/ec2-user

sudo service nginx restart

sudo chkconfig nginx on

– Setelah selesai, klik “Hentikan” untuk keluar dari Session Manager.
– Centang kotak di depan instans EC2 Anda.
– Klik “Tindakan” > “Gambar dan templat” > “Buat gambar”.
– Masukkan nama Gambar.
– Biarkan semua opsi lainnya sebagai default, gulir ke bawah, dan klik “Buat gambar”.
– Dari panel sebelah kiri, pilih “Luncurkan Templat”
– Klik “Buat templat peluncuran”
– Berikan nama templat peluncuran dan deskripsi versi Templat
– Aktifkan panduan Penskalaan Otomatis.
– Gulir ke bawah ke bagian “Gambar Aplikasi dan OS”, klik “AMI Saya”, dan pilih AMI yang Anda buat dari menu tarik-turun.
– Di bagian “Jenis instans”, pilih t2.micro
– Jangan buat perubahan apa pun pada Pasangan kunci dan Subnet.
– Pilih Grup keamanan yang Anda buat untuk tingkat web dari menu tarik-turun.
– Klik Buat templat peluncuran.
– Dari panel sebelah kiri, pilih Grup Penskalaan Otomatis.
– Klik Buat Grup Penskalaan Otomatis.
– Berikan Nama dan pilih Templat peluncuran yang Anda buat sebelumnya dari menu tarik-turun.
– Klik Berikutnya.
– Di bagian Jaringan, pilih VPC Anda dan pilih Zona Ketersediaan serta subnet yang terkait dengan tingkatan web, dari menu tarik-turun di bagian masing-masing.
– Klik Berikutnya.
– Di bagian Penyeimbangan Beban, pilih Lampirkan ke penyeimbang beban yang ada dan pilih grup target penyeimbang beban dari menu tarik-turun di bawah Grup target penyeimbang beban yang ada.
– Biarkan yang lain sebagai default dan klik Berikutnya.
– Mari kita Konfigurasikan ukuran dan penskalaan grup. Masukkan Kapasitas yang Diinginkan sebagai 2, Kapasitas Minimum yang Diinginkan sebagai 2, dan Kapasitas Maksimum yang Diinginkan sebagai 4.
– Di bagian Penskalaan Otomatis, pilih Kebijakan Penskalaan Pelacakan Target.
– Untuk jenis metrik, mari kita pilih Pemanfaatan CPU Rata-rata dari menu tarik-turun.
– Tentukan nilai Anda sendiri atau atur nilai Target menjadi 50 dan Pemanasan Instans menjadi 30.
– Biarkan yang lain sebagai default, gulir ke bawah dan klik Lewati untuk meninjau.
– Gulir ke bawah dan klik Buat grup Penskalaan Otomatis.

Sekarang, jika Anda kembali ke Instans dari panel sebelah kiri, Anda akan melihat dua instans lain sedang di-deploy.

Sekarang yang perlu dilakukan hanyalah memeriksa hasil akhirnya.

– Dari panel sebelah kiri, buka Load Balancer.
– Salin nama DNS load balancer eksternal dan tempel di kolom pencarian browser Anda, lalu tekan Enter.

Jika Anda menerapkan semuanya dengan benar, Anda akan melihat output di bawah ini.

Setiap tombol di dalam halaman web harus berfungsi sepenuhnya. Periksa pengoperasian basis data dengan membuka halaman DEMO DB dan menambahkan serta menghapus nilai.

Jadi, saat ini siapa pun di dunia dapat mengakses halaman web ini, tetapi hanya melalui nama DNS penyeimbang beban eksternal kami. Oleh karena itu, mari kita buat halaman web ini lebih profesional dan aksesibel hanya dengan memasukkan nama domain, seperti yang kita lakukan setiap hari dengan situs web lainnya.

10. Menyiapkan domain

Sekarang kita membutuhkan domain untuk situs web kita. Kita bisa membeli domain dari Amazon Route53 atau menggunakan registrar domain lain. Amazon Route53 menawarkan layanan pendaftaran domain dan manajemen DNS.

Sekarang kita perlu memvalidasi Kepemilikan Domain dengan AWS Certificate Manager.

Validasi kepemilikan domain diperlukan saat Anda menyiapkan domain kustom untuk Load Balancer, API Gateway, atau CloudFront. AWS perlu memverifikasi bahwa Anda adalah pemilik sah domain yang ingin Anda gunakan. Validasi ini memastikan keamanan dan mencegah penggunaan domain tanpa izin oleh orang lain. Hal ini dilakukan melalui Sertifikat, dan AWS Certificate Manager (ACM) memungkinkan Anda untuk dengan mudah meminta, menerapkan, dan memperbarui sertifikat untuk digunakan dengan layanan AWS yang disebutkan di atas, memastikan komunikasi terenkripsi dan keamanan yang ditingkatkan.

– Buka konsol AWS.
– Cari ACM dan pilih layanannya.
– Pastikan wilayah diatur ke N. Virginia (us-east-1), karena untuk menggunakan Sertifikat ACM, Anda harus meminta atau mengimpor sertifikat di wilayah N. Virginia.
– Klik Minta sertifikat
– Pastikan Minta sertifikat publik dipilih secara default dan klik Berikutnya.
– Untuk bagian Nama domain yang sepenuhnya memenuhi syarat, Anda perlu memasukkan nama domain Anda dengan tanda bintang (*) untuk meminta sertifikat wildcard guna melindungi beberapa situs dalam domain yang sama.

Misalnya, jika domain yang Anda beli adalah mydomain.net, masukkan *.mydomain.net di kolom yang tersedia.

– Pastikan validasi DNS dipilih sebagai metode Validasi.
– Biarkan yang lainnya sebagai default dan klik Minta.
– Klik Daftar sertifikat dari panel kiri dan pilih sertifikat yang Anda terima.
– Di bagian Domain, Anda akan melihat bahwa AWS telah menyediakan data CNAME dengan nama dan nilai CNAME.

Misalnya, Anda mungkin memiliki nama CNAME seperti _123456abcdef.mydomain.net. Hapus bagian .mydomain.net. setelah menempelkan nilai pada kolom Nama. Jadi, seharusnya hanya ada _123456abcdef di dalam kolom tersebut.

– Untuk Nilai, salin nilai CNAME dari atas dan tempelkan pada kolom Nilai. Pastikan untuk menghapus titik di akhir nilai yang ditempelkan.
– Biarkan nilai TTL sebagai default (1/2 jam) dan klik Simpan.

Setelah data CNAME ditambahkan, AWS akan memeriksa data tersebut secara berkala. Ketika AWS menemukannya, domain akan divalidasi, dan sertifikat SSL akan diterbitkan. Proses verifikasi mungkin akan memakan waktu beberapa menit dan setelah verifikasi selesai, Anda akan melihat Status sertifikat Anda di ACM sebagai Diterbitkan.

– Klik lagi Tambahkan Rekaman Baru.
– Pilih jenis rekaman sebagai CNAME.
– Pada kolom Nama, tambahkan subdomain pilihan Anda.

Jika domain yang Anda miliki adalah mydomain.net, Anda dapat menggunakan subdomain, yaitu informasi tambahan yang ditambahkan di awal nama domain situs web. Subdomain ini memungkinkan situs web untuk memisahkan dan mengatur konten aplikasi web 3-tier dalam skenario ini dari konten situs web lainnya.

Jadi, subdomainnya bisa berupa webapp atau apa pun yang Anda inginkan. Saya memilih webapp sebagai subdomain saya.

– Untuk kolom Nilai, tambahkan DNS name of the external load balancer.

– Biarkan nilai TTL sebagai default dan klik Simpan.

Tunggu beberapa menit hingga data DNS diperbarui.

Sekarang Anda atau siapa pun dari mana pun di dunia dapat dengan mudah mengunjungi halaman web Anda hanya dengan memasukkan alamat web (misalnya: webapp.mydomain.net) di peramban.

Selamat Anda telah berhasil menerapkan arsitektur tiga tingkat di AWS.

Sepanjang tutorial ini, kita telah mempelajari cara membangun arsitektur tiga tingkat yang tangguh, skalabel, dan aman di AWS. Mulai dari menyiapkan VPC dan komponen jaringannya hingga menerapkan aplikasi kita di berbagai lapisan, kita telah melihat bagaimana berbagai layanan AWS bekerja sama untuk menciptakan lingkungan yang siap produksi.

Ingatlah bahwa arsitektur ini bukan hanya tentang menerapkan server, tetapi tentang menciptakan fondasi yang dapat berkembang bersama aplikasi Anda, menangani kegagalan dengan baik, dan menjaga keamanan di setiap lapisan.

Meskipun pengaturan ini mungkin tampak rumit pada awalnya, ini memberikan fleksibilitas dan keandalan yang dibutuhkan aplikasi modern. Saat Anda menerapkan arsitektur ini untuk proyek Anda sendiri, fokuslah pada keamanan, skalabilitas, dan toleransi kesalahan, dan jangan ragu untuk menyesuaikan konfigurasinya agar sesuai dengan kebutuhan spesifik Anda.






Reporter: Agus Rambe Wongkuku

Membangun aplikasi web yang andal dan skalabel di cloud merupakan tugas krusial yang dihadapi setiap pengembang modern. Dalam artikel ini, saya akan berbagi pengalaman saya dalam menerapkan aplikasi web menggunakan arsitektur tiga tingkat Amazon Web Services (AWS).

Kita akan membahas cara membagi aplikasi kita menjadi tiga lapisan berbeda: lapisan web yang menangani permintaan pengguna, lapisan aplikasi yang memproses logika bisnis, dan lapisan basis data yang mengelola penyimpanan data.

Di akhir artikel ini, Anda akan memahami bagaimana bagian-bagian ini bekerja sama untuk menciptakan aplikasi yang sangat tersedia, skalabel, dan aman yang dapat berkembang sesuai kebutuhan Anda.

Mari kita mulai dengan diagram arsitektur:

Dalam arsitektur ini, Application Load Balancer (ALB) yang menghadap publik digunakan untuk meneruskan lalu lintas klien, yang diterima melalui Internet Gateway ke instans EC2 di tingkat web. Tingkat web dilengkapi dengan server web Nginx yang dikonfigurasi untuk melayani situs web React.js.

Server EC2 tersebut kemudian mengalihkan panggilan API kami ke Application Load Balancer yang menghadap internal. ALB internal kemudian meneruskan lalu lintas tersebut ke tingkat aplikasi, yang dilengkapi dengan server EC2 dengan logika bisnis yang ditulis dalam Node.js.

Tingkat aplikasi memanipulasi data dalam database Aurora MySQL dan mengembalikannya ke tingkat web kami. Penyeimbangan beban, pemeriksaan kesehatan, dan grup penskalaan otomatis dibuat di setiap lapisan untuk menjaga ketersediaan arsitektur ini. Gateway NAT dibuat, jika server dalam tingkat aplikasi yang diterapkan di dalam subnet privat perlu mengakses internet dengan aman.

Bucket S3 berisi kode aplikasi yang perlu diterapkan di dalam server di tingkat web dan tingkat aplikasi. Selain itu, CloudWatch digunakan untuk memantau metrik yang terkait dengan server EC2. Saya juga telah menggunakan registrar domain GoDaddy dan AWS Certificate Manager untuk mengakses aplikasi web saya menggunakan domain saya sendiri.

Setelah kita memiliki gambaran umum keseluruhan arsitektur, mari kita bahas setiap langkah yang saya ikuti untuk mengimplementasikan semua yang telah saya jelaskan di atas.

Harap dicatat bahwa nilai yang saya tentukan dalam diagram arsitektur (CIDR blocks, Availablity Zones, dll.) tidak harus sama dengan arsitektur Anda. Anda tidak harus memilih AZ atau rentang CIDR yang tepat. Selama sesuai dengan tujuan, Anda dapat memilih nilai apa pun yang Anda inginkan.

1. Unduh kode dari GitHub ke sistem lokal Anda

Sepanjang proyek ini, saya merujuk repositori GitHub aws-three-tier-web-architecture-workshop. Dalam repositori ini, AWS telah menyediakan semua berkas kode relevan yang diperlukan untuk diterapkan di tingkat web dan tingkat aplikasi.

2. Buat VPC dan sumber daya yang relevan

Mari kita mulai implementasinya dengan membuat VPC.
Amazon Virtual Private Cloud (VPC) sangat penting dalam arsitektur tiga tingkat AWS karena menciptakan jaringan privat yang terisolasi tempat Anda dapat meluncurkan sumber daya dengan aman.

VPC seperti bagian privat Anda sendiri di cloud AWS tempat Anda mengontrol segalanya, mulai dari rentang IP dan perutean jaringan hingga aturan keamanan. Manfaat utamanya adalah Anda dapat menempatkan tingkat aplikasi Anda di subnet yang berbeda (publik untuk tingkat web, privat untuk tingkat aplikasi dan basis data) untuk mengontrol akses.

Isolasi jaringan ini membantu melindungi sumber daya sensitif seperti basis data dari akses internet langsung sekaligus memungkinkan server web Anda melayani lalu lintas publik, menjadikan arsitektur Anda aman dan fungsional.
– Dari konsol AWS Anda, cari VPC dan pilih layanannya.
– Klik Buat VPC.
– Anda akan melihat dua opsi untuk membuat VPC; VPC saja dan VPC dan lainnya. Opsi VPC dan lainnya menyediakan cara yang lebih cepat dan mudah untuk membuat VPC dan sumber daya terkait. Untuk lebih memahami keseluruhan arsitektur VPC, mari kita pilih opsi VPC saja.
– Tambahkan tag Nama ke VPC Anda dan berikan CIDR IPv4 seperti yang ditunjukkan pada diagram arsitektur di atas.
– Biarkan semua opsi lainnya sebagai default dan klik Buat VPC.

VPC yang Anda buat akan muncul di bagian VPC Anda.

Sekarang mari kita buat subnetnya.
Subnet dalam VPC sangat penting untuk mengatur dan mengamankan sumber daya AWS Anda dengan membagi jaringan menjadi segmen-segmen yang lebih kecil.

Manfaat utamanya adalah Anda dapat membuat subnet publik (untuk sumber daya yang memerlukan akses internet, seperti server web) dan subnet privat (untuk sumber daya sensitif seperti basis data). Dalam arsitektur kami, kami membuat enam subnet.
– Dari panel sebelah kiri, klik Subnet, lalu klik Buat subnet.
– Dari panel tarik-turun di bawah ID VPC, pilih VPC yang Anda buat, dan CIDR VPC terkait akan ditampilkan di bawahnya.
– Seperti yang Anda lihat pada diagram arsitektur di atas, kita perlu membuat enam subnet; tiga di setiap zona ketersediaan. Jadi, kita perlu menambahkan setiap subnet satu per satu dengan menentukan nama yang membantu mengidentifikasi masing-masing subnet secara terpisah pada tahap implementasi selanjutnya, zona ketersediaan yang relevan, dan blok CIDR yang relevan.
– Pastikan Anda menambahkan nilai yang relevan di kolom yang relevan di bagian Pengaturan subnet seperti yang ditunjukkan di bawah ini, lalu klik Tambahkan subnet baru dan ulangi proses yang sama hingga Anda menambahkan keenam subnet beserta nama subnet uniknya, masing-masing Zona Ketersediaan, dan masing-masing blok CIDR subnet IPV4.

– Lalu klik Buat subnet.

Anda akan melihat subnet yang Anda buat muncul di bagian Subnet.

Seperti yang mungkin Anda perhatikan, kami tidak melakukan implementasi khusus saat membuat subnet yang ingin kami publikkan, dibandingkan dengan subnet yang ingin kami privatkan. Untuk saat ini, semuanya dibuat dengan cara yang sama. Kami akan segera mengubahnya.

– Klik kotak centang di depan salah satu subnet yang ingin Anda deklarasikan sebagai publik.
– Klik Tindakan dan pilih Edit pengaturan subnet.

– Di bagian Pengaturan Penetapan IP Otomatis, centang kotak Aktifkan penetapan alamat IPV4 publik secara otomatis.
– Biarkan semua opsi lainnya tidak berubah, gulir ke bawah, dan klik Simpan.
– Lakukan hal yang sama untuk subnet lain yang ingin Anda deklarasikan sebagai publik.

Pengaturan ini saja tidak akan membuat subnet-subnet ini menjadi publik. Yang benar-benar membuatnya publik adalah prosedur yang harus kita ikuti setelah membuat tabel routing. Kita akan membahasnya nanti.

Sekarang mari kita buat Gateway Internet.

Gateway Internet (IGW) adalah komponen penting dalam VPC Anda yang berfungsi sebagai gateway antara sumber daya publik Anda dan internet.

IGW berfungsi sebagai pintu gerbang yang memungkinkan komunikasi dua arah, memungkinkan sumber daya di subnet publik Anda (seperti server web) untuk mengakses internet, dan memungkinkan lalu lintas masuk dari internet untuk mencapai sumber daya publik Anda.

– Dari panel sebelah kiri, pilih Internet gateway, lalu klik Buat internet gateway.
– Cukup berikan nama pada Name tag, lalu klik Buat internet gateway.

Gerbang internet Anda akan muncul di bagian Gerbang Internet.

Sekarang mari kita buat Gerbang NAT.

Gateway NAT (Network Address Translation) sangat penting bagi sumber daya di subnet privat yang perlu mengakses internet sambil tetap aman dari lalu lintas masuk. Gateway ini berfungsi sebagai pintu satu arah yang memungkinkan sumber daya privat Anda (seperti server aplikasi) mengakses internet untuk hal-hal seperti pembaruan perangkat lunak atau panggilan API eksternal, tetapi mencegah lalu lintas internet masuk mencapai sumber daya privat ini.

Gateway NAT berada di subnet publik dan bertindak sebagai perantara, meneruskan permintaan dari sumber daya privat ke internet sambil menjaga keamanan. Untuk ketersediaan tinggi, kami membuat dua Gateway NAT terpisah dalam arsitektur kami di dalam dua subnet publik di dua Zona Ketersediaan.

– Dari panel sebelah kiri, pilih NAT gateways dan klik Create NAT gateway.
– Berikan nama.
– Di bagian Subnet, pilih subnet tempat Anda ingin menempatkan NAT Gateway. Kita membutuhkan satu di setiap subnet publik, jadi pilih salah satu subnet publik.
– Biarkan Connectivity type sebagai Public dan klik Allocate Elastic IP.
– Kemudian klik Create NAT gateway dan akan terlihat di bagian NAT gateways.

– Klik Buat gateway NAT sekali lagi dan ulangi proses yang sama untuk menempatkan Gateway NAT kedua di subnet publik lainnya.

Sekarang mari kita buat tabel rute.

Tabel rute dalam VPC merupakan komponen jaringan penting yang mengontrol aliran lalu lintas antar subnet dan ke/dari internet. Setiap subnet harus dikaitkan dengan tabel rute, yang berisi aturan (rute) yang menentukan ke mana lalu lintas dapat diarahkan.

Dalam arsitektur kami, kami membuat satu tabel rute untuk subnet publik guna mengarahkan lalu lintas mereka ke internet melalui Internet Gateway dan dua tabel rute lainnya untuk setiap subnet privat tempat server aplikasi ditempatkan untuk mengarahkan lalu lintas mereka ke internet melalui setiap NAT Gateway.

– Dari panel sebelah kiri, pilih Tabel rute dan klik Buat tabel rute.
– Tambahkan Nama, pilih VPC Anda, dan klik Buat tabel rute.

– Tabel yang Anda buat akan muncul di bawah tabel Rute. Ulangi proses yang sama untuk membuat dua tabel rute lainnya.

Sekarang saatnya menambahkan rute yang relevan ke setiap tabel rute dan mengaitkan subnetnya. Mari kita mulai dengan tabel rute publik.

– Klik kotak centang di depan tabel rute publik Anda dan pilih Rute. Anda akan melihat sudah ada satu entri di dalam tabel rute. Setelah Anda menambahkan entri lainnya, entri tersebut akan muncul di sini seperti yang ditunjukkan di bawah ini. Entri yang sudah ada di dalam tabel akan merutekan lalu lintas secara lokal, jika lalu lintas tersebut ditujukan ke suatu lokasi (IP) di dalam VPC yang sama. Sekarang kita perlu menentukan apa yang harus dilakukan dengan lalu lintas yang ditujukan ke luar VPC.

– Klik Edit rute.
– Lalu klik Tambahkan rute.
– Dari menu tarik-turun di sebelah kiri, pilih rute 0.0.0.0/0 yang berarti tujuan apa pun (pada dasarnya internet) dan dari menu tarik-turun di sebelah kanan, pilih opsi Gerbang Internet, lalu pilih gerbang internet yang Anda buat sebelumnya.

– Klik Simpan perubahan.

Tabel rute ini pada dasarnya merutekan lalu lintas yang diarahkan ke suatu lokasi (IP) di dalam VPC yang sama; secara lokal, dan mengarahkan lalu lintas yang ditujukan ke luar VPC (internet) menuju Gateway Internet. Sekarang mari kita lampirkan tabel rute ini ke subnet yang relevan. Seperti yang sudah Anda duga, tabel rute ini seharusnya dilampirkan dengan subnet publik.

– Jadi, klik kotak centang di depan tabel rute yang baru saja Anda kerjakan, sama seperti yang Anda lakukan sebelumnya, lalu klik Asosiasi subnet.
– Di bagian Asosiasi subnet eksplisit, klik Edit asosiasi subnet.
– Pilih subnet yang ingin Anda deklarasikan sebagai publik dari daftar di bawah Subnet yang tersedia, lalu klik Simpan asosiasi.

Langkah di atas adalah langkah paling krusial dalam mempublikasikan subnet yang relevan.

Sekarang kita harus mengulangi proses yang sama, yaitu mengedit rute dan mengaitkan subnet, dengan dua tabel rute lainnya.

Mari kita pilih salah satu dari dua tabel rute yang tersisa.

– Buka Rute dan klik Edit rute.
– Dari menu tarik-turun di sebelah kiri, pilih rute 0.0.0.0/0 yang berarti tujuan apa pun (pada dasarnya internet). Kali ini, dari menu tarik-turun di sebelah kanan, pilih opsi Nat Gateway, lalu pilih Nat Gateway yang diterapkan di subnet publik dalam zona ketersediaan yang sama dengan subnet privat yang akan Anda kaitkan dengan tabel rute ini (lihat diagram arsitektur).

– Klik Simpan perubahan.
– Sekarang, seperti sebelumnya, buka bagian Asosiasi subnet, klik Edit asosiasi subnet, pilih subnet yang relevan, lalu klik Simpan asosiasi.
– Ulangi proses yang sama untuk tabel rute yang tersisa.

3. Buat IAM Role

Sekarang kita perlu membuat peran IAM agar dapat melampirkannya ke instans EC2.

Peran IAM (Identity dan Access Management) sangat penting untuk mengelola akses ke sumber daya AWS secara aman. Peran IAM memungkinkan Anda menerapkan manajemen akses yang terperinci di seluruh infrastruktur AWS Anda, memastikan setiap komponen memiliki izin yang dibutuhkan, tidak lebih, tidak kurang.

Setelah peran IAM terpasang, instans EC2 dapat mengakses S3 dengan aman untuk mendapatkan kode aplikasi dan juga dapat mengelola instans dengan aman menggunakan AWS Session Manager.

– Dari konsol AWS Anda, cari IAM dan pilih layanannya.
– Dari panel sebelah kiri, klik Peran.
– Lalu klik Buat peran.
– Biarkan layanan AWS sebagai jenis entitas Tepercaya dan pilih EC2 sebagai Kasus penggunaan dari menu tarik-turun.
– Klik Berikutnya.
– Sekarang kita perlu menambahkan izin. Di bagian Izin dan kebijakan, ketik s3readonly di dalam bilah pencarian.
– Kebijakan AmazonS3ReadOnlyAccess akan muncul dan centang kotak di depannya.
– Kita perlu menambahkan satu izin lagi. Kosongkan bilah pencarian dan ketik ssmmanaged.
– Kebijakan AmazonSSMManagedInstanceCore akan muncul dan centang kotak di depannya juga.
– Klik Berikutnya.
– Masukkan nama yang bermakna, di bawah Nama peran untuk mengidentifikasi peran yang Anda buat.
– Pastikan kedua kebijakan yang Anda pilih di atas terlihat di bawah Ringkasan kebijakan izin dan klik Buat peran.

Sekarang mari kita lanjutkan dan terapkan database aplikasi kita.

4. Buat instans basis data RDS

Kami memilih RDS untuk tujuan ini.

Amazon RDS (Relational Database Service) adalah layanan basis data terkelola yang menyederhanakan pengaturan, pengoperasian, dan penskalaan basis data dalam arsitektur cloud. Layanan ini mendukung berbagai mesin basis data seperti MySQL, PostgreSQL, Oracle, dan SQL Server. Layanan ini memungkinkan penerapan multi-AZ untuk failover otomatis, menyediakan solusi basis data yang tangguh, aman, dan mudah dikelola sehingga pengembang dapat berfokus pada logika aplikasi, alih-alih administrasi basis data.

– Dari konsol AWS Anda, cari RDS dan pilih layanannya.
– Dari panel sebelah kiri, pilih Basis Data dan klik Buat basis data.
– Di sini Anda akan melihat dua opsi untuk pembuatan basis data; Pembuatan Standar dan Pembuatan Mudah.

Untuk melihat potensi RDS yang sesungguhnya, kita perlu membuat database dengan fitur “Standard Create”, tetapi biayanya sangat mahal; hampir 60 USD per bulan.

Di sisi lain, fitur “Easy Create” sangat murah, tetapi tidak memungkinkan penerapan multi-AZ, tidak memungkinkan penerapan Database di dalam VPC pilihan kita karena database secara otomatis diterapkan di dalam VPC default dan juga menetapkan grup keamanan default ke instans database.

Namun, grup keamanan dapat diedit setelah database dibuat. Dengan menggulir ke bawah ke bagian “Lihat pengaturan default untuk Easy Create”, Anda dapat lebih memahami konfigurasi yang dapat diedit setelah database dibuat.

Karena pembuatan Standar membutuhkan biaya yang besar dan kita hanya perlu menghubungkan database dengan server tier aplikasi untuk proyek ini, mari kita lanjutkan dengan metode Pembuatan Mudah. Namun, perlu diingat bahwa sekarang instans database tidak akan di-deploy di dalam VPC yang kita buat sebelumnya.

Sekarang akan di-deploy di VPC yang sama sekali berbeda, yaitu VPC default. Jadi, setelah membuat instans database, kita perlu membangun komunikasi antara kedua VPC tersebut, serta antara instans database dan server tier aplikasi kita.

Jadi, mari kita mulai prosesnya dengan membuat instans database.

– Pilih “Buat Mudah” sebagai metode pembuatan basis data.
– Untuk jenis Mesin, pilih Aurora (Kompatibel dengan MySQL).
– Biarkan opsi Dev/Test sebagai ukuran instans DB dan masukkan nama untuk klaster DB Anda di bagian pengenal klaster DB.
– Untuk nama pengguna Master, masukkan nama pengguna pilihan Anda.
– Pilih “Manajemen Mandiri” di bawah “Manajemen Kredensial”.
– Hapus centang pada opsi “Buat Kata Sandi Otomatis” dan masukkan kata sandi pilihan Anda sebagai kata sandi Master, lalu konfirmasikan.

Baca Juga: 
Membangun Arsitektur Solusi Web End-to-End dengan AWS

Pastikan Anda mengingat nama pengguna Master dan kata sandi Master karena kita akan membutuhkannya nanti.

– Sekarang klik Buat basis data.

Basis data yang Anda buat akan muncul di bagian Basis Data.

– Sekarang, klik instans basis data.

Anda akan melihat lima poin penting di sini.

– Endpoint
– Nomor port yang ditetapkan dengan instans (3306: port default untuk protokol MySQL)
– ID VPC
– Zona ketersediaan tempat instans database di-deploy (Dalam kasus saya, us-east-1c)
– Grup keamanan VPC yang ditetapkan dengan instans.

Harap dicatat bahwa kami akan membutuhkan informasi di atas untuk penerapan mendatang.

– Sekarang, klik nama grup keamanan di bawah Grup keamanan VPC.
– Anda akan diarahkan ke bagian Grup Keamanan. Klik ID Grup Keamanan.

Di bagian Aturan Masuk, Anda akan melihat bahwa sudah ada aturan default. Kita perlu menambahkan aturan lain untuk mengizinkan port 3306 secara khusus.

– Klik Edit inbound rules.
– Klik Tambahkan aturan dan dari menu tarik-turun di bawah Jenis, pilih MYSQL/Aurora.
– Protokol (TCP) dan rentang Port (3306) akan diterapkan secara otomatis di kolom yang relevan. Untuk Sumber, pilih Anywhere-IPv4 dari menu tarik-turun dan klik Simpan aturan.

Ini sama sekali bukan praktik yang baik. Mengizinkan siapa pun mengakses basis data adalah sesuatu yang seharusnya tidak pernah dilakukan. Untuk meningkatkan keamanan, yang seharusnya kita lakukan adalah mengizinkan hanya server tingkat aplikasi untuk mengakses basis data melalui port 3306.

Hal ini dapat dilakukan dengan memilih grup keamanan tingkat aplikasi sebagai Sumber di atas. Namun, karena tingkat aplikasi, beserta setiap komponen lain dari arsitektur kita, di-deploy di VPC yang berbeda, kita tidak dapat melakukan tindakan tersebut di sini. Oleh karena itu, kita harus melanjutkan dengan mekanisme ini untuk membangun komunikasi dengan basis data.

Namun, kita masih perlu menghubungkan kedua VPC tersebut. Untuk itu, kita akan membuat Koneksi Peering VPC.

Peering VPC adalah koneksi jaringan yang memungkinkan komunikasi langsung antara dua VPC, meskipun keduanya berada di akun atau wilayah AWS yang berbeda. Hal ini memungkinkan instans di VPC yang berbeda untuk berkomunikasi seolah-olah berada di jaringan yang sama.

– Jadi, kita perlu kembali ke konsol VPC. Cari VPC dan pilih layanannya.
– Dari panel sebelah kiri, pilih Koneksi peering.
– Klik Buat koneksi peering.
– Berikan Nama untuk koneksi tersebut.
– Untuk ID VPC (Requester), pilih VPC default dari menu tarik-turun.
– Biarkan opsi Akun dan Wilayah tetap pada nilai defaultnya.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah ID VPC (Penerima).
– Klik Buat koneksi peering.

Anda akan melihat koneksi yang Anda buat di bagian koneksi peering.

– Pilih koneksi tersebut, klik Tindakan, lalu pilih Terima permintaan.

Sekarang kedua VPC telah terhubung. Yang perlu dilakukan hanyalah memperbarui tabel rute agar tabel rute mengetahui ke mana harus mengarahkan lalu lintas di setiap skenario.

Sebelum itu, kita perlu mengetahui CIDR IPv4 dari subnet tempat instans basis data kita berada. Anda sudah tahu AZ-nya, karena kita sudah menentukannya sebelumnya. Anda hanya perlu menemukan CIDR IPv4.

– Dari panel sebelah kiri, pilih Subnet.
– Anda akan melihat semua subnet yang tersedia di wilayah Anda. Sekarang gulir secara horizontal hingga Anda melihat kolom Zona Ketersediaan.
– Temukan AZ yang relevan dan tentukan rentang IP masing-masing dari kolom CIDR IPv4 (Dalam kasus ini, 172.31.16.0/20).

Subnet tingkat aplikasi adalah subnet yang akan mengakses basis data. Jadi, kita perlu mengedit tabel rute yang terhubung dengannya.

– Klik Route tables dari panel sebelah kiri.
– Pilih salah satu dari dua tabel rute yang terhubung dengan subnet privat tingkat aplikasi.
– Buka Routes dan klik Edit routes.
– Klik Tambahkan route.
– Tambahkan IPv4 CIDR yang telah ditentukan sebelumnya sebagai Tujuan dan pilih Koneksi Peering sebagai Target dari menu tarik-turun.
– Klik Simpan perubahan.
– Ikuti prosedur yang sama dan tambahkan entri yang sama pada tabel rute lain yang terhubung dengan subnet privat tingkat aplikasi lainnya.

Sekarang kita perlu menambahkan rute di dalam tabel rute VPC default tempat instans db kita berada. Kita perlu memberi instruksi pada tabel rute tersebut tentang cara menjangkau subnet privat dari tier aplikasi yang terletak di dalam VPC kita.

– Karena Anda telah menentukan ID VPC dari VPC default sebelumnya, cari tabel rute yang relevan sesuai dengan nilai yang ada di kolom VPC dan klik kotak centang yang ada di awal baris.
– Buka Rute dan klik Edit rute.
– Klik Tambahkan rute.
– Tambahkan CIDR IPv4 dari salah satu dari dua subnet privat di dalam tier aplikasi di bawah Tujuan dan pilih Koneksi Peering sebagai Target dari menu tarik-turun.
– Tambahkan rute lain dan sekarang lakukan hal yang sama untuk subnet privat lainnya.
– Klik Simpan perubahan.
– Sekarang buka Asosiasi subnet dan klik Edit asosiasi subnet di bawah bagian Asosiasi subnet eksplisit.
– Temukan subnet yang relevan dari CIDR IPv4 dan centang kotak subnet yang relevan.
– Klik Simpan asosiasi.

Sekarang kami telah berhasil membangun komunikasi penuh antara server tingkat aplikasi di VPC kami sendiri dan instansi basis data di VPC default.

5. Buat Security Groups

Mari kita buat Security Groups relevan yang perlu dilampirkan ke berbagai sumber daya dalam arsitektur kita.

Security Groups memungkinkan kontrol terperinci atas lalu lintas masuk dan keluar ke sumber daya tertentu dalam jaringan, secara efektif menentukan perangkat mana yang dapat berkomunikasi satu sama lain, sehingga meminimalkan risiko akses tidak sah.

Untuk memastikan keamanan dalam arsitektur kami, langkah-langkah berikut:

– Security Groups ALB Eksternal menerima jenis lalu lintas HTTP pada port 80 dari mana saja, karena meneruskan lalu lintas ke server web yang perlu diakses publik.
– Security Groups server web hanya menerima jenis lalu lintas HTTP pada port 80 dari grup keamanan penyeimbang beban eksternal.
– Security Groups ALB Internal hanya menerima jenis lalu lintas HTTP pada port 80 dari grup keamanan server web.
– Security Groups server aplikasi hanya menerima jenis lalu lintas TCP Kustom pada port 4000 (umumnya digunakan untuk menjalankan aplikasi yang dibangun menggunakan lingkungan runtime Node.js) dari Security Groups ALB internal.
– Meskipun kami tidak dapat mengimplementasikannya dalam arsitektur ini, akan jauh lebih aman jika kami juga membuat Security Groups tingkat basis data dan membiarkannya menerima jenis lalu lintas MYSQL/Aurora pada port 3306 dari Security Groups server aplikasi.

Mari kita terapkan grup keamanan di atas satu per satu. Saya akan memberikan panduan umum tentang cara membuat Security Groups.

– Dari panel sebelah kiri, pilih Grup keamanan.
– Klik Buat Grup Keamanan.
– Berikan nama unik untuk Grup Keamanan, agar Anda dapat mengidentifikasinya nanti selama implementasi.
– Berikan Deskripsi yang sesuai.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah VPC.
– Klik Tambahkan aturan di bagian Aturan masuk.
– Pilih jenis lalu lintas yang sesuai untuk setiap skenario dari menu tarik-turun di bawah Jenis. Setelah Anda memilih jenis lalu lintas, kolom di bawah Protokol dan Rentang port akan terisi otomatis, kecuali untuk TCP Kustom. Di sana, Anda harus menambahkan nomor port secara manual sebagai 4000.
– Untuk Sumber, pilih Anywhere-IPv4 untuk grup keamanan ALB eksternal dan Kustom untuk grup keamanan lainnya.
– Jangan buat perubahan apa pun di bagian Aturan keluar dan klik Buat Grup Keamanan.

Anda perlu membuat empat Security Groups: masing-masing untuk ALB Eksternal, tingkat web, ALB internal, dan tingkat aplikasi. Anda hanya perlu menambahkan satu aturan masuk di setiap Security Groups. Dengan merujuk jenis lalu lintas dan nomor port yang telah saya sebutkan di atas, Anda dapat membuatnya dengan mudah.

Saya telah menunjukkan contoh di bawah ini, dari Security Groups tingkat aplikasi yang menerima lalu lintas TCP Kustom pada port 4000 dari Security Groups ALB internal.

Semua Security Groups akan ditampilkan di bagian Security Groups. Setelah membuat keempat Security Groups, mari kita lanjutkan dan buat load balancers.

6. Buat load Balancers dan Grup Target

Kita perlu membuat dua load Balancers, satu menghadap internet dan yang lainnya sebagai komponen internal.

AWS Load Balancer membantu mendistribusikan lalu lintas masuk ke beberapa server untuk memastikan ketersediaan dan keandalan yang tinggi. Load Balancer ini secara otomatis merutekan permintaan ke instans yang sehat, mencegah kelebihan beban dan meningkatkan kinerja.

Mari kita buat penyeimbang beban eksternal terlebih dahulu.

– Cari EC2 dan pilih layanannya.
– Dari panel sebelah kiri, pilih Load Balancer.
– Klik Buat Load Balancer.
– Pilih Load Balancer Aplikasi sebagai jenis Load Balancer. Klik Buat.
– Beri nama Load Balancer dan pertahankan Skema sebagai menghadap Internet.
– Pertahankan IPv4 sebagai jenis alamat IP Load Balancer.
– Di bagian Pemetaan jaringan, pilih VPC Anda dari menu tarik-turun dan pilih dua Zona Ketersediaan dengan mengeklik kotak centang. Pastikan Anda memilih Subnet yang relevan, tempat server yang relevan akan di-deploy di setiap AZ, dari menu tarik-turun.
– Di bagian Security Groups, hapus grup keamanan default yang telah dipilih secara default, dan pilih Security Groups yang Anda buat sebelumnya untuk Load Balancer, dari menu tarik-turun.
– Di bagian Listeners and routing, pertahankan Listeners sebagai HTTP:80

Sekarang kita perlu menambahkan grup target ke load balancer. Untuk itu, pertama-tama kita perlu membuatnya.

Grup Target adalah kumpulan instans, kontainer, atau alamat IP yang menerima lalu lintas dari load balancer. Grup Target memungkinkan Anda mengelompokkan sumber daya backend dan menerapkan pemeriksaan kesehatan untuk memantau statusnya. Hubungan antara load balancer dan Grup Target sederhana: load balancer mendistribusikan lalu lintas ke target yang terdaftar di Grup Target, memastikan distribusi beban yang efisien dan toleransi kesalahan.

– Klik Buat Target group.
– Anda akan diarahkan ke tab baru. Di sana, pilih Instans sebagai jenis target.
– Gulir ke bawah dan masukkan Target group name.
– Karena server web akan ditempatkan di dalam Target Group ini, biarkan Protokol: Port sebagai HTTP: 80
– Biarkan jenis alamat IP sebagai IPv4 dan pilih VPC Anda dari menu tarik-turun.
– Biarkan Versi Protokol sebagai HTTP1 dan Protokol Pemeriksaan Kesehatan sebagai HTTP.
– Masukkan jalur Pemeriksaan Kesehatan sebagai /health
– Klik Berikutnya, jangan daftarkan target apa pun untuk saat ini, gulir ke bawah dan klik Buat Target Group.
– Sekarang kembali ke tab sebelumnya dan pilih Target Group yang baru saja Anda buat dari menu tarik-turun. Anda mungkin perlu mengeklik ikon penyegaran tersebut jika Target Group tidak terlihat.
– Biarkan semua opsi lainnya sebagai default, gulir ke bawah dan klik Buat load balancer.

Penyeimbang beban eksternal berhasil dibuat. Anda dapat mengulangi proses yang sama untuk membuat load balancer internal dan Target Groupnya.

Saat membuat load balancer, Anda tetap dapat menggunakan HTTP: 80 untuk “Listener” di bagian “Listeners and routing”. Namun, saat membuat arget Group baru, Anda harus mengubah nomor port di bagian “Protocol: Port” dari nilai default 80 menjadi 4000, karena server aplikasi akan ditempatkan di dalam arget Group ini.

Sekarang, Anda dapat melihat kedua Load balancer di bagian “Load balancers”.

Perhatikan DNS Name di depan setiap Load balancer. Itu akan dibutuhkan di bagian selanjutnya.

7. Buat S3 Bucket

Sekarang, kita perlu membuat S3 bucket yang akan digunakan untuk menyimpan kode aplikasi yang perlu di-deploy di server web tier dan app tier.

Amazon S3 (Simple Storage Service) adalah layanan penyimpanan objek yang sangat skalabel dan tahan lama, krusial bagi arsitektur cloud modern. S3 menyediakan solusi penyimpanan yang fleksibel, aman, dan skalabel yang terintegrasi secara mulus dengan layanan AWS lainnya, menjadikannya komponen penting dalam arsitektur berbasis cloud.

– Dari konsol AWS Anda, cari S3 dan pilih layanannya.
– Klik Buat bucket.
– Berikan nama unik di bawah Nama bucket.
– Biarkan semua opsi lainnya sebagai default, gulir ke bawah, dan klik Buat bucket.
– Bucket yang Anda buat akan ditampilkan di bawah bagian Bucket tujuan umum. Klik bucket yang Anda buat.

Di dalam berkas zip yang kita unduh pada Langkah 1, terdapat folder bernama application-code, yang berisi berkas-berkas relevan yang perlu disertakan dalam server application-tier dan web-tier. Kita perlu mengunggah folder ini ke bucket yang telah kita buat, tetapi ada beberapa perubahan yang perlu dilakukan sebelum melakukannya.

– Masuk ke dalam folder application-code dan edit berkas nginx.conf. Anda cukup menggunakan Notepad untuk ini.
– Gulir ke bawah dan temukan baris tempat proksi untuk ALB internal harus ditentukan.

– Salin DNS Name load balancer internal yang Anda buat sebelumnya, lalu tempel di sini.
– Simpan berkas.
– Sekarang, masuk ke folder app-tier.
– Seharusnya ada berkas JavaScript bernama DbConfig.js. Buka berkas tersebut menggunakan editor kode pilihan Anda.

Di sana Anda perlu menentukan nilai untuk DB_HOST, DB_USER, DB_PWD, DB_DATABASE dalam tanda apostrof ( ‘ ‘ ).

DB_HOST: Salin Titik Akhir instans basis data yang telah ditentukan pada Langkah 4 dan tempel di sini.
DB_USER: Tambahkan nama pengguna Master yang Anda masukkan saat membuat basis data pada Langkah 4.
DB_PWD: Tambahkan kata sandi Master yang Anda masukkan saat membuat basis data pada Langkah 4.
DB_DATABASE: Berikan nama pilihan Anda. Anda harus menggunakan nama yang sama saat membuat basis data MySQL pada langkah-langkah selanjutnya.

Pastikan Anda menambahkan nilai dengan benar.

– Simpan berkas.
– Sekarang kembali ke bucket S3 yang telah Anda buat dan klik Unggah.
– Anda dapat menyeret dan melepas seluruh folder kode aplikasi di sini atau klik Tambahkan folder, pilih folder kode aplikasi, dan unggah.
– Gulir ke bawah dan klik Unggah.

Sekarang saatnya mengonfigurasi server aplikasi dan server web.

8. Buat server aplikasi

Mari kita mulai dari backend aplikasi kita dengan menerapkan EC2 instans untuk tingkat aplikasi.

EC2 Instans hanyalah mesin virtual di cloud AWS yang menjalankan aplikasi Anda. Instans ini menyediakan daya komputasi dan dapat dikonfigurasi dengan berbagai jumlah CPU, memori, penyimpanan, dan kapasitas jaringan sesuai kebutuhan Anda.

– Kembali ke konsol EC2.
– Dari panel sebelah kiri, pilih Instans.
– Klik Luncurkan instans
– Berikan Nama.
– Untuk Amazon Machine Image, lanjutkan dengan pilihan default (Amazon Linux 2023 AMI)
– Biarkan juga Jenis instans dalam nilai default-nya (t2.micro)
– Dari menu tarik-turun di bawah Pasangan kunci, pilih Lanjutkan tanpa pasangan kunci.

Kami melakukan ini untuk meningkatkan keamanan lebih lanjut. Tanpa membuat pasangan kunci, kami akan menggunakan AWS Session Manager untuk masuk ke EC2 instans.

– Kemudian klik tombol Edit di bagian Pengaturan Jaringan.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah VPC.
– Di bagian Subnet, pilih salah satu dari dua subnet privat dalam tingkat aplikasi, tempat kita ingin menerapkan server aplikasi.
– Pastikan opsi Tetapkan IP publik otomatis diatur ke Nonaktif.
– Di bagian Firewall (security groups), klik opsi Pilih grup keamanan yang ada dan pilih grup keamanan yang Anda buat sebelumnya untuk server tingkat aplikasi.
– Biarkan semua pengaturan lainnya sebagai default, gulir ke bawah dan perluas bagian Detail lanjutan.
– Dari menu tarik-turun di bawah IAM instance profile, pastikan Anda memilih IAM Role yang Anda buat di Langkah 3.
– Biarkan semua opsi lainnya sebagai default, dan klik Launch instance.
– Instans yang Anda buat akan muncul di bawah Instans. Pilih kotak centang di depannya dan klik Connect.
– Anda akan diarahkan ke tab Pengelola Sesi. Sekarang klik Connect.

Baca Juga: 
Pengertian AWS: EFS vs EBS vs S3 perbedaan dan penggunaannya

Jika Anda tidak dapat terhubung dan muncul pesan seperti SSM Agent is not online, segarkan halaman dan kesalahan akan hilang. Jika kesalahan terus muncul kembali, berarti Anda telah melakukan kesalahan saat menerapkan grup keamanan atau tabel rute. Harap periksa kembali dan pastikan Anda telah melakukan semuanya dengan benar hingga tahap ini.

– Pada shell yang diberikan, masukkan perintah berikut satu per satu.

# =========================================
# COMMANDS TO RUN IN THE APPLICATION SERVER
# =========================================

sudo -su ec2-user

sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

sudo dnf install mysql80-community-release-el9-1.noarch.rpm -y

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

sudo dnf install mysql-community-client -y

mysql --version

# TO TEST CONNECTION BETWEEN APP-SERVER & DATABASE SERVER
mysql -h  -u  -p 

# Create the database
create DATABASE ;

# View the databases and check if it's created
show databases;

# Start using the database
use 

# Create a table (Copy the whole code block below and paste on the shell)

CREATE TABLE IF NOT EXISTS myexpenses (
    id INT NOT NULL AUTO_INCREMENT,
    amount DECIMAL(10,2),
    description VARCAHR(100),
    PRIMARY KEY(id)
);

# Verify whether the table is created correctly
show tables;

# Add an item to the table
INSERT INTO myexpenses (amount,description) VALUES ('5000','clothes');

# Check whether the item is added
SELECT * FROM myexpenses;

#===============================
# COPYING CONTENT FROM S3 BUCKET
#===============================
cd /home/ec2-user

# Make sure to add your S3 bucket name before entering the below code line
sudo aws s3 cp s3:///application-code/app-tier app-tier --recursive

cd app-tier

sudo chown -R ec2-user:ec2-user /home/ec2-user/app-tier

sudo chmod -R 755 /home/ec2-user/app-tier

#===============================
# INSTALLING NODEJS
#===============================

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

source ~/.bashrc

nvm install 16

nvm use 16

npm install -g pm2

npm install

npm audit fix

#===============================
# STARTING INDEX.JS FILE
#===============================

# Start Application with PM2 (PM2 is process manager for NodeJS)
pm2 start index.js  

# Set PM2 to Start on Boot
pm2 startup     

sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v16.20.2/bin /home/ec2-user/.nvm/versions/node/v16.20.2/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user

# Save the current configuration
pm2 save        

# To do the health check
curl http://localhost:4000/health

Jika Anda mengalami kesalahan selama konfigurasi di atas, periksa kembali setiap perintah yang diberikan dan pastikan Anda tidak melewatkan atau salah memasukkan perintah.

– Setelah selesai, klik Terminate untuk keluar dari Session Manager.

Kita telah berhasil mengonfigurasi server untuk di-deploy di dalam subnet privat tingkat aplikasi, yang merupakan backend aplikasi kita. Sekarang kita perlu menggunakan instans ini sebagai cetak biru saat men-deploy server aplikasi baru (EC2 instances). Untuk itu, kita perlu membuat AMI dari EC2 instance ini.

Amazon Machine Image (AMI) adalah semacam cetak biru atau snapshot server. AMI berisi sistem operasi, aplikasi, dan konfigurasi yang Anda butuhkan. AMI digunakan sebagai templat untuk meluncurkan EC2 instance baru dengan konfigurasi yang konsisten.

– Pilih kotak centang di depan EC2 instance Anda.
– Klik Actions > Image dan templates > Create image.

– Masukkan Image name.
– Biarkan semua opsi lainnya seperti default, gulir ke bawah dan klik Create image.

Sekarang, mari buat templat peluncuran untuk memanfaatkan AMI ini dalam pembuatan EC2 instance.

Templat Peluncuran adalah berkas konfigurasi yang berisi semua pengaturan yang diperlukan untuk meluncurkan EC2 instance, seperti jenis instans, grup keamanan, penyimpanan, dan pengaturan jaringan. Templat ini seperti resep lengkap untuk membuat server baru, sehingga memudahkan pemeliharaan konfigurasi yang konsisten.

– Dari panel sebelah kiri, pilih Launch Templates
– Klik Create launch template
– Berikan Launch template name dan Template version description
– Aktifkan Auto Scaling guidance.
– Gulir ke bawah ke bagian Application dan OS Images, klik AMI Saya, lalu pilih AMI yang Anda buat dari menu tarik-turun.
– Di bagian Jenis instans, pilih t2.micro
– Jangan buat perubahan apa pun pada Key pair dan Subnet.
– Pilih Security group yang Anda buat untuk tingkatan aplikasi dari menu tarik-turun.
– Klik Buat Create launch template.

Sekarang mari buat grup penskalaan otomatis untuk mengelola instans di dalam subnet privat tingkatan aplikasi.

Auto Scaling Group secara otomatis menambahkan atau menghapus EC2 instance berdasarkan permintaan. Grup ini menggunakan Templat Peluncuran untuk membuat instans baru saat dibutuhkan dan dapat menghapusnya saat permintaan menurun.

– Dari panel sebelah kiri, pilih Auto Scaling Groups.
– Klik Buat Auto Scaling Groups.
– Berikan Name dan pilih Launch template yang Anda buat sebelumnya dari menu tarik-turun.
– Klik Berikutnya.
– Di bagian Jaringan, pilih VPC Anda dan pilih Availability Zones and subnets yang terkait dengan tingkat aplikasi, dari menu tarik-turun di bagian masing-masing.
– Klik Berikutnya.
– Di bagian Load balancing, pilih Attach to an existing load balancer yang ada dan pilih grup target penyeimbang beban dari menu tarik-turun di bawah Existing load balancer target groups.
– Biarkan yang lain sebagai default dan klik Berikutnya.
– Mari kita Konfigurasikan ukuran dan penskalaan grup. Masukkan Kapasitas yang Diinginkan sebagai 2, Kapasitas Minimum yang Diinginkan sebagai 2, dan Kapasitas Maksimum yang Diinginkan sebagai 4. Ini akan membuat 2 instans EC2 di tingkat aplikasi dan selalu mempertahankan 2 instans kecuali ada permintaan yang lebih tinggi. Jika permintaan lebih tinggi, tingkatkan jumlah instans hingga 4.
– Di bagian Penskalaan Otomatis, pilih Kebijakan Penskalaan Pelacakan Target.
– Untuk jenis metrik, pilih Pemanfaatan CPU Rata-rata dari menu tarik-turun. Ini akan secara otomatis membuat alarm CloudWatch.
– Tentukan nilai Anda sendiri atau tetapkan nilai Target menjadi 50 dan Pemanasan Instans menjadi 30.
– Biarkan yang lain sebagai default, gulir ke bawah, dan klik Lewati untuk meninjau.
– Gulir ke bawah, dan klik Create Auto Scaling group.

Sekarang, jika Anda kembali ke Instances dari panel sisi kiri, Anda akan melihat bahwa dua instance sedang diterapkan, persis seperti yang kita tentukan.

9. Buat server web

Setelah Anda berhasil mengimplementasikan seluruh lapisan aplikasi, Anda juga perlu melakukan hal yang sama untuk lapisan web.

– Klik Luncurkan instans
– Berikan Nama.
– Untuk Amazon Machine Image, lanjutkan dengan pilihan default (Amazon Linux 2023 AMI)
– Biarkan juga jenis Instans dalam nilai default-nya (t2.micro)
– Dari menu tarik-turun di bawah Pasangan kunci, pilih Lanjutkan tanpa pasangan kunci.
– Kemudian klik tombol Edit di bagian Pengaturan jaringan.
– Pilih VPC yang Anda buat dari menu tarik-turun di bawah VPC.
– Di bawah bagian Subnet, pilih salah satu dari dua subnet publik dalam web tier, tempat kita ingin menerapkan server web.
– Pastikan Tetapkan IP publik otomatis diatur ke Aktifkan.
– Di bawah bagian Firewall (grup keamanan), klik opsi Pilih grup keamanan yang ada dan pilih grup keamanan yang Anda buat sebelumnya untuk server web tier.
– Biarkan semua pengaturan lainnya sebagai default, gulir ke bawah dan perluas bagian Detail lanjutan. Dari menu tarik-turun di bawah profil instans IAM, pastikan Anda memilih Peran IAM yang Anda buat di Langkah 3.
– Biarkan semua opsi lainnya sebagai default, lalu klik Luncurkan instans.
– Instans yang Anda buat akan muncul di bawah Instans. Centang kotak di depannya dan klik Sambungkan.
– Anda akan diarahkan ke tab Pengelola Sesi. Sekarang, klik Sambungkan.
– Pada shell yang diberikan, masukkan perintah berikut satu per satu.

# =========================================
# COMMANDS TO RUN IN THE WEB SERVER
# =========================================

# =========================================
# COPY WEB-TIER CODE FROM S3
# =========================================

sudo -su ec2-user

cd /home/ec2-user


# Make sure to add your S3 bucket name before entering the below code line
sudo aws s3 cp s3:///application-code/web-tier web-tier --recursive

sudo chown -R ec2-user:ec2-user /home/ec2-user

sudo chmod -R 755 /home/ec2-user

# =========================================
# INSTALLING NODEJS (FOR USING REACT LIBRARY)
# =========================================

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

source ~/.bashrc

nvm install 16

nvm use 16

cd /home/ec2-user/web-tier

npm install

# =========================================
# BUILDING THE APP FOR PRODUCTION
# =========================================

# Below command is used to build the code which can be served by the webserver (Nginx)
cd /home/ec2-user/web-tier

npm run build

# =========================================
# INSTALLING NGINX (WEBSERVER)
# =========================================

sudo yum install nginx -y 

cd /etc/nginx

sudo mv nginx.conf nginx-backup.conf

#Make sure to add your S3 bucket name before entering the below code line
sudo aws s3 cp s3:///application-code/nginx.conf . 

sudo chmod -R 755 /home/ec2-user

sudo service nginx restart

sudo chkconfig nginx on

– Setelah selesai, klik “Hentikan” untuk keluar dari Session Manager.
– Centang kotak di depan instans EC2 Anda.
– Klik “Tindakan” > “Gambar dan templat” > “Buat gambar”.
– Masukkan nama Gambar.
– Biarkan semua opsi lainnya sebagai default, gulir ke bawah, dan klik “Buat gambar”.
– Dari panel sebelah kiri, pilih “Luncurkan Templat”
– Klik “Buat templat peluncuran”
– Berikan nama templat peluncuran dan deskripsi versi Templat
– Aktifkan panduan Penskalaan Otomatis.
– Gulir ke bawah ke bagian “Gambar Aplikasi dan OS”, klik “AMI Saya”, dan pilih AMI yang Anda buat dari menu tarik-turun.
– Di bagian “Jenis instans”, pilih t2.micro
– Jangan buat perubahan apa pun pada Pasangan kunci dan Subnet.
– Pilih Grup keamanan yang Anda buat untuk tingkat web dari menu tarik-turun.
– Klik Buat templat peluncuran.
– Dari panel sebelah kiri, pilih Grup Penskalaan Otomatis.
– Klik Buat Grup Penskalaan Otomatis.
– Berikan Nama dan pilih Templat peluncuran yang Anda buat sebelumnya dari menu tarik-turun.
– Klik Berikutnya.
– Di bagian Jaringan, pilih VPC Anda dan pilih Zona Ketersediaan serta subnet yang terkait dengan tingkatan web, dari menu tarik-turun di bagian masing-masing.
– Klik Berikutnya.
– Di bagian Penyeimbangan Beban, pilih Lampirkan ke penyeimbang beban yang ada dan pilih grup target penyeimbang beban dari menu tarik-turun di bawah Grup target penyeimbang beban yang ada.
– Biarkan yang lain sebagai default dan klik Berikutnya.
– Mari kita Konfigurasikan ukuran dan penskalaan grup. Masukkan Kapasitas yang Diinginkan sebagai 2, Kapasitas Minimum yang Diinginkan sebagai 2, dan Kapasitas Maksimum yang Diinginkan sebagai 4.
– Di bagian Penskalaan Otomatis, pilih Kebijakan Penskalaan Pelacakan Target.
– Untuk jenis metrik, mari kita pilih Pemanfaatan CPU Rata-rata dari menu tarik-turun.
– Tentukan nilai Anda sendiri atau atur nilai Target menjadi 50 dan Pemanasan Instans menjadi 30.
– Biarkan yang lain sebagai default, gulir ke bawah dan klik Lewati untuk meninjau.
– Gulir ke bawah dan klik Buat grup Penskalaan Otomatis.

Sekarang, jika Anda kembali ke Instans dari panel sebelah kiri, Anda akan melihat dua instans lain sedang di-deploy.

Sekarang yang perlu dilakukan hanyalah memeriksa hasil akhirnya.

– Dari panel sebelah kiri, buka Load Balancer.
– Salin nama DNS load balancer eksternal dan tempel di kolom pencarian browser Anda, lalu tekan Enter.

Jika Anda menerapkan semuanya dengan benar, Anda akan melihat output di bawah ini.

Setiap tombol di dalam halaman web harus berfungsi sepenuhnya. Periksa pengoperasian basis data dengan membuka halaman DEMO DB dan menambahkan serta menghapus nilai.

Jadi, saat ini siapa pun di dunia dapat mengakses halaman web ini, tetapi hanya melalui nama DNS penyeimbang beban eksternal kami. Oleh karena itu, mari kita buat halaman web ini lebih profesional dan aksesibel hanya dengan memasukkan nama domain, seperti yang kita lakukan setiap hari dengan situs web lainnya.

10. Menyiapkan domain

Sekarang kita membutuhkan domain untuk situs web kita. Kita bisa membeli domain dari Amazon Route53 atau menggunakan registrar domain lain. Amazon Route53 menawarkan layanan pendaftaran domain dan manajemen DNS.

Sekarang kita perlu memvalidasi Kepemilikan Domain dengan AWS Certificate Manager.

Validasi kepemilikan domain diperlukan saat Anda menyiapkan domain kustom untuk Load Balancer, API Gateway, atau CloudFront. AWS perlu memverifikasi bahwa Anda adalah pemilik sah domain yang ingin Anda gunakan. Validasi ini memastikan keamanan dan mencegah penggunaan domain tanpa izin oleh orang lain. Hal ini dilakukan melalui Sertifikat, dan AWS Certificate Manager (ACM) memungkinkan Anda untuk dengan mudah meminta, menerapkan, dan memperbarui sertifikat untuk digunakan dengan layanan AWS yang disebutkan di atas, memastikan komunikasi terenkripsi dan keamanan yang ditingkatkan.

– Buka konsol AWS.
– Cari ACM dan pilih layanannya.
– Pastikan wilayah diatur ke N. Virginia (us-east-1), karena untuk menggunakan Sertifikat ACM, Anda harus meminta atau mengimpor sertifikat di wilayah N. Virginia.
– Klik Minta sertifikat
– Pastikan Minta sertifikat publik dipilih secara default dan klik Berikutnya.
– Untuk bagian Nama domain yang sepenuhnya memenuhi syarat, Anda perlu memasukkan nama domain Anda dengan tanda bintang (*) untuk meminta sertifikat wildcard guna melindungi beberapa situs dalam domain yang sama.

Misalnya, jika domain yang Anda beli adalah mydomain.net, masukkan *.mydomain.net di kolom yang tersedia.

– Pastikan validasi DNS dipilih sebagai metode Validasi.
– Biarkan yang lainnya sebagai default dan klik Minta.
– Klik Daftar sertifikat dari panel kiri dan pilih sertifikat yang Anda terima.
– Di bagian Domain, Anda akan melihat bahwa AWS telah menyediakan data CNAME dengan nama dan nilai CNAME.

Misalnya, Anda mungkin memiliki nama CNAME seperti _123456abcdef.mydomain.net. Hapus bagian .mydomain.net. setelah menempelkan nilai pada kolom Nama. Jadi, seharusnya hanya ada _123456abcdef di dalam kolom tersebut.

– Untuk Nilai, salin nilai CNAME dari atas dan tempelkan pada kolom Nilai. Pastikan untuk menghapus titik di akhir nilai yang ditempelkan.
– Biarkan nilai TTL sebagai default (1/2 jam) dan klik Simpan.

Setelah data CNAME ditambahkan, AWS akan memeriksa data tersebut secara berkala. Ketika AWS menemukannya, domain akan divalidasi, dan sertifikat SSL akan diterbitkan. Proses verifikasi mungkin akan memakan waktu beberapa menit dan setelah verifikasi selesai, Anda akan melihat Status sertifikat Anda di ACM sebagai Diterbitkan.

– Klik lagi Tambahkan Rekaman Baru.
– Pilih jenis rekaman sebagai CNAME.
– Pada kolom Nama, tambahkan subdomain pilihan Anda.

Jika domain yang Anda miliki adalah mydomain.net, Anda dapat menggunakan subdomain, yaitu informasi tambahan yang ditambahkan di awal nama domain situs web. Subdomain ini memungkinkan situs web untuk memisahkan dan mengatur konten aplikasi web 3-tier dalam skenario ini dari konten situs web lainnya.

Jadi, subdomainnya bisa berupa webapp atau apa pun yang Anda inginkan. Saya memilih webapp sebagai subdomain saya.

– Untuk kolom Nilai, tambahkan DNS name of the external load balancer.

– Biarkan nilai TTL sebagai default dan klik Simpan.

Tunggu beberapa menit hingga data DNS diperbarui.

Sekarang Anda atau siapa pun dari mana pun di dunia dapat dengan mudah mengunjungi halaman web Anda hanya dengan memasukkan alamat web (misalnya: webapp.mydomain.net) di peramban.

Selamat Anda telah berhasil menerapkan arsitektur tiga tingkat di AWS.

Sepanjang tutorial ini, kita telah mempelajari cara membangun arsitektur tiga tingkat yang tangguh, skalabel, dan aman di AWS. Mulai dari menyiapkan VPC dan komponen jaringannya hingga menerapkan aplikasi kita di berbagai lapisan, kita telah melihat bagaimana berbagai layanan AWS bekerja sama untuk menciptakan lingkungan yang siap produksi.

Ingatlah bahwa arsitektur ini bukan hanya tentang menerapkan server, tetapi tentang menciptakan fondasi yang dapat berkembang bersama aplikasi Anda, menangani kegagalan dengan baik, dan menjaga keamanan di setiap lapisan.

Meskipun pengaturan ini mungkin tampak rumit pada awalnya, ini memberikan fleksibilitas dan keandalan yang dibutuhkan aplikasi modern. Saat Anda menerapkan arsitektur ini untuk proyek Anda sendiri, fokuslah pada keamanan, skalabilitas, dan toleransi kesalahan, dan jangan ragu untuk menyesuaikan konfigurasinya agar sesuai dengan kebutuhan spesifik Anda.






Reporter: Agus Rambe Wongkuku

Untuk mendapatkan Berita & Review menarik Saksenengku Network
Google News

Artikel Terkait

Populer

Artikel Terbaru