Blog AWS Indonesia

Migrasi Startup Anda dari Firebase ke AWS

Salah satu kunci keberhasilan dari startup adalah iterasi yang cepat dan penetrasi pasar secepat mungkin. Pengambilan keputusan tentang di mana Anda membangun produk sering dibuat dengan cepat tanpa evaluasi mendalam atau pertimbangan strategis jangka panjang dan hanya berdasarkan faktor-faktor seperti penawaran kredit, kemitraan investor, dan kebiasaan sebelumnya agar Anda dapat membangun produk sesegera mungkin.

Karena itu, terkadang kami bertemu dengan startup yang membangun MVP awal mereka di Firebase, tetapi ingin beralih ke AWS untuk mencapai operasi dalam skala besar dengan jaminan kualitas dan keandalan data yang lebih baik, dan dengan biaya lebih rendah. Karena Firebase merupakan layanan proprietary yang terdiri dari API dan SDK, migrasi ke AWS memerlukan refaktorisasi dan penulisan ulang beberapa bagian dari keseluruhan kode untuk menggunakan arsitektur baru dengan layanan AWS.

Untuk meminimalkan dampak refaktorisasi ini, panduan ini akan membantu Anda mengidentifikasi layanan AWS apa yang paling cocok untuk arsitektur baru Anda beserta beberapa strategi implementasi untuk memudahkan dan mempercepat proses peralihan.

Memetakan Kapabilitas Firebase ke AWS

Firebase terdiri dari kumpulan produk dan integrasi yang menyediakan berbagai kapabilitas untuk aplikasi Anda. Kapabilitas utamanya adalah menyediakan arsitektur web 2-tingkat: aplikasi klien web atau perangkat seluler yang dapat menyinkronkan data secara langsung ke basis data Cloud Firestore atau Realtime. Berbagai produk tambahan kemudian mengaktifkan berbagai kapabilitas pendukung, seperti otentikasi pengguna, push notifications, dan crash analytics.

Contoh arsitektur Firebase

Contoh arsitektur Firebase

AWS Amplify dan AWS CDK

Cara tercepat untuk membangun dan menerapkan serangkaian kapabilitas serupa di AWS adalah dengan memanfaatkan AWS Amplify dan AWS Cloud Development Kit (AWS CDK). Tidak seperti Firebase, di mana produk dan integrasi merupakan bagian dari sebuah platform tunggal, Amplify dan AWS CDK menyediakan lapisan abstraksi untuk banyak layanan AWS berbeda yang masing-masing memiliki roadmap, dukungan, dan tim teknik tersendiri. Amplify menyediakan development framework, SDK, code generation, dan suatu pipeline DevOps yang memudahkan untuk mendefinisikan layanan backend AWS dan mengintegrasikannya dengan aplikasi klien web atau perangkat seluler Anda. Sementara itu, AWS CDK dapat digunakan untuk membuat templat Infrastruktur sebagai Kode (Infrastructure as Code / IaC) di luar yang dapat dihasilkan menggunakan Amplify, dengan banyak constructs pra-bangun untuk berbagai arsitektur umum yang dapat Anda gunakan kembali untuk meminimalkan upaya pengkodean. Dengan memanfaatkan keduanya, Anda dapat dengan cepat membangun arsitektur holistik yang mengikuti praktik terbaik, meminimalkan upaya operasional tambahan, dan memaksimalkan kapabilitas aplikasi Anda untuk berkembang dengan cara yang hemat biaya.

Sebagai contoh, Anda dapat membaca tentang bagaimana Stedi mempercepat pengembangan AWS mereka dengan Amplify dan CDK untuk membangun jaringan perdagangan komersial untuk mengotomatiskan triliunan dolar dalam transaksi B2B.

Contoh arsitektur AWS, dibangun dan diterapkan menggunakan AWS Amplify dan AWS CDK

Contoh arsitektur AWS, dibangun dan diterapkan menggunakan AWS Amplify dan AWS CDK

Pengalaman AWS Amplify

Amplify memiliki metode development yang sangat mirip dengan Firebase. Utamanya, Anda akan menggunakan Amplify CLI untuk melakukan konfigurasi, code generation, dan tugas-tugas deployment aplikasi untuk berbagai kapabilitas yang didukung.

