Merancang Aplikasi di AWS
Pendahuluan
Merancang aplikasi di AWS Cloud sebenarnya susah-susah gampang.
Bukan karena tidak adanya komponen Cloud yang dibutuhkan, akan tetapi lebih kepada :
- Menentukan komponen AWS Cloud yang cocok dengan kebutuhan aplikasi kita. Karena di cloud banyak service yang serupa tapi tak sama, harganya pun berbeda.
- Mengatur biaya penggunaan komponen AWS Cloud agar hemat dan tidak berlebihan. Banyak pilihan service di cloud. Ada barang ada harga. Begitu pula dengan service di cloud. Harus pintar-pintar dalam memilih apa yang cocok, mudah, dan sesuai dengan budget.
- Mengatur tingkat keamanan aplikasi.
- Mengatur tingkat reliability dan auto scaling aplikasi kita.
- Mengatur beberapa hal lain yang terkait dengan makin kerennya aplikasi kita.. (lebayy..)
Kesulitan diatas merupakan tantangan tersendiri dalam merancang sebuah aplikasi di AWS Cloud.
Apa saja contohnya ?
Misalkan saja saat akan membuat sebuah aplikasi, maka akan muncul pertanyaan dilihat dari sudut pandang Software Engineer.
Contohnya :
- Apakah aplikasi kita cukup dengan kumpulan fungsi-fungsi di AWS Lambda saja ?
- Atau apakah kita perlu mengatur lebih detail dengan menggunakan AWS EC2 (Elastic Compute Cloud) , Elastic Beanstalk (EBS) ?
- Atau apakah sebenarnya aplikasi kita sebenarnya lebih cocok dengan AWS LightSail ?
- Atau apakah lebih cocok dengan menggunakan Container seperti fitur AWS ECS (Elastic Container Service) ?
- Atau apakah perlu juga clustering Kubernetes, seperti AWS EKS (Elastic Kubernetes Service) ?
- Atau apakah lebih mudah kalau di level atasnya lagi, seperti AWS Fargate ?
- Atau lebih mudah kalau di level atasnya lagi, AWS App Runner ?
- Atau sebenarnya kita lebih tepat memakai AWS Amplify , sehingga web dan mobile juga bisa didevelop ?
Nah lhoo !!,
Banyak sekali pilihan yang akan kita hadapi ketika memutuskan untuk menggunakan service-service yang ada di AWS Cloud.
Hal diatas tersebut hanya untuk menentukan service Compute Service yang dibutuhkan oleh aplikasi kita, yang merupakan komponen utama dari sebuah aplikasi dari sudut pandang Software Engineering.
Ternyata untuk menentukan garis besar teknologi dari aplikasi yang akan kita bangun ternyata mempunyai banyak sekali pilihan.
Dan tiap pilihan teknologi tersebut mempunyai efek samping yang berkaitan, misalnya dari segi harga, kecepatan pemrosesan, reliability, auto scaling, kemudahan integrasi, dll.
Belum lagi selanjutnya kalau kita dihadapkan dengan pilihan Database/DataSource.
- SQL related, butuh MySQL, Aurora, MariaDB, Oracle, Postgre, atau SQL Server ?
- Butuh non SQL related, Amazon DynamoDB, Amazon DocumentDB, atau Amazon KeySpaces ?
- Butuh graph database, Amazon Neptune database ?
- Butuh database dengan security tinggi untuk finance, Amazon QLDB ?
- Butuh database event streaming dan data analytic, Amazon Timestream ?
- Butuh database berbasis caches, Amazon ElasticCache atau Amazon MemoryDB ?
Nah, bingung kaan ….!
Mau pakai teknologi terbaru saja kah ?, atau pakai service yang low level, kah sehingga mudah dicontrol ? atau pakai service yang low-code (yang kita tidak perlu detail dalam pemilihan server dan tetek bengeknya) yang mudah dari sisi pengelolannya, tetapi bisa saja bikin kaget ketika biaya penggunaan yang meroket ? .
Tuh kaan, lagi-lagi kita dihadapkan pada pilihan yang membagongkan.
Bukan hanya pilihan service di AWS saja yang membagongkan, akan tetapi pilihan dari aplikasi yang kita buat juga pastinya pada awalnya membagongkan dan membingungkan.
Trus, lalu bagaimana dong ?
Hidup itu adalah pilihan, seperti kata banyak orang.
Termasuk di dalamnya ketika kita mau menggunakan service AWS Cloud ini.
Pasti ada trade-off ketika kita memilih menggunakan sebuah service tertentu di AWS ini.
Kalau kita lihat, komponen di AWS cukup lengkap dari sisi service-service yang ditawarkan. Dimulai dari sisi low-level service ke low-code service, dari IAaS, PAaS, SAaS, sampai termasuk AAaS (Analytical As a Service).
IAaS, PAaS, SAaS, AAaS bisa dibaca di sini
Jadi secara komponen sudah cukup lengkap.
Masalahnya adalah di pemilihan komponennya.
Secara logika, ada beberapa faktor yang harus diperhatikan ketika pemilihan komponen AWS Cloud ini, misalnya :
- Apakah aplikasi kita ini aplikasi baru atau migrasi ke AWS dari aplikasi sebelumnya ? Baru disini maksudnya adalah aplikasi yang memang dari awal kita buat untuk dideploy ke AWS Cloud.
- Bagaimana tipikal aplikasi kita yang mau dideploy ? apakah kemungkinan akan bisa bertambah requestnya kah sehingga mau otomatis auto scaling sumber daya nya kah ?
- Seberapa dalam tingkat keamanan terhadap akses dan service yang aplikasi yang kita punyai ?
- Seberapa banyak anggota tim aplikasi kita untuk melakukan development aplikasi ?
- Apa teknologi yang akan dipakai ? tipe database nya ? tipe integrasinya ..
- Dan masih banyak sekali pertanyaan lanjutan untuk bisa menentukan pilihan kita.
See.., banyak pertanyaan yang harus kita jawab untuk bisa merancang aplikasi yang dideploy di AWS.
Intinya, untuk memilih komponen-komponen yang tepat tersebut, maka kita harus melakukan assessment atau penjajakan mengenai aplikasi yang akan kita bangun.
Berdasarkan assessment ini, maka kita akan merancang aplikasi, lalu dari rancangan itu kita akan bisa memilih komponen AWS Cloud apa saja yang akan kita pakai.
Proses yang intuitive mestinya.
Apakah ada panduan dari AWS nya untuk hal ini ?
Iya, AWS sendiri mempunyai panduan ketika kita mau merancang aplikasi berdasarkan kebutuhan aplikasi yang akan kita buat.
Mereka menamakannya itu sebagai Well-Architect Framework
Mengutip dari halaman resmi nya AWS mengenai Well-Architect Framework, maka :
Kerangka Kerja AWS Well-Architected menjelaskan konsep utama, prinsip rancangan, dan praktik terbaik arsitektur untuk merancang dan menjalankan beban kerja di cloud.
Hmm, maksud intinya adalah Well-Architect Framework adalah panduan dasar bagi pengguna AWS dalam membuat aplikasi di AWS agar sesuai dengan konsep dasar arsitektural, best practice, dan kesesuaian dengan kebutuhan masing-masing aplikasi.
Ada 5 dasar Pilar yang menjadi patokan AWS dalam melakukan panduan, yaitu :
1. Keunggulan Operasional
2. Keamanan
3. Keandalan dan Ketersediaan
4. Efisiensi Kinerja
5. Optimasi Biaya
Kelima pilar diatas dijadikan patokan AWS dalam menentukan bagaimana seharusnya sebuah aplikasi dirancang.
Tentunya panduan ini adalah panduan umum, sementara kasus di dunia nyata bisa bermacam-macam dan bervariasi kasusnya.
Oleh karenanya, selain 5 pilar diatas, AWS juga menyediakan AWS Well-Architected Tool, yaitu sederetan pertanyaan mengenai kondisi aplikasi dan faktor lain yang menyangkut aplikasi kita, agar dicarikan panduan lebih khusus dalam merancang aplikasi kita agar sesuai dengan best practice yang dipunyai oleh AWS.
AWS juga menyediakan apa yang namanya Lens yaitu panduan khusus berdasarkan tipe aplikasi, seperti panduan ketika membuat aplikasi IoT, Machine Learning, Industri Keuangan, Data Analitical, dll.
Dan tentu saja semua hal diatas didasarkan pada 5 pilar yang disebutkan diatas.
Kita akan membahasnya di artikel selanjutnya.