Parsing CSV file Di S3 Ke DynamoDB

Hi gengz, kali ini kita akan berkenalan dengan S3, SNS, SQS, Lambda dan DynamoDB dengan menggunakan use case parsing csv file yang akan di write ke arah database.

Untuk bisa melihat gambaran luasnya, yuk kita lihat diagram dibawah ini.

Proses yang akan dilakukan :

  1. User akan mengupload file ke Bucket S3.
  2. Bucket S3 yang telah dikonfigurasi dengan notification akan memberikan notifikasi terhadap SNS.
  3. SQS yang telah subscribe ke SNS akan menerima notifikasi dan akan melakukan send message ke Lambda.
  4. Lambda akan ter-trigger oleh SQS lalu “membaca” file yang ada di s3, kemudian melakukan write ke database DynamoDB.

Untuk Use Case kali ini kita akan menggunakan 3 tools :

  1. AWS CLI (Command Line untuk berkomunikasi dengan AWS).
  2. Terraform (Infrastructure As A Code untuk membuat infrastruktur via code).
  3. Serverless Framework (Tools untuk Serverless).

Mungkin temen temen yang sering berkunjung di blog ini pernah membaca artikel dibawah ini bertanya.

Kok pake Serverless Framework? Kan pake Terraform juga bisa.

Jawaban jujurnya adalah memang pas mw nulis blog ini iseng pengen coba serverless, dan ternyata setelah dipakai, cukup nyaman untuk membuat lambda function, dan salah satu benefit yang terasa adalah update code yang cepat ke arah lambda function juga realtime simulasi.

Yuk kita cekidot environment dulu ya,

serverless --version
terraform --version
serverless --version

PEMBUATAN

Terraform

Pastikan semua code diatas works ya gengz, fyi juga saya pakai multipass (ubuntu) untuk melakukan test. Nah, klo udah readeh semua, yuk kita clone dulu di repo berikut (Btw di repo juga ada readme ya gengz, mana tau mau baca baca)

https://github.com/ludesdeveloper/csv-to-dynamodb

git clone https://github.com/ludesdeveloper/csv-to-dynamodb.git

Yuk masuk ke directorynya

cd csv-to-dynamodb/

Mari kita configure dulu aws nya (jangan lupa access keynya apus ya gengz, klo nggak dipake lagi)

aws configure

Nah, kita dah konek nih sama AWS, yuk kita init dulu terraformnya

terraform init

Sebelum apply, kita buat dulu file baru bernama terraform.tfvars dengan isi sebagai berikut(root_id adalah nomor akun aws anda, yang dapat ditemukan via console gui aws di pojok kanan atas)

root_id="root_id"

Untuk melihat plan temen temen bisa menggunakan “terraform plan” atau langsung apply aja juga boleh, yuk kita apply aja

terraform apply -input=false -auto-approve

Sebelum kita lanjut ke Serverless Framework, yuk kita cekidot apa saja yang terbuat dan beberapa hal penting juga yang saya ingin bahas.

S3 Bucket

Anda bisa membuka s3 anda sebagai berikut di bagian properties.

Scroll ke bawah dan anda akan menemukan konfigurasi dibawah ini. Bisa kita lihat bahwa kita sudah melakukan konfigurasi terhadap Event Notifications di S3 terhadap SNS topic yang juga sudah kita buat.

SNS

Kita bisa lihat, bahwa SNS topic baru sudah terbuat, dan juga SQS sudah subscribe ke SNS Topic.

Dan dibagian Access policy juga kita bisa lihat, bahwa kita sudah melakukan konfigurasi supaya SNS bisa “ngobrol” sama si Bucket S3.

DynamoDB

Last but not least, kita juga bisa melihat bahwa DynamoDB sudah terbuat seperti dibawah ini.

Serverless Framework

Yuk kita masuk ke folder code nya ya.

cd files/aws-python-project/

Yuk kita lihat dulu file serverless.yml ya. Disini temen temen bisa lihat ada kata “root_id”, silahkan diubah dulu dengan root id temen temen ya.

org: funguardian
app: aws-python-project
service: aws-python-project

frameworkVersion: '2 || 3'


provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221
  region: ap-southeast-1
  iam:
    role:
      statements:
        - Effect: 'Allow'
          Action:
            - 'sqs:DeleteMessage'
            - 'sqs:ReceiveMessage'
            - 'sqs:GetQueueAttributes'
          Resource: 'arn:aws:sqs:ap-southeast-1:root_id:csvtodynamodb'
        - Effect: 'Allow'
          Action:
            - 'dynamodb:*'
          Resource: 'arn:aws:dynamodb:ap-southeast-1:root_id:table/csvtodynamodb'
        - Effect: 'Allow'
          Action:
            - 's3:*'
            - 's3-object-lambda:*'
          Resource: '*'

functions:
  hello:
    handler: handler.hello
    events:
      - sqs: arn:aws:sqs:ap-southeast-1:root_id:csvtodynamodb

Setelah itu mari kita login Serverless Framework dulu ya.

sls login

Setelah selesai, mari kita deploy ya, serverless function kita.

sls deploy

Jika sudah selesai yuk kita cekidot lambda yang sudah terbuat

Lambda

Disini kita bisa lihat, bahwa kita sudah berhasil untuk menambahkan SQS sebagai trigger dari Lambda Function

Kita bisa juga lihat dibawah ini, bahwa new IAM Role sudah terbentuk, anda bisa klik untuk bisa melihat policy lebih detail.

TESTING

Mari kita tengok dulu ya DynamoDB nya, memastikan bahwa kondisinya kosong

Masi kosong ya gengz, nah sekarang mari kita ambil filenya ya, saya juga sudah sediain di dalem git nya

Mari kita upload filenya ke S3 Bucket kita

cd ../..
aws s3 cp example.csv s3://funguardiancsvtodynamodb
aws s3 ls s3://funguardiancsvtodynamodb

File sudah terupload, mari kita lihat yuk DynamoDB nya

Atau kita juga bisa menggunakan AWS CLI untuk melakukan check

aws dynamodb scan --table-name csvtodynamodb

Mangstap mamang, udah ada di sini nih

Monitoring

SQS

Kita bisa lihat di bagian monitoring SQS, bahwa ada message yang terkirim.

Lambda

Kita juga bisa melihat bahwa ada log di dalam Cloud Watch

Serverless Dashboard

Kita juga bisa memanfaatkan Serverless Dahsboard untuk melihat invocation terhadap function kita.

Tambahan info juga yang mungkin berguna, berikut cara melakukan invoke dengan menggunakan Serverless Framework(hello adalah nama dari function kita).

cd files/aws-python-project/
sls invoke -f hello

BERSIH BERSIH

Untuk beberes gengz, pertama kita akan remove dulu serverless functionnya ya

sls remove

Kita pindah dulu ke root folder ya

cd ../..

Sebelum kita hapus service yang kita buat di AWS, kita harus hapus dulu file example.csv di Bucket S3 kita gengz.

aws s3 rm s3://funguardiancsvtodynamodb/example.csv
aws s3 ls s3://funguardiancsvtodynamodb

Mari kita lakukan terraform destroy untuk menghapus semua service

terraform destroy -input=false -auto-approve

Silahkan check di AWS console masing masing ya, seharusnya semuanya sudah terhapus. Terakhir jangan lupa untuk menghapus access_key di IAM atau dibuat inactive jika tidak digunakan.

Semoga bermanfaat ya gengz. 🙂

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: