Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Membuat dan Mengonsumsi Webhook Burung

Burung

27 Jan 2022

Email

1 min read

Membuat dan Mengonsumsi Webhook Burung

Burung

27 Jan 2022

Email

1 min read

Membuat dan Mengonsumsi Webhook Burung

Berikut adalah panduan sederhana untuk membantu pengirim merasa nyaman saat membuat webhook acara Bird dan mengonsumsi data menggunakan infrastruktur di AWS.

Bird’s real-time event webhooks adalah alat yang sangat berharga bagi pengirim untuk memiliki data secara otomatis didorong ke sistem mereka. Ini dapat mendorong otomatisasi hilir seperti memperbarui daftar surat, memicu perjalan surel otomatis, atau mengisi dasbor internal. Meskipun data peristiwa yang sama dapat diakses melalui antarmuka pengguna Bird menggunakan Event Search, atau secara terprogram dengan memanfaatkan Bird Events API, batasan yang ditempatkan pada jumlah catatan yang dikembalikan dalam satu permintaan atau batas laju yang ditempatkan pada ujung API dapat membuat kedua metode ini dianggap terbatas untuk pengirim besar dan canggih.

Webhooks peristiwa real-time memungkinkan pengirim untuk mengkonfigurasi endpoint di mana Bird mengirimkan data, dan data dapat dikonsumsi tanpa harus menjadwalkan pekerjaan cron yang mengambil data. Ada juga pertukaran logistik saat menarik data dibandingkan dengan memiliki data yang didorong kepada Anda, seperti harus mengidentifikasi periode waktu dan parameter apa yang harus digunakan untuk setiap permintaan API. Jika periode waktu tidak teratur, Anda berisiko kehilangan data, dan jika periode waktu tumpang tindih, Anda harus menangani catatan data duplikat. Dengan real-time webhooks, data peristiwa cukup didorong ke endpoint Anda saat tersedia di dalam Bird.

Meskipun manfaat menerima data peristiwa secara real-time untuk mendorong proses otomatisasi hilir mungkin segera dipahami oleh banyak pengirim, proses sebenarnya untuk mengimplementasikan dan mengonsumsi webhooks mungkin menakutkan. Ini bisa berlaku terutama jika Anda tidak terbiasa dengan komponen teknis dalam pembuatan endpoint dan penanganan data secara terprogram. Ada layanan yang tersedia yang akan mengonsumsi data webhook Bird dan ETL ke dalam basis data Anda secara otomatis – sebagai contoh adalah StitchData, yang telah kita blogkan di masa lalu. Namun, jika Anda ingin lebih mengontrol prosesnya, Anda dapat dengan mudah membangun komponen itu sendiri. Berikut ini adalah panduan sederhana untuk membantu pengirim merasa nyaman ketika membuat webhook peristiwa Bird dan mengonsumsi data menggunakan infrastruktur dalam AWS.

Mengonfigurasi Target Endpoint Webhook

Ketika sebuah acara Bird dibuat, kami ingin data acara itu dialirkan secara real-time ke sebuah endpoint di AWS sehingga kami dapat mengonsumsi dan menggunakan data tersebut secara programatis. Data tersebut akan dikirim dari Bird ke endpoint target, yang akan meneruskan payload ke fungsi lambda yang akan memproses dan menyimpan data di S3 bucket. Diagram tingkat tinggi alur data yang dijelaskan dapat dilihat di bawah:


Flowchart for a system with components, showing a process starting with 'MessageBird', continuing through an 'Application Load Balancer', leading to a 'Lambda Script (Consumer)', connecting to an 'S3' storage, and optionally processed by another 'Lambda Script (Process)'.


Untuk menerapkan alur kerja ini, mari kita bangun dari arah terbalik dimulai dengan membuat S3 bucket tempat kita akan menyimpan data acara kita dan kemudian bekerja mundur – menambahkan setiap komponen yang memberi umpan ke dalam apa yang telah kita bangun.

Buat S3 Bucket untuk Menyimpan Data Webhook

