มาทำ Lambda ให้ automatically update the function จาก ECR พร้อมกับ ทำ ci/cd ผ่าน gitlab กัน
จากบทความเดิมที่เราทำ Golang ให้เป็น microservices จะเห็นได้ว่าถ้าเรามีการแก้ code เราต้องไปอัพเดท Lambda เองทุกครั้ง ซึ่งตามหลักความจริงมันไม่มีทางเป็นไปได้แน่ๆที่จะมี microservices เดียว project หนึ่ง project มันมีหลาย microservices อยู่แล้ว ถ้าทำมือไปตลอดเหนื่อยแน่ และไหนๆ Code ก็อยู่บน git อยู่แล้ว แล้วเราจะมา make build + git push 2 อย่างมันก็เพิ่มขั้นตอนไหนๆ ก็ทำ git push อยู่แล้วให้มันเป็นขั้นตอนเดียวตอนที่เรา push ขึ้นไป พร้อมทำ ci/cd ไปเลย นั้นจึงเป็นที่มาของบทความนี้ มาเริ่มกันเลยดีกว่าครับ
อันดับแรกผมก็มาสร้าง repo บน gitlab ปกติ
จากนั้นก็ go mod init ตาม ด้วย url git ของเรา จากนั้นเอา code เดิมมาวางปกติได้เลย ได้จากบทความนี้เลย Golang ให้เป็น microservices
ก็จะได้โครงสร้างแบบเดิมเปะๆเลยครับจากนั้นเราลองมายิง API เดิมกันก่อน
ลองยิง postman ที่เราเคยทำไปมันก็จะได้ response ออกมาแบบนี้
จากนั้นผมจะเปลี่ยน response จาก pong → มาเป็น thamrong chaiwong
จากนั้นผมจะมา set file make ให้เรียบร้อย อย่าลืมลง aws cli ไว้บนเครื่องเราด้วยนะครับ https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html กดเพื่อติดตั้งให้เรียบร้อยได้เลยนะครับ
make file ที่เพิ่มเข้าไป
aws lambda update-function-code --region ap-southeast-1 --function-name booking --image-uri xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/booking:prd1.0
function ด้านบนคือมันจะไป update lambda ด้วย image path อะไร แหล่งอ้างอิง
หลังจากเรา make ไปแล้วหลังจากที่ run เสร็จ รอประมาณ2–3 นาที lambda เราก็จะถือว่า update แล้ว
จากนั้นมายิง api ก็จะเป็น update ล่าสุดแล้ว
อันนี้คือขั้นตอนทั้งหมดที่เราจะไปทำ ci/cd บน gitlab เพราะยังไงก็ต้อง push ขึ้น git อยู่แล้วไม่จำเป็นต้อง deploy ในเครื่อง
มา setting key ของ AWS ให้เรียบร้อยเราสามารถสร้างจากหน้า IAM และให้ permission สำหรับ lambda และ ecr ให้เรียบร้อย
มาสร้างและให้ permission กับ user นี้ให้มีสิทใน Lambda และ ECR ก็จะได้ key และ secret เอาไปใส่ใน gitlab ตามภาพข้างบนก่อนหน้านี้
จากนั้นมาสร้าง file .gitlab-ci.yml เพื่อทำ ci/cd pipeline บน gitlab ผมทำง่ายๆเลยไม่มี stage อะไรเลย 55555
ขั้นแรกก็ประกาศ variable ปกติเลย และใช้ docker_host : tcp://docker:2375 ไม่ใส่จะ error ซํกอย่าง
จากนั้นก็สร้าง pipeline แบบง่ายๆแบบไม่มี stage อะไรเลย
จากนั้นผมปรับ response โดยเพิ่มดังรูป 55555
จากนั้นก็ push ขึ้น git ปกติเลย gitlab มันจะไป detect เอาเองเลยว่าถ้ามี file .gtlab-ci.yml มันก็จะไปสร้าง pipeline ให้เลย
pipeline เราก็กำลัง run อยู่ใกล้แล้ว
ไปเช็คดู pipeline ก็เสร็จสิ้นแล้ว
หลังจากเสร็จรอ 2–3 นาทีแล้วลองไปยิง api เย้เปลี่ยนแล้ว
ส่วน ECR ก็จะมีการ update ปกติตามที่เรามีการ git push ขึ้นไป
ก็เป็นอันจบแล้วสำหรับการ ทำ ci/cd จนถึงการทำให้ Lambda automatically update the functionเป็นยังไงครับจะมีกี่ microservices ก็ไม่กลัวแล้วครับหลังจากนี้ เนียนกริ๊บแบบไร้ลอยต่อ แต่บ.ไหนคนเยอะและอยากได้งานที่มีประสิทธิภาพก็อย่าลืมทำ test ด้วยนะครับ 5555 ไม่งั้นมันไม่ครบวงจรการทำ ci/cd