Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Membuat dan Mengonsumsi Webhook Burung

Email

1 min read

Membuat dan Mengonsumsi Webhook Burung

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 webhook acara real-time adalah alat yang sangat berharga bagi pengirim untuk memiliki data yang secara otomatis didorong ke sistem mereka. Ini dapat mendorong otomatisasi lebih lanjut seperti memperbarui daftar pengiriman, memicu perjalanan email otomatis, atau mengisi dasbor internal. Meskipun data acara yang sama dapat diakses melalui Bird UI menggunakan Pencarian Acara, atau secara programatik dengan memanfaatkan Bird Events API, batasan yang ditempatkan pada jumlah rekaman yang dikembalikan dalam satu permintaan atau batasan laju yang ditempatkan pada endpoint API dapat membuat kedua metode ini menjadi pembatas untuk pengirim besar dan canggih.  

Webhook acara real-time memungkinkan pengirim untuk mengonfigurasi sebuah endpoint ke mana Bird mengirimkan data tersebut, dan data tersebut dapat dikonsumsi tanpa harus menjadwalkan pekerjaan cron yang menarik data tersebut. Terdapat juga kompromi logistik ketika menarik data dibandingkan dengan menerima data, seperti harus mengidentifikasi periode waktu dan parameter yang digunakan untuk setiap permintaan API. Jika periode waktu tidak disesuaikan dengan sempurna, Anda berisiko kehilangan data, dan jika periode waktu tumpang tindih, Anda perlu menangani data rekaman duplikat. Dengan webhook real-time, data acara cukup dikirimkan ke endpoint Anda saat tersedia dalam Bird.

Meskipun manfaat menerima data acara secara real-time untuk mendorong proses otomatisasi lebih lanjut mungkin langsung dipahami oleh banyak pengirim, proses aktual untuk mengimplementasikan dan mengonsumsi webhook mungkin terasa menakutkan. Ini bisa terutama benar jika Anda tidak terbiasa dengan komponen teknis dalam menciptakan endpoint dan menangani data secara programatik. Ada layanan yang tersedia yang akan mengonsumsi data webhook Bird dan ETL ke dalam basis data Anda secara otomatis – salah satunya adalah StitchData, yang pernah kami bahas dalam blog sebelumnya.  Namun, jika Anda menginginkan lebih banyak kontrol atas proses tersebut, Anda dapat dengan mudah membangun komponen sendiri. Berikut ini adalah panduan sederhana untuk membantu pengirim merasa nyaman saat membuat webhook acara Bird dan mengonsumsi data menggunakan infrastruktur dalam AWS.

Mengonfigurasi Target Endpoint Webhook

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


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 secara terbalik dimulai dengan membuat bucket S3 tempat kami akan menyimpan data acara kami dan kemudian bekerja mundur – menambahkan setiap komponen yang mendukung apa yang telah kami bangun.

Buat Bucket S3 untuk Menyimpan Data Webhook

Sebelum membuat load balancer kami untuk menerima data, atau fungsi lambda kami untuk menyimpan data, kami perlu terlebih dahulu membuat bucket S3 di mana data akan disimpan. 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. Ketika bucket S3 Anda dibuat, itu akan kosong – jika Anda ingin mengatur data di dalam folder, Anda dapat membuat direktori yang diinginkan sekarang, atau direktori akan dibuat saat fungsi lambda Anda menyimpan file tersebut. Dalam contoh ini, kami menamai 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 menavigasikan ke layanan Lambda dalam AWS dan mengklik “Create Function.” Anda akan diminta untuk memberi nama pada fungsi lambda Anda dan memilih bahasa pemrograman mana yang akan digunakan untuk menulis fungsi Anda. Untuk contoh ini, kami menggunakan Python sebagai bahasa runtime.