Sebelum membuat load balancer kami untuk menerima data, atau fungsi lambda kami untuk menyimpan data, kita perlu terlebih dahulu membuat S3 bucket tempat data akan disimpan. Meskipun S3 menyediakan penyimpanan yang sangat baik untuk data webhook, organisasi yang juga menggunakan basis data PostgreSQL untuk pemrosesan acara harus menerapkan prosedur pencadangan dan pemulihan yang tepat untuk melindungi data terstruktur mereka bersama strategi penyimpanan S3 mereka. Untuk melakukan ini, navigasikan ke layanan S3 dalam AWS dan tekan “Create Bucket.” Anda akan diminta untuk memberikan nama pada bucket Anda dan menetapkan wilayah – pastikan untuk menggunakan wilayah yang sama dengan ALB dan fungsi lambda Anda. Setelah bucket S3 Anda dibuat, ia akan kosong – jika Anda ingin mengatur data di dalam folder, Anda dapat membuat direktori yang dimaksudkan sekarang, atau direktori akan dibuat ketika fungsi lambda Anda menyimpan file tersebut. Dalam contoh ini, kami menamakan bucket S3 kami “bird-webhooks” dan membuat folder bernama “B Event Data” untuk menyimpan data acara kami – Anda akan melihat nama-nama ini dirujuk dalam fungsi lambda kami di bawah ini.

Buat Fungsi Lambda untuk Mengonsumsi Data

Pemrosesan dan penyimpanan data yang sebenarnya akan dilakukan oleh fungsi lambda yang dipanggil oleh application load balancer (ALB) kami. 

Langkah pertama adalah membuat fungsi lambda Anda dengan menavigasi ke layanan Lambda dalam AWS dan mengklik “Create Function.” Anda akan diminta untuk memberikan nama pada fungsi lambda Anda dan memilih bahasa pemrograman yang akan Anda gunakan untuk menulis fungsi Anda. Untuk contoh ini, kami menggunakan Python sebagai bahasa runtime.

Sekarang kita perlu mengembangkan fungsi lambda kita. Untuk sementara, mari kita asumsikan bahwa aplikasi load balancer kita telah dikonfigurasi dan meneruskan payload webhook ke fungsi lambda kita – lambda akan menerima payload termasuk seureigh pos pesan lengkap dan tubuh. Payload diteruskan ke fungsi lambda kita menggunakan objek “event” sebagai dictionary. Anda dapat merujuk ke headers dan body payload secara independen dengan mengakses objek “headers” dan “body” di dalam payload. Dalam contoh ini kami hanya akan membaca header “x-messagesystems-batch-id”, di mana batch ID adalah nilai unik yang dibuat oleh Bird untuk batch webhook, dan menggunakannya sebagai nama file saat menyimpan body sebagai flat file di S3; namun, Anda mungkin ingin menambahkan fungsi tambahan seperti pemeriksaan otentikasi atau penanganan kesalahan sesuai kebutuhan.

Saat menyimpan payload ke flat-file di S3, kita perlu menentukan nama bucket S3, lokasi, dan nama file tempat data payload akan disimpan. Dalam fungsi lambda sampel kami, kami melakukan ini dalam fungsi “store_batch”. Dalam contoh ini, kita akan menyimpan seluruh batch sebagai satu file, yang membantu memastikan bahwa data dikumpulkan dan disimpan sebelum koneksi HTTP antara Bird dan endpoint Anda habis waktu. Meskipun Anda dapat menyesuaikan pengaturan timeout koneksi pada load balancer Anda, tidak ada jaminan bahwa koneksi tidak akan habis waktu di sisi transmisi (dalam hal ini Bird) atau bahwa koneksi tidak akan dihentikan sebelum fungsi lambda Anda selesai dieksekusi. Sebaiknya jaga agar fungsi konsumen Anda seefisien mungkin dan simpan kegiatan pemrosesan data untuk proses hilir bila memungkinkan – seperti mengonversi payload dalam format JSON menjadi file CSV, atau memuat data acara ke dalam basis data.

Penting untuk dicatat bahwa Anda mungkin perlu memperbarui izin untuk fungsi lambda Anda. Peran pelaksanaan Anda akan memerlukan izin PutObject dan GetObject untuk S3. Sebaiknya terapkan prinsip hak istimewa paling sedikit, jadi saya merekomendasikan menetapkan izin ini hanya untuk S3 bucket tempat payload webhook akan disimpan.

Sampel fungsi lambda konsumen kami dapat ditemukan di sini.

Sebagai catatan singkat tentang batch ID:  Bird akan membatching acara ke dalam satu payload, di mana setiap batch dapat berisi 1 hingga 350 atau lebih catatan acara.  Batch akan diberikan batch ID unik, yang dapat digunakan untuk melihat status batch dengan memanfaatkan Event Webhooks API atau di dalam akun Bird Anda dengan mengklik webhook stream dan memilih “Batch Status.” Dalam hal payload webhook tidak dapat dikirimkan, seperti selama timeout koneksi, Bird akan secara otomatis mencoba ulang batch menggunakan batch ID yang sama. Ini dapat terjadi saat fungsi lambda Anda berjalan mendekati waktu perjalanan pulang maksimum 10 detik dan merupakan alasan untuk mengoptimalkan fungsi konsumen untuk mengurangi waktu eksekusi.

Untuk menangani semua kegiatan pemrosesan data, saya sarankan membuat fungsi lambda terpisah yang dijalankan setiap kali file baru dibuat di S3 bucket – dengan cara ini, pemrosesan data dilakukan secara asinkron terhadap transmisi nya data, dan tidak ada risiko kehilangan data karena koneksi terputus. Saya membahas fungsi lambda pemrosesan di bagian selanjutnya.

Buat Application Load Balancer

Untuk menerima payload webhook, kita perlu menyediakan endpoint untuk mengirim payload. Kami melakukan ini dengan membuat application load balancer di dalam AWS dengan navigasi ke EC2 > Load Balancers dan mengklik “Create Load Balancer.” Anda akan diminta untuk memilih jenis load balancer yang ingin Anda buat – untuk ini, kami ingin membuat application load balancer. Kami perlu menggunakan application load balancer (ALB) untuk membangun konsumen kami karena event webhooks akan dikirim sebagai HTTP request, dan ALB digunakan untuk routing HTTP request di dalam AWS. Kami dapat menerapkan HTTP Gateway sebagai alternatif; namun, kami menggunakan ALB untuk proyek ini karena lebih ringan dan hemat biaya dibandingkan HTTP Gateway. Penting untuk dicatat bahwa jika Anda memilih menggunakan HTTP Gateway, format acara mungkin berbeda dari dengan ALB, dan oleh karena itu fungsi lambda Anda perlu menangani objek permintaan sesuai.

Setelah ALB Anda dibuat, Anda akan diminta untuk memberikan nama pada ALB Anda dan mengonfigurasi skema dan pengaturan akses/keamanan – karena kami berencana menerima data acara dari sumber eksternal (Bird), kami menginginkan ALB kami internet-facing.  Di bawah “Listeners and routing,” ALB harus mendengarkan HTTPS pada port 443, dan kami ingin membuat Target group yang menunjuk ke fungsi lambda kami sehingga ALB kami akan meneruskan permintaan masuk ke fungsi lambda konsumsi yang kami buat di atas.  Anda juga perlu memastikan bahwa security group memiliki izin untuk menerima lalu lintas melalui port 443.

Buat Catatan DNS untuk Load Balancer

Untuk mempermudah penggunaan ALB sebagai endpoint, kami akan membuat A record di DNS yang menunjuk ke ALB kami. Untuk ini, kita dapat menggunakan layanan AWS Route 53 (atau penyedia DNS Anda saat ini) dan membuat A record untuk hostname yang ingin Anda gunakan untuk endpoint Anda (misalnya spevents.<your_domain>). Saat bekerja dengan DNS dalam skala besar di AWS, waspadai bahwa ada batasan DNS yang tidak terdokumentasi yang dapat memengaruhi aplikasi dengan volume tinggi, terutama yang menangani lalu lintas keluar dalam jumlah besar seperti sistem pengiriman email. A record harus dikonfigurasi untuk menunjuk ke ALB yang kami buat. Jika Anda menggunakan Route 53 untuk mengelola catatan DNS, Anda dapat merujuk instance ALB secara langsung dengan mengaktifkan “Alias” dan memilih ALB; jika tidak, jika Anda menggunakan penyedia DNS eksternal, Anda harus menunjuk A record ke alamat IP publik dari instance ALB.

