Hi gengz, kali ini kita bakal coba coba bikin lambda nyok, dengan menggunakan terraform.
Sebelumnya kita mulai dari asumsi dulu ya, asumsi saya adalah :
- AWS cli sudah terinstall dan login ke account AWS nya
- Terraform sudah diinstall
Saya sudah nyiapin githubnya, yuk kita clone dulu.
https://github.com/ludesdeveloper/terraform-lambda-golang

git clone https://github.com/ludesdeveloper/terraform-lambda-golang.git
cd terraform-lambda-golang

Saya sudah sediakan script untuk mempermudah, yuk jajal dulu.

cd scripts
Kita mulai dari membuat s3 bucket dulu ya gengz.

./1_create_s3_bucket.sh
Disini kita akan memberi nama pada bucket kita, pastikan namanya unik, karena bucket name tidak boleh sama, saya akan beri nama yang cukup panjang dan kemungkinan unik yaitu “belajar-bareng-bersama-ludes”.

Ntaps, sudah terbuat, silahkan tekan q untuk exit. yuk kita check bucket kita dulu.

Wow, sudah terbuat untuk bucket “belajar-bareng-bersama-ludes”. Bucket readeh, sekarang kita upload codenya.

./2_build_zip_upload.sh
Disini saya memberikan pilihan, untuk membuat versi terhadap aplikasi yang akan kita upload, mari kita ketikkan “1.0.0” untuk versi aplikasi kita.

Ntaps, sudah terupload nih, nah yuk kita buat dulu lambda + api gatewaynya dengan terraform, gaskeun.

./3_terraform_apply_auto_version.sh
Disini akan ada pertanyaan untuk versi, silahkan type versi yang sebelumnya kita buat “1.0.0”.

Tunggu sebentar ya, ngopi ngopi dulu gengz. Terraform akan melakukan init lalu apply.

Waduh, udah selese, yuk coba buka base_url nya di browser.

Easy peasy lemon squeezy ya gengz, udah jadi aja. Nah kita coba rubah code ya. Yuk masuk ke folder, lalu buka dengan IDE anda tercinta. Silahkan buka main.go
cd ../lambda-go

Yuk kita rubah “Hello”(line 17) menjadi “Belajar Sambil Berbagi” seperti dibawah ini.

Jangan lupa disave dulu ya gengz, wajib nih, jangan ditawar. Sehabis itu mari kita ke folder script lagi.
cd ../scripts
Mari kita execute build kembali dengan versi yang berbeda, yaitu “1.0.1”.

./2_build_zip_upload.sh
Cek tipis tipis dulu ya s3 nya.

aws s3 ls s3://belajar-bareng-bersama-ludes
Disini kita bisa lihat, saat ini kita punya 2 versi, “1.0.0” dan “1.0.1”. Yuk kita update dulu di lambdanya seperti dibawah ini.

./3_terraform_apply_auto_version.sh
Kita akan mengetikkan “1.0.1” untuk update versi aplikasi terhadap lambda, yuk eksekusi aja.

Tunggu bentar ya gengz, terraform akan coba init dan apply kembali.

Wah udah jadi aja, yuk tengok lagi di browser kita tercinta.

War byasah, dah ganti gengz.
Untuk mendelete semua yang sudah kita buat, silahkan access script dibawah yang ada di folder scripts
./delete_s3_bucket.sh
./terraform_destroy_auto_version.sh
Nah, saya akan coba bahas tipis tipis ya gengz. Yang pasti bisa dilihat bahwa kita punya 3 folder. Yang pertama “lambda-go” isinya folder code untuk golang. Yang kedua “script” yang isinya adalah kumpulan script untuk mempermudah eksekusi. Yang ketiga “terraform” adalah kumpulan code .tf untuk eksekusi terraform.
Untuk code itu cukup simple, memiliki fungsi handler, saya temukan yang works itu di github berikut untuk lambda
https://github.com/serverless/examples/blob/master/aws-golang-http-get-post/getFolder/getExample.go
package main
import (
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
// Handler function Using AWS Lambda Proxy Request
func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
//Get the path parameter that was sent
name := request.PathParameters["name"]
//Generate message that want to be sent as body
message := fmt.Sprintf(" { \"Message\" : \"Belajar Sambil Berbagi %s \" } ", name)
//Returning response with AWS Lambda Proxy Response
return events.APIGatewayProxyResponse{Body: message, StatusCode: 200}, nil
}
func main() {
lambda.Start(Handler)
}
Untuk terraform sumbernya cukup detail dijelaskan disini
Untuk script itu saya buat biar gampang aja makenya. di script 1_create_s3_bucket.sh script membaca input dan langsung membuat sebuah file dengan nama bucketname yang nanti akan dibaca pada saat upload file ke arah s3, dan script 1_create_s3_bucket.sh juga akan mengupdate variables.tf yang akan digunakan oleh terraform untuk salah satunya melakukan download file code yang sudah ada di s3.
Contoh disini masih sangat simple, karena hanya membuat function dan mengexposenya, lalu coba untuk mengaksesnya. Semoga dilain kesempatan saya bisa buat yang lebih advance lagi ya gengz.
Semoga bermanfaat.