Minggu ini team memindahkan SMS provider ke Nexmo, use case SMS didalam app yang kami develop digunakan untuk mengirimkan OTP (One Time Password) kepada user saat mereka melakukan signup, juga saat user melakukan login ke dalam aplikasi.

OTP akhir - akhir ini banyak digunakan oleh berbagai layanan online, kebanyakan menyebutnya sebagai two factor authentication.

Salah satu kelebihan yang ditawarkan oleh Nexmo adalah adanya integrasi melalui Webhook. Dengan mengaktifkan fitur ini laporan pengiriman SMS dapat dikirimkan secara realtime ke URL yang telah kita tentukan.

![][1] [1]:https://res.cloudinary.com/bigwisu/image/upload/v1540098128/blog/kinesis-data-pipeline.png

Dalam tulisan ini saya akan membahas soal bagaimana saya membangun data pipeline menggunakan layanan cloud computing AWS. Tools utama yang kami gunakan adalah Kinesis dan Redshift sebagai media penyimpanan data yang diterima.

Langkah petama yang saya lakukan adalah membuat sebuah Stream di Kinesis Stream yang akan menjadi pipeline data kami.

![][2] [2]:https://res.cloudinary.com/bigwisu/image/upload/c_thumb,g_face,w_500/v1540101557/blog/kinesis-create-stream.png

Dari Stream ini data kemudian akan diproses lebih lanjut oleh Kinesis Firehose, dengan menyimpan data terlebih dahulu sebagai file intemediate buffer di S3, saat buffer ini sudah mencapai batasan tertentu perintah COPY akan dijalankan Firehose untuk load data tersebut ke Redshift. Dalam hal ini saya gunakan default values 5mb atau 300 detik sebagai batasan intemediate buffer sebelum perintah COPY dijalankan.

Karena yang diterima dari Nexmo berupa JSON, maka perlu disiapkan mapping untuk menyimpan data. Sebelumnya tabel di Redshift kami siapkan sehingga mapping menjadi

column_mapping = {
    'msisdn': 'msisdn', 
    'to': 'to_' 
    'network-code': 'network_code', 
    'messageId': 'message_id', 
    'price': 'price', 
    'status': 'status', 
    'scts': 'scts', 
    'err-code': 'err_code', 
    'message-timestamp': 'message_timestamp'
}

Mapping ini kami definisikan sebagai file jsonpaths.json

{
    "jsonpaths": [
        "$['msisdn']",
        "$['to']",
        "$['network-code']",
        "$['messageId']",
        "$['price']",
        "$['status']",
        "$['scts']",
        "$['err-code']",
        "$['message-timestamp']"
    ]
}

file ini disimpan di root S3 bucket yang kami gunakan, sehingga setting COPY options di Amazon Redshift destination sebagai berikut

isian columns perlu diisi dengan isian msisdn,to_,network_code,message_id,price,status,scts,err_code,message_timestamp

Langkah berikutnya adalah setup Amazon API Gateway. Untuk itu saya publish sebuah route baru dengan nama nexmo-delivery-webhook dengan method POST, detailnya berikut..

Kemudian ditambahkan Mapping Template berikut

Kinesis Stream akan memproses data dalam bentuk base64, untuk itu perlu ditambakan sedikit transformasi data kemudian untuk opsi “PartitionKey”, saya tambahkan sembarang string. StreamName sesuai dengan penamaan stream diatas.

Sekarang infrastruktur data pipeline kami siap untuk menerima data, next step adalah enable fitur webhook di admin panel Nexmo dan arahkan ke URL api gateway yang dipublish oleh AWS.