Saya sarankan menggunakan alat seperti Postman untuk menguji apakah semuanya telah dikonfigurasi dengan benar sebelum mengaktifkan webhook Bird Anda. Anda dapat membuat POST request ke endpoint Anda dan mengonfirmasi bahwa sebuah response diterima. Jika POST request Anda tidak mengembalikan response, Anda mungkin perlu memeriksa kembali bahwa ALB Anda mendengarkan port yang benar.

Buat Bird Webhook

Sekarang kami siap membuat webhook di Bird dan menggunakan hostname yang didefinisikan oleh A record di atas sebagai target endpoint kami. Untuk membuat webhook, navigasi ke bagian Webhooks di dalam akun Bird Anda dan klik “Create Webhook.” Anda akan diminta untuk memberikan nama pada webhook Anda dan menyediakan URL target – target harus berupa hostname dari A record yang Anda buat sebelumnya. Perhatikan bahwa URL target mungkin memerlukan “HTTPS://” disertakan dalam URL.  

Setelah selesai, verifikasi bahwa subaccount yang tepat dan acara dipilih, dan tekan “Create Webhook” untuk menyimpan konfigurasi Anda. Data acara untuk semua jenis acara yang dipilih sekarang akan dialirkan ke target URL kami dan dikonsumsi oleh ALB kami untuk pemrosesan hilir.

Memproses Data Acara Webhook

Tergantung pada tujuan penyimpanan data acara Bird, kebutuhan Anda mungkin terpenuhi hanya dengan menyimpan payload JSON sebagai flat-file. Anda mungkin juga memiliki proses ETL hilir yang sudah ada yang mampu mengonsumsi dan memuat data dalam format JSON. Dalam kedua kasus ini, Anda dapat menggunakan flat-file yang dibuat oleh lambda pemrosesan kami yang telah kami buat di atas apa adanya.

Alternatifnya, Anda mungkin perlu mengubah data – seperti mengonversi dari JSON ke format CSV – atau memuat data langsung ke dalam database. Dalam contoh ini, kita akan membuat fungsi lambda sederhana yang akan mengonversi data webhook dari format JSON asli menjadi file CSV yang dapat dimuat ke dalam database. 

Membuat Lambda untuk Memproses Data

Seperti dengan fungsi lambda untuk mengonsumsi data webhook, kita perlu membuat fungsi lambda baru dengan menavigasi ke layanan Lambda di AWS dan menekan "Create Function." Fungsi lambda baru ini akan dipicu ketika file baru dibuat di bucket S3 kami – akan membaca data dan mengonversinya menjadi file csv baru.  

Fungsi lambda menerima informasi file sebagai event. Dalam contoh fungsi lambda, Anda akan melihat bahwa kami pertama-tama memiliki serangkaian pemeriksaan validasi untuk memastikan bahwa data lengkap dan diformat sesuai harapan. Selanjutnya, kami mengonversi payload JSON menjadi file CSV dengan menggunakan pustaka “csv” dan menuliskannya ke file sementara. Fungsi Lambda hanya bisa menulis file lokal ke direktori “/tmp”, jadi kami membuat file csv sementara dan menamainya dengan konvensi <batch_id>.csv. Alasan kami menggunakan batch_id di sini adalah untuk memastikan bahwa proses paralel yang berjalan akibat menerima banyak payload webhook tidak saling mengganggu, karena setiap batch webhook akan memiliki batch_id yang unik.  