Sebagai contoh, setelah memasang CLI, Anda dapat menginisialisasi Amplify dalam proyek aplikasi Firebase Anda sebagai berikut:

$ amplify init

Untuk menambahkan sebuah layanan backend REST atau GraphQL API, Anda bisa menggunakan perintah:

$ amplify add api

Dan untuk deployment aplikasi Anda ke Amplify Hosting, Anda bisa menggunakan perintah:

$ amplify push

Perintah-perintah ini menghasilkan templat IaC yang diperlukan untuk membuat resource untuk layanan-layanan AWS yang diperlukan beserta seluruh konfigurasi dan file pendukungnya. Berkas-berkas yang dihasilkan semuanya berada dalam folder ./amplify di direktori tertinggi proyek Anda.

Setelah menggunakan CLI untuk menambahkan berbagai kapabilitas ke aplikasi Anda, Anda dapat memperbarui kode Anda dan menggunakan Amplify SDK untuk berintegrasi dengan berbagai kapabilitas tersebut. Untuk contoh yang lebih lengkap, Anda dapat mengikuti tutorial “Getting Started” di dokumentasi Amplify.

Beberapa integrasi utama yang disediakan oleh AWS Amplify meliputi:

Hosting Web

Amplify menyediakan layanan yang dikelola sepenuhnya untuk hosting aplikasi web full stack, dan disertai dengan alur kerja CI/CD. Sebagai tambahan untuk sumber daya backend seperti digambarkan dalam contoh di atas, Amplify juga menyediakan hosting aplikasi halaman tunggal (SPA) menggunakan kerangka kerja seperti React, Angular, Vue, atau Gatsby.

Autentikasi Pengguna

Amplify memanfaatkan Amazon Cognito untuk menyediakan alur orientasi bagi pengguna baru, direktori pengguna yang terkelola sepenuhnya, dan fungsi bawaan untuk pendaftaran, autentikasi, multi-faktor, dan setel ulang kata sandi. Amazon Cognito juga mendukung federasi identitas untuk penyedia sosial, seperti Facebook dan Google, dan penyedia identitas apa pun yang mendukung protokol SAML atau Open ID Connect (OIDC).

User Engagement dan Analitik

Amplify menggunakan Amazon Pinpoint untuk melacak aktivitas pengguna di web/aplikasi seluler Anda dan membantu Anda membuat segmen pemasaran untuk kampanye yang bersasaran. Amazon Pinpoint memungkinkan komunikasi melalui berbagai saluran yang mencakup email, SMS, push notifications, dan suara, dengan metrik kesuksesan yang diukur dan disajikan di dasbor dan laporan bawaan.

Kecerdasan Buatan (Artificial Intelligence / AI)

Amplify menyederhanakan proses menambahkan berbagai jenis kecerdasan buatan ke dalam aplikasi Anda, tanpa perlu melatih dan menerapkan model pembelajaran mesin (Machine Learning / ML) khusus. AWS memiliki banyak layanan AI yang dikelola sepenuhnya dengan kapabilitas meliputi penerjemahan teks, pengucapan teks, pengenalan entitas dalam gambar, interpretasi teks, dan pencatatan teks dari suara.  Semua layanan AI ini mudah dikonfigurasi dan digunakan menggunakan Amplify. Melalui layanan Amazon Lex, Anda juga dapat menambahkan bot percakapan ke aplikasi Anda menggunakan kecerdasan yang sama dengan yang digunakan Alexa.

Silakan kunjungi tautan ini untuk daftar lengkap fitur dan kapabilitas yang dapat dikelola melalui AWS Amplify.

Dari 2-tingkat ke 3-tingkat

Sifat 2-tingkat Firebase menyebabkan logika bisnis harus selalu berada di sisi klien. Seiring waktu dan perkembangan aplikasi Anda, hal ini menyebabkan kerumitan dalam aspek manajemen versi dan skalabilitas. Logika di sisi server dapat diterapkan menggunakan Cloud Functions, tetapi penggunaannya terbatas hanya sebagai respons terhadap perubahan dalam basis data.

