Semua hal yang Anda sebutkan seperti load balancing, pemantauan, dan penskalaan otomatis jelas merupakan keuntungan.
Namun, Anda harus memikirkannya seperti ini: Dalam True Platform as a Service (PAAS), tujuannya adalah untuk memisahkan aplikasi dari platform. Sebagai pengembang, Anda hanya mengkhawatirkan aplikasi Anda. Platform ini "disewakan" untuk Anda. Platform "instance" secara otomatis diperbarui, dikelola, diskalakan, seimbang, dll. Untuk Anda. Anda baru saja mengunggah file WAR Anda dan itu berfungsi (setidaknya secara teoritis).
EC2 dengan sendirinya bukan PAAS. Ini lebih seperti IAAS ( Infrastructure as a Service ). Anda masih harus menjaga instance server, menginstal perangkat lunak di dalamnya, terus memperbaruinya, dll.
Elastic Beanstalk adalah sistem PAAS. Begitu juga App Engine dan Azure di antara banyak lainnya.
Dalam sistem PAAS yang sebenarnya, DBMS adalah komponen terpisah dari server aplikasi web. Alasannya jelas: DBMS tidak mungkin diinstal pada instans yang digunakan untuk server aplikasi karena, saat instans dibuat dan dihancurkan berdasarkan lalu lintas Anda, DBMS akan hilang! Memiliki DBMS dan server aplikasi pada mesin / instans yang sama umumnya bukanlah ide yang baik.
Dalam sistem PAAS, DBMS adalah layanan terpisah. Untuk Amazon, itu adalah Amazon RDS . Sama seperti dengan Elastic Beanstalk, di mana Anda tidak perlu khawatir tentang server aplikasi dan Anda cukup mengunggah file WAR Anda, dengan RDS, Anda tidak perlu khawatir tentang DBMS dan Anda cukup menyebarkan basis data Anda.
Elastic Beanstalk dan RDS bekerja sama dengan sangat baik, terutama saat diterapkan di zona ketersediaan yang sama, dengan latensi yang sangat rendah.
Terakhir, penggunaan Elastic Beanstalk tidak memerlukan biaya apa pun selain sumber daya yang diterapkan (instans EC2 dan penyeimbang beban). Namun, RDS tidak murah dan pasti akan lebih mahal daripada menggunakan instans EC2 tunggal untuk server aplikasi dan DBMS.
Elastic Beanstalk melakukan lebih dari sekadar load balancing, pemantauan, dan penskalaan otomatis.
1) Mengelola versi aplikasi dengan menyimpan dan mengelola berbagai versi aplikasi Anda, memungkinkan Anda dengan mudah beralih antara versi aplikasi yang berbeda.
2) Memiliki konsep "lingkungan" untuk setiap aplikasi, memungkinkan Anda untuk menerapkan versi yang berbeda dari aplikasi Anda di setiap lingkungan. Ini berguna misalnya jika Anda ingin menyiapkan lingkungan QA dan DEV yang terpisah, dan Anda ingin dengan mudah menerapkan build terlebih dahulu di DEV, lalu menerapkan versi aplikasi yang sama di QA saat tim QA Anda siap untuk build berikutnya.
3) Mengeksternalisasikan properti konfigurasi container yang penting (pengaturan memori Tomcat, misalnya) ke konsol dan API Elastic Beanstalk. Karenanya, Anda dapat dengan mudah menyimpan pengaturan dan menyalinnya antar lingkungan.
4) Lihat file log aplikasi melalui konsol dan secara otomatis menggulung dan mengarsipkan file log ke S3. (Memang fitur ini saat ini agak lemah.)
sumber
Saya memiliki aplikasi yang digunakan baik di EC2 dedicated (Nginx & Gunicorn) dan Beanstalk Environment (CentOS & Apache2).
Pengamatan saya:
BeanStalk adalah Paas. Membuat instans EC2 (IAAS) secara manual, seperti melakukan semuanya dari awal, tetapi Anda memiliki kontrol yang solid.
BeanStalk hadir dengan CentOS dan Apache (Httpd) default. Anda dapat memilih OS dalam contoh khusus.
Hal-hal ini yang penting bagi saya,
Dalam kasus saya, saya harus meningkatkan server (Pohon Kacang) untuk menjalankan instalasi beberapa paket (seperti pandoc). Hal-hal ini lebih sederhana di Ubuntu.
Penskalaan jauh lebih mudah di BeanStalk. Kloning server sangat mudah di BeanStalk.
Saya telah mengambil mikro dalam kedua kasus (berdedikasi & Pohon Kacang). Saya merasa contoh mikro khusus lebih baik.
Penerapan otomatis di Pohon Kacang. Saya harus menulis skrip untuk mengotomatiskan hal yang sama, yang tidak masalah, karena hanya sekali.
sumber