Setelah data sepenuhnya dikonversi ke CSV, kami membaca data CSV sebagai byte stream, menghapus file sementara, dan menyimpan data CSV sebagai file baru di S3. Penting untuk dicatat bahwa diperlukan bucket S3 yang berbeda untuk output, jika tidak, kita berisiko membuat loop rekursif yang dapat mengakibatkan penggunaan lambda yang meningkat dan peningkatan biaya. Kita perlu mengidentifikasi dalam bucket S3 mana dan lokasi mana kita ingin file CSV kita disimpan dalam fungsi lambda kita.  Ikuti prosedur yang sama seperti di atas untuk membuat bucket S3 baru untuk menyimpan file CSV kita.

Perhatikan bahwa direktori tmp terbatas pada 512 MB ruang, jadi penting bahwa file sementara segera dihapus setelahnya untuk memastikan ruang yang cukup untuk eksekusi mendatang. Alasan kami menggunakan file sementara, alih-alih menulis langsung ke S3, adalah untuk menyederhanakan koneksi ke S3 dengan memiliki satu permintaan saja.

Sama seperti dengan fungsi lambda konsumsi, Anda mungkin perlu memperbarui izin untuk fungsi lambda pemroses Anda. Fungsi lambda ini memerlukan peran eksekusi untuk memiliki izin GetObject untuk bucket S3 input, dan baik PutObject maupun GetObject untuk bucket S3 output.

Contoh fungsi lambda pemrosesan kami dapat ditemukan di sini.

Mengonfigurasi Lambda untuk Dijalankan Saat Data Baru Disimpan di S3

Sekarang bahwa fungsi lambda kami untuk mengonversi file dari format JSON ke CSV telah dibuat, kami perlu mengonfigurasinya untuk memicu ketika file baru dibuat di bucket S3 kami. Untuk melakukan ini, kita perlu menambahkan trigger ke fungsi lambda kita dengan membuka fungsi lambda kita dan mengklik "Add Trigger" di bagian atas halaman.  Pilih "S3" dan berikan nama bucket S3 di mana payload webhook mentah disimpan. Anda juga memiliki opsi untuk menentukan prefiks file dan/atau sufiks untuk memfilter. Setelah pengaturan dikonfigurasi, Anda dapat menambahkan trigger dengan mengklik "Add" di bagian bawah halaman. Sekarang fungsi lambda pemrosesan Anda akan dijalankan setiap kali file baru ditambahkan ke bucket S3 Anda.

Memuat Data ke dalam Database

Dalam contoh ini, saya tidak akan membahas memuat data ke dalam database secara detail, tetapi jika Anda telah mengikuti contoh ini, Anda memiliki beberapa opsi:

  1. Memuat data langsung ke dalam database Anda di dalam fungsi lambda pemrosesan Anda

  2. Mengonsumsi file CSV Anda menggunakan proses ETL yang sudah ada

Apakah Anda menggunakan layanan database AWS, seperti RDS atau DynamoDB, atau Anda memiliki database PostgreSQL Anda sendiri (atau serupa), Anda dapat terhubung ke layanan database Anda langsung dari fungsi lambda pemrosesan Anda. Misalnya, dengan cara yang sama kami memanggil layanan S3 menggunakan “boto3” dalam fungsi lambda kami, Anda juga dapat menggunakan “boto3” untuk memanggil RDS atau DynamoDB. Layanan AWS Athena juga dapat digunakan untuk membaca file data langsung dari flat-file dan mengakses data menggunakan bahasa kueri yang mirip dengan SQL. Saya merekomendasikan untuk merujuk pada dokumentasi masing-masing untuk layanan yang Anda gunakan untuk informasi lebih lanjut tentang cara terbaik untuk mencapai ini dalam lingkungan Anda.

Demikian pula, ada banyak layanan yang tersedia yang dapat membantu mengonsumsi file CSV dan memuat data ke dalam database. Anda mungkin sudah memiliki proses ETL yang mapan yang dapat Anda manfaatkan.

Kami berharap panduan ini bermanfaat – selamat mengirim!

