Container Orchestration menggunakan container orchestrator merupakan hal yang sangat lazim digunakan saat ini, terutama untuk mendukung menjalankan atau mengatur aplikasi aplikasi berbasis container.
Beberapa container orchestrator yang mungkin paling sering kita dengar adalah Kubernetes. Selain itu juga ada beberapa yang lain seperti Docker Swarm. AWS juga memiliki managed service untuk container orchestrator, contohnya adalah Amazon ECS (Elastic Container Service) dan Amazon EKS (Elastic Kubernetes Service).
Pada artikel kali ini saya akan mencoba untuk lebih fokus membahas Amazon ECS. Amazon ECS seperti yang sudah dibahas secara singkat di atas, merupakan sebuah service yang tugas utama nya adalah sebagai managed container service. ECS merupakan proprietary service yang dimiliki oleh AWS. Beberapa komponen yang ada pada ECS adalah sebagai berikut:
- Cluster : Kumpulan/cluster logical dari ECS resource.
- Task Definition : Beberapa kumpulan perintah yang digunakan untuk menjalankan application. Di dalamnnya juga terdapat Container Definition yang digunakan untuk mendefinisikan container yang akan di jalankan. Mungkin bisa di analogikan juga sebagai Deployment jika kita mengacu kepada istilah di Kubernetes.
- Task : Sekumpulan satu atau lebih container yang berjalan yang telah didefinisikan di dalam Task Definition. Mungkin bisa di analogikan juga sebagai Pod juga kita mengacu kepada istilah di Kubernetes.
- Service : Service yang digunakan untuk meng-expose Task Definition.
- Container Registry : Registry atau tempat dimana Container disimpan.
Untuk menjalankan Task, ECS memiliki beberapa tipe atau yang disebut launch type. Beberapa di antaranya adalah:
- Fargate : Menjalankan task secara serverless.
- EC2 : Menjalankan task di EC2 Instance yang berada di AWS.
- External : Menjalankan task di on premise VM yang sudah didaftarkan ke ECS cluster.
Pada artikel ini saya akan menjelaskan sebuah skenario dimana saya akan membuat sebuah cluster ECS yang nantinya akan menjalankan container dengan metode Fargate. Image container akan di-pull atau download dari Docker Hub. Kurang lebih topologinya seperti berikut:
.
Konfigurasi di artikel ini secara keseluruhan dilakukan di AWS Web Console.
Berikut langkah-langkah konfigurasinya:
-
Masuk ke AWS Web Console. Kemudian masuk ke halaman ECS. Buat Cluster dengan cara masuk ke menu Clusters. Kemudian tekan tombol Create Cluster.
.
-
Pilih Cluster Template. Pada artikel ini saya akan menggunakan metode Networking Only karena nanti akan menggunakan launch type Fargate.
.
-
Konfigurasi cluster. Di artikel ini saya akan membuat VPC baru dengan CIDR block dan subnet baru. Dan akan saya tag dengan nama. Kemudian tekan tombol Create.
.
.
-
Tunggu hingga launch status untuk cluster yang baru dibuat selesai.
.
-
Selanjutnya verifikasi bahwa cluster baru sudah berhasil dibuat.
.
-
Hal berikutnya yang akan dilakukan adalah konfigurasi Task Definitions. Masuk ke menu Task Definitions, kemudian tekan tombol Create New Task Definition.
.
-
Pilih launch type yang akan digunakan. Di artikel ini saya akan menggunakan Fargate.
.
-
Konfigurasi Task Definition. Konfigurasi nama, task role, task execution role, task memory dan task CPU.
.
.
-
Di salah 1 bagian/section, ada pilihan untuk konfigurasi Container yang akan digunakan. Tekan tombol Add container.
.
-
Pop up akan muncul. Isi nama container dan pilih image yang akan digunakan. Pada artikel ini saya akan menggunakan image dari Docker hub yaitu image container nginx. Konfigurasi lainnya saya biarkan default. Jika sudah sesuai, tekan tombol Add.
.
-
Setelah itu pop up add container akan tertutup, konfigurasi lainnya saya biarkan default dan hanya menambahkan tag nama. Setelah itu tekan tombol Create agar konfigurasi Task Definition dapat dibuat.
.
-
Tunggu hingga launch status untuk Task Definition selesai.
.
-
Selanjutnya kembali ke halaman Clusters. Di cluster ludes-ecs-staging yang baru terbentuk, akan saya jalankan service untuk menjalankan Task Definition. Pada tab Services, klik tombol Create.
.
-
Konfigurasi service. Launch type yang saya gunakan adalah Fargate, dan akan mengacu ke Task Definition ludes-ecs-staging dengan revision 1 yang baru saya buat. Kemudian pilih cluster yang akan digunakan, beri nama dan jumlah task yang akan dijalankan. Pada konfigurasi awal akan saya set hanya menjalankan 1 task.
.
.
-
Masih di halaman yang sama, pilih metode deployment. Pada contoh di artikel ini saya menggunakan metode Rolling update dan di akhir saya konfigurasi tag nama. Jika sudah dapat dilanjut ke halaman konfigurasi berikutnya.
.
-
Halaman konfigurasi berikutnya adalah konfigurasi network. Pilih VPC yang digunakan beserta Subnet-nya. Auto-assign public IP saya aktifkan pada contoh di artikel ini. Selain itu untuk konfigurasi Security Group dapat dengan tekan tombol Edit.
.
-
Pop up konfigurasi security group akan muncul. Pada artikel ini saya akan membuat security group baru dengan inbound rule mengizinkan port http dan https untuk masuk dari manapun.
.
-
Selanjutnya adalah konfigurasi Auto Scaling. Di artikel ini saya tidak menggunakan fitur tersebut, sehingga bisa dilanjut ke langkah berikutnya.
.
-
Selanjutnya review seluruh konfigurasi Service. Jika sudah sesuai dapat membuat atau Create Service.
.
-
Tunggu hingga launch status untuk Service sudah selesai.
.
-
Verifikasi Service ludes-ecs-staging yang baru dibuat sudah berhasil terbentuk. Dan tunggu beberapa saat hingga running task sudah menunjukan 1 Fargate task yang running. Karena sebelumnya sudah saya definisikan untuk task yang berjalan di service saat ini adalah 1 task.
.
-
Selanjutnya masuk ke tab Tasks, pastikan task sudah ada 1 task yang running. Selanjutnya coba klik nama task tersebut.
.
-
Pada detail konfigurasi nanti akan ditemukan banyak informasi, beberapa di antaranya adalah status task. Kemudian di bagian network akan kita temukan private IP dan public IP dari task tersebut (Jika task diizinkan untuk menggunakan IP Public).
.
-
Pada web browser, coba akses ip public tersebut. Hasil yang diharapkan adalah kita sudah bisa akses container nginx yang sebelumnya didefinisikan.
.
-
Sampai sini kita sudah dapat menyimpulkan bahwa konfigurasi cluster ECS kita sudah berjalan karena container yang didefinisikan sudah dapat diakses. Namun pada langkah berikutnya akan saya coba simulasikan jika task ditambah. Dalam beberapa kondisi mungkin kita perlu scale up atau scale down task yang digunakan dalam cluster kita. Simak langkah konfigurasinya di poin berikutnya.
-
Kembali ke menu Service, pada contoh artikel ini nama service saya adalah ludes-ecs-staging. Klik tombol Update untuk edit atau merubah konfigurasi service.
.
-
Pada bagian Number of tasks, tambahkan jumlah task yang diinginkan. Pada contoh artikel ini saya akan coba scale up jumlah task menjadi 2.
.
-
Jika tidak ada konfigurasi lainnya yang ingin dirubah, dapat langsung Update Service.
.
-
Tunggu hingga launch status untuk update service selesai.
.
-
Selanjutnya kembali ke menu Service, kemudian tekan tab Tasks. Pastikan jumlah task yang berjalan saat ini sudah naik menjadi 2 running task.
.
-
Verifikasi isi detail dari kedua task tersebut.
.
-
Selanjutnya kita bisa verifikasi dengan mengakses kedua IP Public untuk 2 task tersebut via web browser.
.
Sampai disini kita sudah berhasil mensimulasikan bagaimana membuat konfigurasi sebuah Cluster ECS secara manual via AWS Web Console. Termasuk juga konfigurasi komponen-komponen konfigurasi ECS hingga sampai container yang kita definisikan dapat berjalan dan diakses.
Sekian artikel kali ini dan semoga bermanfaat.
Jika ada pertanyaan, saran atau kritik. Silahkan tinggalkan pesan di kolom komentar.
Terima kasih.
Tinggalkan Balasan