Tentang AWS Elastic Beanstalk

AWS Elastic Beanstalk adalah sebuah service yang memungkinkan kita untuk mengupload code web app beserta konfigurasi environment. Elastic Beanstalk kemudian akan secara otomatis menyediakan resources yang diperlukan—seperti EC2, Elastic Load Balancing, automatic scaling, dan lain-lain—untuk menjalankan aplikasi tersebut.
Service ini memudahkan developer yang belum familiar dengan AWS untuk deploy, scale, dan memonitor web app. Elastic Beanstalk sangat fleksibel karena mendukung berbagai platform dan bahasa pemrograman seperti Ruby, PHP, Node.js, Python, .NET (Windows), Go, Java, Docker, dan lainnya.
Di AWS Elastic Beanstalk ada 2 environment tier:
Web server environment
Environment ini biasanya digunakan untuk aplikasi web pada umumnya yang berjalan di HTTP port 80. Tier ini menyediakan beberapa resources penting:
- Amazon Route 53: URL yang dibuat Route 53 akan diasosiasikan dengan Elastic Load Balancer.
- Elastic Load Balancer: Terintegrasi dengan auto-scaling group untuk menyesuaikan kapasitas aplikasi sesuai traffic.
- EC2 Instances: Elastic Beanstalk minimal menyediakan satu instance untuk menjalankan aplikasi.
Worker environment
Environment ini cocok untuk aplikasi dengan backend processing task yang berinteraksi dengan AWS SQS. Di tier ini akan terpasang daemon pada setiap EC2 instance untuk menarik request dari SQS queue.
Deployment Options
Elastic Beanstalk menyediakan beberapa deployment option untuk memudahkan pengelolaan infrastruktur: All at once, Rolling, Rolling with additional batch, dan Immutable.
All at once
Ini adalah deployment option default. Opsi ini akan merilis aplikasi ke semua resources secara bersamaan sehingga berpotensi menimbulkan downtime bagi user.
Ada jawaban bagus dan mudah dimengerti di stackoverflow tentang opsi deployment EB, bisa dilihat disini https://stackoverflow.com/questions/38656595/difference-between-rolling-rolling-with-additional-batch-and-immutable-deployme.
All at once: Replace all
v1withv2at the same time. Failure not handled.
Rolling
Rolling dapat meminimalkan disruption dibanding all at once. Elastic Beanstalk akan melakukan deployment dalam beberapa batch, mengupdate sebagian resources setiap kali sehingga kita mungkin memiliki dua versi aplikasi dalam waktu singkat. Aplikasi tetap bisa melayani request selama proses berlangsung.
Rolling: Replace
v1instances withv2instances one at a time. Watch for failures.
Rolling with additional batch
Prinsipnya mirip rolling, tetapi opsi ini menambahkan batch ekstra sehingga kapasitas tersedia tetap stabil selama update berlangsung.
Rolling with batch: Create some new
v2instances. If successful, roll out onv1instances. When all arev2instances, scale back to original size.
Immutable
Opsi ini membuat instance baru sebanyak resource yang ada sehingga ukuran environment sementara menjadi dua kali lipat. Setelah instance baru lolos health check, environment lama akan dihapus untuk deployment yang aman dan tanpa downtime.
Immutable: Don’t change
v1instances. Create same number ofv2instances. Wait for success, then stopv1instances.
Demonstrasi
Untuk pergi ke halaman AWS Elastic Beanstalk, kita bisa search Elastic Beanstalk di kolom pencarian di AWS Console lalu klik menu Elastic Beanstalk. Untuk deploy di Elastic Beanstalk, kita bisa mulai dengan klik button Create Application.

Kita bisa memberi nama aplikasi serta menambahkan tag, misalnya key “env” dengan value “test” untuk membantu pengelompokan resource.

Pilih platform aplikasi—contoh demo ini menggunakan PHP di Amazon Linux 2. Untuk application code, kita bisa upload dari lokal ataupun S3; pada demo ini digunakan sample application bawaan.
Kita bisa langsung buat aplikasi dengan default setting, tapi aku akan coba menjelaskan custom configuration. Klik configure more options untuk pergi ke menu configurations.

Di Presets tersedia opsi Low cost, High availability, dan Custom. Low cost akan menggunakan resource minimal, sementara High availability menerapkan deployment ke beberapa Availability Zone dengan auto-scaling dan load balancing aktif.

Kita juga bisa mengatur instance agar meng-upload rotated logs ke S3. Di bagian ini kita dapat mengaktifkan log rotation dan mengatur lama retensi log, misalnya hingga 10 tahun.

Untuk instances, t2.micro akan menjadi instance default kita, yang mana cukup oke. Kita juga bisa atur konfigurasi root volume instance ini.
Pada auto-scaling, tentukan jumlah minimum dan maksimum instance, pilih Availability Zone, serta atur trigger. Misalnya, set upper threshold CPU utilization 75% dan lower threshold 30%. Jika CPU melampaui 75% selama lima menit, auto-scaling akan otomatis menambah instance.


Lalu ada notifikasi, kita bisa input email kita untuk mendapatkan updates terkait event yang terjadi di environment kita. Kita bisa menggunakan SNS. SNS ini akan mengirim email ke kita tiap ada event penting.
Kita juga bisa menambahkan database ke EB kita dengan cara restore existing snapshot atau setup database baru.

Kalau kita klik save, Elastic Beanstalk akan membuat environment kita sesuai dengan konfigurasi kita. Ini akan memakan waktu selama beberapa menit untuk menyiapkan dan memproses semua resources yang dibutu

Berhasil! Kita telah berhasil deploy aplikasi php ke Elastic Beanstalk. Kita bisa langsung membuka web app tersebut dengan klik link yang tersedia di detail environments.

AWS EB juga menyediakan logs, kita bisa mendownload logs dari EC2 Instance di menu logs. Kita juga bisa melihat total requests, CPU Utilization di menu Monitoring, juga kita bisa melihat semua event yang terjadi di menu Events.




Semuanya sangat simpel dan memudahkan ya. Gimana? Tertarik untuk coba AWS Elastic Beanstalk untuk web app kamu yang selanjutnya?