Tergantung pada tujuan penyimpanan data acara Bird, kebutuhan Anda mungkin terpenuhi hanya dengan menyimpan payload JSON sebagai flat-file. Anda mungkin juga memiliki proses ETL hilir yang sudah ada yang mampu mengonsumsi dan memuat data dalam format JSON. Dalam kedua kasus ini, Anda dapat menggunakan flat-file yang dibuat oleh lambda pemrosesan kami yang telah kami buat di atas apa adanya.

Alternatifnya, Anda mungkin perlu mengubah data – seperti mengonversi dari JSON ke format CSV – atau memuat data langsung ke dalam database. Dalam contoh ini, kita akan membuat fungsi lambda sederhana yang akan mengonversi data webhook dari format JSON asli menjadi file CSV yang dapat dimuat ke dalam database. 

Membuat Lambda untuk Memproses Data

Seperti dengan fungsi lambda untuk mengonsumsi data webhook, kita perlu membuat fungsi lambda baru dengan menavigasi ke layanan Lambda di AWS dan menekan "Create Function." Fungsi lambda baru ini akan dipicu ketika file baru dibuat di bucket S3 kami – akan membaca data dan mengonversinya menjadi file csv baru.  

Fungsi lambda menerima informasi file sebagai event. Dalam contoh fungsi lambda, Anda akan melihat bahwa kami pertama-tama memiliki serangkaian pemeriksaan validasi untuk memastikan bahwa data lengkap dan diformat sesuai harapan. Selanjutnya, kami mengonversi payload JSON menjadi file CSV dengan menggunakan pustaka “csv” dan menuliskannya ke file sementara. Fungsi Lambda hanya bisa menulis file lokal ke direktori “/tmp”, jadi kami membuat file csv sementara dan menamainya dengan konvensi <batch_id>.csv. Alasan kami menggunakan batch_id di sini adalah untuk memastikan bahwa proses paralel yang berjalan akibat menerima banyak payload webhook tidak saling mengganggu, karena setiap batch webhook akan memiliki batch_id yang unik.  

Setelah data sepenuhnya dikonversi ke CSV, kami membaca data CSV sebagai byte stream, menghapus file sementara, dan menyimpan data CSV sebagai file baru di S3. Penting untuk dicatat bahwa diperlukan bucket S3 yang berbeda untuk output, jika tidak, kita berisiko membuat loop rekursif yang dapat mengakibatkan penggunaan lambda yang meningkat dan peningkatan biaya. Kita perlu mengidentifikasi dalam bucket S3 mana dan lokasi mana kita ingin file CSV kita disimpan dalam fungsi lambda kita.  Ikuti prosedur yang sama seperti di atas untuk membuat bucket S3 baru untuk menyimpan file CSV kita.

Perhatikan bahwa direktori tmp terbatas pada 512 MB ruang, jadi penting bahwa file sementara segera dihapus setelahnya untuk memastikan ruang yang cukup untuk eksekusi mendatang. Alasan kami menggunakan file sementara, alih-alih menulis langsung ke S3, adalah untuk menyederhanakan koneksi ke S3 dengan memiliki satu permintaan saja.

Sama seperti dengan fungsi lambda konsumsi, Anda mungkin perlu memperbarui izin untuk fungsi lambda pemroses Anda. Fungsi lambda ini memerlukan peran eksekusi untuk memiliki izin GetObject untuk bucket S3 input, dan baik PutObject maupun GetObject untuk bucket S3 output.

Contoh fungsi lambda pemrosesan kami dapat ditemukan di sini.

Mengonfigurasi Lambda untuk Dijalankan Saat Data Baru Disimpan di S3

Sekarang bahwa fungsi lambda kami untuk mengonversi file dari format JSON ke CSV telah dibuat, kami perlu mengonfigurasinya untuk memicu ketika file baru dibuat di bucket S3 kami. Untuk melakukan ini, kita perlu menambahkan trigger ke fungsi lambda kita dengan membuka fungsi lambda kita dan mengklik "Add Trigger" di bagian atas halaman.  Pilih "S3" dan berikan nama bucket S3 di mana payload webhook mentah disimpan. Anda juga memiliki opsi untuk menentukan prefiks file dan/atau sufiks untuk memfilter. Setelah pengaturan dikonfigurasi, Anda dapat menambahkan trigger dengan mengklik "Add" di bagian bawah halaman. Sekarang fungsi lambda pemrosesan Anda akan dijalankan setiap kali file baru ditambahkan ke bucket S3 Anda.

