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 :
- User akan mengupload file ke Bucket S3.
- Bucket S3 yang telah dikonfigurasi dengan notification akan memberikan notifikasi terhadap SNS.
- SQS yang telah subscribe ke SNS akan menerima notifikasi dan akan melakukan send message ke Lambda.
- 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 :
- AWS CLI (Command Line untuk berkomunikasi dengan AWS).
- Terraform (Infrastructure As A Code untuk membuat infrastruktur via code).
- 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