Sekarang kita perlu mengembangkan fungsi lambda kita. Untuk sementara, anggaplah bahwa application load balancer kami telah dikonfigurasi dan meneruskan payload webhook ke fungsi lambda kami – lambda akan menerima payload termasuk header dan body lengkap. Payload diteruskan ke fungsi lambda kami menggunakan objek “event” sebagai kamus. Anda dapat merujuk header dan body payload secara independen dengan mengakses objek “headers” dan “body” di dalam payload. Dalam contoh ini, kita akan membaca header “x-messagesystems-batch-id”, di mana ID batch 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 fungsionalitas tambahan seperti pemeriksaan otentikasi atau error handling, 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 contoh fungsi lambda kami, kami melakukannya dalam fungsi “store_batch”. Dalam contoh ini, kami akan menyimpan seluruh batch sebagai satu file, yang membantu memastikan bahwa data dikumpulkan dan disimpan sebelum koneksi HTTP antara Bird dan endpoint Anda habis. Meskipun Anda dapat menyesuaikan pengaturan waktu habis koneksi pada load balancer Anda, tidak ada jaminan bahwa koneksi tidak akan habis pada sisi transmisi (dalam hal ini Bird) atau bahwa koneksi tidak akan terputus sebelum fungsi lambda Anda selesai dieksekusi. Merupakan praktik terbaik untuk menjaga fungsi konsumen Anda seefisien mungkin dan menyimpan kegiatan pemrosesan data untuk proses hilir bila mungkin – seperti mengonversi payload dalam format JSON-batch menjadi file CSV, atau memuat data acara ke dalam database.

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

Sampel fungsi lambda konsumen kami dapat ditemukan di sini.

Catatan singkat tentang ID batch: Bird akan mengelompokkan acara ke dalam satu payload, di mana setiap batch dapat berisi 1 hingga 350 atau lebih rekaman acara. Batch akan diberikan ID batch unik, yang dapat digunakan untuk melihat status batch dengan memanfaatkan Event Webhooks API atau dalam akun Bird Anda dengan mengklik webhook stream dan memilih “Batch Status.” Jika terjadi payload webhook tidak dapat terkirim, seperti selama waktu habis koneksi, Bird akan otomatis mencoba kembali batch menggunakan ID batch yang sama. Hal ini dapat terjadi ketika fungsi lambda Anda berjalan mendekati batas waktu perjalanan pulang-pergi maksimum 10 detik dan merupakan alasan untuk mengoptimalkan fungsi konsumen agar mengurangi waktu eksekusi.

Untuk menangani semua aktivitas pemrosesan data, saya merekomendasikan untuk membuat fungsi lambda terpisah yang dieksekusi setiap kali file baru dibuat di bucket S3 – dengan cara ini, pemrosesan data dilakukan secara asinkron terhadap transmisi data, dan tidak ada risiko kehilangan data akibat koneksi terputus. Saya membahas fungsi lambda pemrosesan di bagian lain.

Buat Application Load Balancer

Untuk menerima payload webhook, kita perlu menyediakan endpoint untuk mengirim payload. Kami melakukan ini dengan membuat application load balancer dalam AWS dengan menavigasikan 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 permintaan HTTP, dan ALB digunakan untuk merutekan permintaan HTTP 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 dengan ALB, dan oleh karena itu fungsi lambda Anda perlu menangani objek permintaan sesuai.

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

Buat Rekaman DNS untuk Load Balancer

Untuk memudahkan kita menggunakan ALB sebagai endpoint, kita akan membuat A record di DNS yang mengarah ke ALB kita. 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>). A record harus dikonfigurasikan untuk menunjuk ke ALB yang kita buat. Jika Anda menggunakan Route 53 untuk mengelola rekaman DNS, Anda dapat merujuk ke instanse 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 instanse ALB.

Saya merekomendasikan menggunakan alat seperti Postman untuk menguji bahwa semuanya telah dikonfigurasikan dengan benar sebelum mengaktifkan webhook Bird Anda. Anda dapat membuat permintaan POST ke endpoint Anda dan mengonfirmasi bahwa respons diterima. Jika permintaan POST Anda tidak mengembalikan respons, Anda mungkin perlu memeriksa ulang apakah ALB Anda mendengarkan port yang benar.

Buat Bird Webhook

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

Setelah selesai, verifikasi sub-akun dan acara yang dipilih dengan benar, dan tekan “Create Webhook” untuk menyimpan konfigurasi Anda. Data acara untuk semua jenis acara yang dipilih sekarang akan mengalir ke URL target 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.