Memuat Data ke dalam Database

Dalam contoh ini, saya tidak akan membahas memuat data ke dalam database secara detail, tetapi jika Anda telah mengikuti contoh ini, Anda memiliki beberapa opsi:

  1. Memuat data langsung ke dalam database Anda di dalam fungsi lambda pemrosesan Anda

  2. Mengonsumsi file CSV Anda menggunakan proses ETL yang sudah ada

Apakah Anda menggunakan layanan database AWS, seperti RDS atau DynamoDB, atau Anda memiliki database PostgreSQL Anda sendiri (atau serupa), Anda dapat terhubung ke layanan database Anda langsung dari fungsi lambda pemrosesan Anda. Misalnya, dengan cara yang sama kami memanggil layanan S3 menggunakan “boto3” dalam fungsi lambda kami, Anda juga dapat menggunakan “boto3” untuk memanggil RDS atau DynamoDB. Layanan AWS Athena juga dapat digunakan untuk membaca file data langsung dari flat-file dan mengakses data menggunakan bahasa kueri yang mirip dengan SQL. Saya merekomendasikan untuk merujuk pada dokumentasi masing-masing untuk layanan yang Anda gunakan untuk informasi lebih lanjut tentang cara terbaik untuk mencapai ini dalam lingkungan Anda.

Demikian pula, ada banyak layanan yang tersedia yang dapat membantu mengonsumsi file CSV dan memuat data ke dalam database. Anda mungkin sudah memiliki proses ETL yang mapan yang dapat Anda manfaatkan.

Kami berharap panduan ini bermanfaat – selamat mengirim!

Tergantung pada tujuan penyimpanan data acara Bird, kebutuhan Anda mungkin terpenuhi hanya dengan menyimpan payload JSON sebagai flat-file. Anda mungkin juga memiliki proses ETL hilir yang sudah ada yang mampu mengonsumsi dan memuat data dalam format JSON. Dalam kedua kasus ini, Anda dapat menggunakan flat-file yang dibuat oleh lambda pemrosesan kami yang telah kami buat di atas apa adanya.

Alternatifnya, Anda mungkin perlu mengubah data – seperti mengonversi dari JSON ke format CSV – atau memuat data langsung ke dalam database. Dalam contoh ini, kita akan membuat fungsi lambda sederhana yang akan mengonversi data webhook dari format JSON asli menjadi file CSV yang dapat dimuat ke dalam database. 

Membuat Lambda untuk Memproses Data

Seperti dengan fungsi lambda untuk mengonsumsi data webhook, kita perlu membuat fungsi lambda baru dengan menavigasi ke layanan Lambda di AWS dan menekan "Create Function." Fungsi lambda baru ini akan dipicu ketika file baru dibuat di bucket S3 kami – akan membaca data dan mengonversinya menjadi file csv baru.  

Fungsi lambda menerima informasi file sebagai event. Dalam contoh fungsi lambda, Anda akan melihat bahwa kami pertama-tama memiliki serangkaian pemeriksaan validasi untuk memastikan bahwa data lengkap dan diformat sesuai harapan. Selanjutnya, kami mengonversi payload JSON menjadi file CSV dengan menggunakan pustaka “csv” dan menuliskannya ke file sementara. Fungsi Lambda hanya bisa menulis file lokal ke direktori “/tmp”, jadi kami membuat file csv sementara dan menamainya dengan konvensi <batch_id>.csv. Alasan kami menggunakan batch_id di sini adalah untuk memastikan bahwa proses paralel yang berjalan akibat menerima banyak payload webhook tidak saling mengganggu, karena setiap batch webhook akan memiliki batch_id yang unik.  