Anda dapat memanfaatkan Amplify dan migrasi ke AWS untuk melakukan refaktor menjadi arsitektur 3-tingkat: frontend web/seluler, layanan-mikro (microservices) untuk logika bisnis, dan salah satu (atau lebih) dari 15 database kami yang dibuat khusus sesuai kebutuhan data Anda. Seperti yang ditunjukkan pada contoh diagram di atas, Amplify memungkinkan Anda membuat baik GraphQL API menggunakan AWS AppSync maupun REST API menggunakan Amazon API Gateway yang terintegrasi dengan logika bisnis Anda yang didefinisikan dalam fungsi AWS Lambda. Selain itu, Anda juga dapat berintegrasi dengan mesin virtual di Amazon EC2 atau dengan container yang diorkestrasi menggunakan Amazon ECS atau Amazon EKS.

Kapabilitas Lain

Kini Anda telah mengetahui bahwa AWS Amplify dapat memudahkan Anda untuk menghubungkan frontend Anda dengan berbagai layanan backend AWS yang umum untuk arsitektur web dan seluler, namun kapabilitas yang Anda miliki tentu tidak terbatas hanya pada layanan AWS yang didukung Amplify. Dengan AWS CDK, Anda dapat menggunakan layanan AWS apa pun yang Anda inginkan dan menggunakannya dalam aplikasi Anda dengan AWS SDK standar. Beberapa layanan tambahan yang biasa digunakan antara lain:

Pengujian Aplikasi Seluler dan Web

AWS Device Farm menyediakan akses untuk menjalankan pengujian pada suatu armada perangkat seluler dan peramban komputer sungguhan. Anda dapat memilih antara memanfaatkan rangkaian pengujian bawaan atau menyediakan rangkaian pengujian Anda sendiri menggunakan kerangka kerja populer seperti Appium, Calabash, dan Espresso. Anda dapat menguji beberapa versi peramban komputer seperti di Chrome, IE, dan Firefox secara paralel menggunakan Selenium.

Performance Monitoring

AWS X-Ray menyediakan tampilan menyeluruh untuk permintaan (request) yang masuk ke sistem Anda saat permintaan tersebut melintasi setiap komponen arsitektur Anda. Data yang diambil dan divisualisasikan akan membantu Anda menemukan sumber masalah terkait kinerja sistem, mempermudah pengawakutuan, serta menyediakan informasi mendetail tentang error dan latensi pada aplikasi.

Analitik Tingkat Lanjut

Untuk pelanggan yang menggunakan BigQuery di Google Cloud, atau yang ingin menggabungkan kemampuan analitik yang lebih canggih ke dalam aplikasi mereka, AWS menyediakan serangkaian layanan yang lengkap. Ikhtisar untuk layanan analitik AWS beserta dengan strategi migrasinya dapat ditemukan di sini.

Strategi Migrasi

Seperti yang disebutkan dalam awal tulisan, migrasi ke AWS dari Firebase memerlukan refaktorisasi kode aplikasi Anda. Untuk meminimalkan gangguan pada operasional bisnis, Anda dapat menjalankan lingkungan Firebase dan AWS secara paralel untuk periode waktu yang singkat sambil memanfaatkan beberapa teknik berikut untuk menjaga keduanya agar tetap sinkron.

Di bawah ini adalah penjelasan untuk berbagai strategi migrasi yang umum untuk berbagai aspek aplikasi Anda. Untungnya, strategi-strategi ini telah diterapkan oleh salah satu Senior Startup Solutions Architect, Ben Shank. Anda dapat menemukan implementasinya di sini di repo open source yang dihosting di GitHub.

Selain itu, Ben telah membuat sebuah lokakarya baru di mana Anda dapat berlatih untuk melakukan refaktorisasi aplikasi demo dari Firebase ke AWS menggunakan Amplify dan CDK.

Jika Anda mengalami masalah atau memiliki umpan balik, Ben sangat tertarik mendengar pengalaman Anda – silakan buka issue, buat Pull Request, atau hubungi dia melalui GitHub!

Memindahkan Pengguna Firebase ke Amazon Cognito

Firebase tidak mendukung ekspor kata sandi pengguna, sehingga impor massal data pengguna ke Cognito akan membuat para pengguna ini perlu melakukan penyetelan ulang kata sandi.