Setelah data sepenuhnya dikonversi ke CSV, kami membaca data CSV sebagai byte stream, menghapus file sementara, dan menyimpan data CSV sebagai file baru di S3. Penting untuk dicatat bahwa diperlukan bucket S3 yang berbeda untuk output, jika tidak, kita berisiko membuat loop rekursif yang dapat mengakibatkan penggunaan lambda yang meningkat dan peningkatan biaya. Kita perlu mengidentifikasi dalam bucket S3 mana dan lokasi mana kita ingin file CSV kita disimpan dalam fungsi lambda kita.  Ikuti prosedur yang sama seperti di atas untuk membuat bucket S3 baru untuk menyimpan file CSV kita.

Perhatikan bahwa direktori tmp terbatas pada 512 MB ruang, jadi penting bahwa file sementara segera dihapus setelahnya untuk memastikan ruang yang cukup untuk eksekusi mendatang. Alasan kami menggunakan file sementara, alih-alih menulis langsung ke S3, adalah untuk menyederhanakan koneksi ke S3 dengan memiliki satu permintaan saja.

Sama seperti dengan fungsi lambda konsumsi, Anda mungkin perlu memperbarui izin untuk fungsi lambda pemroses Anda. Fungsi lambda ini memerlukan peran eksekusi untuk memiliki izin GetObject untuk bucket S3 input, dan baik PutObject maupun GetObject untuk bucket S3 output.

Contoh fungsi lambda pemrosesan kami dapat ditemukan di sini.

Mengonfigurasi Lambda untuk Dijalankan Saat Data Baru Disimpan di S3

Sekarang bahwa fungsi lambda kami untuk mengonversi file dari format JSON ke CSV telah dibuat, kami perlu mengonfigurasinya untuk memicu ketika file baru dibuat di bucket S3 kami. Untuk melakukan ini, kita perlu menambahkan trigger ke fungsi lambda kita dengan membuka fungsi lambda kita dan mengklik "Add Trigger" di bagian atas halaman.  Pilih "S3" dan berikan nama bucket S3 di mana payload webhook mentah disimpan. Anda juga memiliki opsi untuk menentukan prefiks file dan/atau sufiks untuk memfilter. Setelah pengaturan dikonfigurasi, Anda dapat menambahkan trigger dengan mengklik "Add" di bagian bawah halaman. Sekarang fungsi lambda pemrosesan Anda akan dijalankan setiap kali file baru ditambahkan ke bucket S3 Anda.

Memuat Data ke dalam Database

Dalam contoh ini, saya tidak akan membahas memuat data ke dalam database secara detail, tetapi jika Anda telah mengikuti contoh ini, Anda memiliki beberapa opsi:

  1. Memuat data langsung ke dalam database Anda di dalam fungsi lambda pemrosesan Anda

  2. Mengonsumsi file CSV Anda menggunakan proses ETL yang sudah ada

Apakah Anda menggunakan layanan database AWS, seperti RDS atau DynamoDB, atau Anda memiliki database PostgreSQL Anda sendiri (atau serupa), Anda dapat terhubung ke layanan database Anda langsung dari fungsi lambda pemrosesan Anda. Misalnya, dengan cara yang sama kami memanggil layanan S3 menggunakan “boto3” dalam fungsi lambda kami, Anda juga dapat menggunakan “boto3” untuk memanggil RDS atau DynamoDB. Layanan AWS Athena juga dapat digunakan untuk membaca file data langsung dari flat-file dan mengakses data menggunakan bahasa kueri yang mirip dengan SQL. Saya merekomendasikan untuk merujuk pada dokumentasi masing-masing untuk layanan yang Anda gunakan untuk informasi lebih lanjut tentang cara terbaik untuk mencapai ini dalam lingkungan Anda.

Demikian pula, ada banyak layanan yang tersedia yang dapat membantu mengonsumsi file CSV dan memuat data ke dalam database. Anda mungkin sudah memiliki proses ETL yang mapan yang dapat Anda manfaatkan.

Kami berharap panduan ini bermanfaat – selamat mengirim!

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

R

Reach

G

Grow

M

Manage

A

Automate

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.