Untuk mengatasinya, Cognito menyediakan kemampuan untuk memanggil fungsi Lambda untuk memigrasikan pengguna saat pertama kali mereka mencoba masuk ke User Pool. Anda dapat menggunakan Firebase SDK dalam fungsi Lambda ini untuk berinteraksi dengan Firebase Admin API dan mengautentikasi pengguna. Anda kemudian mengembalikan data pengguna ke Cognito dengan statusnya disetel sebagai Confirmed untuk memungkinkan pengguna tersebut masuk dengan mulus ke depannya. Anda dapat membaca detail lebih lanjut tentang implementasi ini di dokumentasi Cognito kami.

Memindahkan Data dari Cloud Firestore ke Amazon DynamoDB

Cloud Firestore adalah database berorientasi dokumen yang dioptimalkan untuk dokumen kecil. Dengan demikian, target migrasi paling umum di AWS adalah Amazon DynamoDB. Ada dua aspek yang harus diperhatikan dalam memindahkan data dari Firestore ke DynamoDB: pemuatan data massal (bulk loading), dan replikasi perubahan data yang berkelanjutan sampai Anda siap untuk beralih sepenuhnya ke DynamoDB.

Meskipun pemuatan massal terdengar dapat dilakukan dengan operasi ekspor/impor sederhana, model data antara kedua basis data tidak sepenuhnya kompatibel satu sama lain. Oleh karena itu, proses ini membutuhkan saluran ETL (Extract, Transform, and Load). Rekomendasi kami adalah membangun pipeline ini di AWS dengan menggunakan kombinasi AWS Step Functions, Lambda, dan Amazon SQS. Anda perlu membuat fungsi Lambda untuk setiap langkah ETL dan menuliskan hasilnya ke dalam antrian SQS yang sesuai, serta mengorkestrasi keseluruhan alur kerjanya menggunakan Step Functions. Pengaturan ini memastikan Anda memiliki keandalan dan kemampuan untuk mengulang proses yang gagal di setiap langkah dalam saluran ETL, meminimalkan usaha operasional tambahan dengan menggunakan layanan yang dikelola sepenuhnya, dan memberi biaya terendah.

Cara mereplikasi perubahan data secara berkelanjutan sedikit lebih sederhana dengan memanfaatkan kapabilitas listener Firestore. Anda dapat membuat sebuah aplikasi kecil untuk dijalankan sebagai proses latar belakang yang menyediakan suatu panggilan balik ke metode Firebase SDK onSnapshot() untuk menulis perubahan yang sesuai ke DynamoDB. Opsional, Anda juga dapat memicu mutasi AppSync untuk menyinkronkan perubahan ini ke klien-klien yang terhubung dengan basis data Anda.

Memindahkan Objek dan Data Analitik

Ada banyak cara yang tersedia untuk menyinkronkan objek dari Google Cloud Storage ke Amazon S3, termasuk menggunakan beberapa kemampuan dari Google Cloud SDK itu sendiri. Seperti yang disebutkan sebelumnya, kami memiliki entri blog komprehensif yang mencakup migrasi data dan proses analitik dari Google Cloud ke AWS yang dapat Anda temukan di sini. Harap diperhatikan bahwa meskipun memuat data ke AWS gratis, ada biaya yang dikenakan untuk mengekspor data keluar dari Google Cloud yang sebaiknya Anda perhitungkan.

Kesimpulan

Tulisan ini membahas kemampuan umum yang disediakan Firebase dan cara mencapai hasil serupa di AWS. Menggunakan AWS Amplify dan AWS CDK dapat mempercepat refaktorisasi dan penerapan aplikasi Anda, sekaligus meminimalkan usaha operasional tambahan Anda. Teknik migrasi yang dibahas mencegah waktu henti sistem Anda dan memungkinkan Anda untuk menjalankan sistem Firebase dan AWS secara bersamaan hingga Anda siap untuk melakukan peralihan sepenuhnya. Anda juga dianjurkan untuk memanfaatkan alat yang dibuat oleh Ben untuk menghemat upaya pengkodean keseluruhan yang diperlukan. Setelah Anda sepenuhnya beroperasi di AWS, kami harap Anda menikmati fungsionalitas terbanyak dan terdalam yang tersedia di ujung jari Anda disertai fondasi kuat yang telah Anda buat dengan mengikuti panduan ini. Selamat bersenang-senang dan membangun!


Artikel ini diterjemahkan dari artikel asli berjudul Migrating your Startup from Firebase to AWS yang ditulis oleh J. Michael Bako, Senior Startup Solutions Architect di AWS.