Continuous Deployment with Serverless Computing

буюу AWS Lambda-г + GitLab CI/CD-тай хослуулах нь

--

Continuous Deployment: Ensures that every change to the system is releasable

Continuous Delivery/Deployment (CD) гэдэг нь CI-н дараачийн алхам бөгөөд хэрэглэгчийн гар дээр бүтээгдэхүүнийг хүргэх тэр процессыг автоматжуулахыг хэлдэг.
GitLab CI/CD (Continuous Delivery гэж юу вэ?)

Serverless computing: Огт сервергүй гэсэн үг биш.

Хамгийн энгийнээр хэлбэл өөрсдийн аппликэйшндээ зориулж байнга сервер асаах хэрэггүй гэсэн үг. Хэрэгцээ гарах үед resource хуваарилагдаж ажиллаад, дуусах үед устгачихдаг тул бүр их хямд байх боломжтой, мөн маш хурдан scale хийж олон сая хүсэлтийг даах чадалтай байдаг.
How I got my first AWS certification

Allocate when needed VS 24/7 server

Serverless computingAWS дээрх хувилбар нь Lambda. Дан ганц backend гэлтгүй File, Stream processing гэх мэт янз бүрийн зүйлд ашиглаж болно.

AWS Lambda: a serverless, event-driven compute service that lets you run code without provisioning or managing servers.

Харин өнөөдрийн хувьд AWS Lambda функцийг хэрхэн GitLab CI/CD-р автоматжуулахыг туршицгаана аа.

Сонголт

GitLab documentation лүү орвол Deploying AWS Lambda function using GitLab CI/CD гэсэн хэсэгт 2 сонголт бий. Нэг нь Serverless Framework бол нөгөөх нь AWS’ Serverless Application Model (SAM). Өнөөдрийн хувьд хэдүүлээ 2дох сонголтын дагуу явна.

AWS SAM: өөрсдийнх нь гаргасан serverless app хийхэд хялбаршуулсан tool.
- Open Source, uses CloudFormation, local build & test, CI/CD configurable

За тэгээд туршилтаа хийхийн тулд 1. SAM CLI суулгах, 2. жишээ апп үүсгэх (Lambda function + API Gateway) болон 3. CI/CD холбох хэрэгтэй.

1. SAM CLI суулгах

Миний хувьд Ubuntu 20.04/Linux ашигладаг болохоор доорх командаар татаж авч суулгалаа.

download installer zip
unzip & isntall & check version

2. Жишээ апп үүсгэх

GitLab дээр 1 хоосон төсөл үүсгээд, түүнийгээ local-руугаа clone-доод, дотор нь SAM CLI команд ажиллуулна. (sam init)

Choose type 1 : zip & upload to S3

За мэдээж дээрх үүсгэсэн төслөө AWS-руу deploy хийх учир хэрэглэх account, programmatic access хийх AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 2 хэрэг болно. Мөн тэрийгээ GitLab CI/CD → Settings → Variables хэсэгт тохируулах шаардлагатай.

AWS Credentials → need Lambda, API Gateway, CloudFormation permissions

GitLab CI/CD-д зориулж .gitlab-ci.yml файл хэрэгтэй. Доорх загварын <S3_bucket_name> хэсгийг Lambda code хийх S3 bucket нэрээр солихоо мартав аа!

Lambda CI/CD project with .gitlab-ci.yml file added

GitLab CI/CD pipeline ажиллахын тулд GitLab runner тохируулсан байх хэрэгтэй. Үгүй бол pending гэсэн ийм л бичигтэй нүүр тулна даа.

GitLab CI/CD pipeline → Runner NOT configured

Жишээ болгоод AWS EC2 дээр Ubuntu20.04 instance асаагаад дотор нь GitLab Runner суулгаад, register хийж болно. Мөн Docker суулгаарай. GitLab runner-аа Docker төрлийнхийг үүсгэнэ ээ.

sudo gitlab-runner register : docker

Хэрвээ амжилттай болбол GitLab projectSettings → CI/CD → Runners хэсэгт ингэж харагдах ёстой. ✅

GitLab runner — SUCCESSFUL configuration

Бүх юм бэлэн болсон бол git push хийх болгонд CI/CD ажиллаад deployment ШУУД явагдах ёстой. (одоогийн тохиргоогоор) Гэхдээ бодит амьдрал дээр Merge Request дээр ажиллахаар тохируулж мөн гараар deploy хийх товч дардаг байдлаар ажиллуулдаг.

CI job → Successful

Log дээр харагдаж буй API Gateway линк https://e1t3vuph5b.execute-api.us-east-1.amazonaws.com/Prod/hello дээр дарж ажиллаж байгаа эсэхийг шалгах боломжтой.

Deploy маань амжилттай болж уу?

Ингээд л болоо. Шинээр кодын өөрчлөлт орж ирэх болгонд API Gateway болон Lambda function маань байнга автоматаа шинэчлэгддэг болчихлоо.

Шинэ хувилбараа гаргаад Python Lambda функцынхаа буцааж байгаа мессежийг өөрчлөөд hello worldhello BEBI болгоод push хийе.

hello_world/app.py → L#39 : `world → BEBI`

Push хийсний дараа CI/CD pipeline дотор шинэ ажил явагдана.

Амжилттай дууссаны дараа өмнөх API Gateway link маань өөрчлөгдөөгүй хэвээрээ ч хүсэлтийн хариуд hello BEBI гэж буцаана. Зөвхөн кодын л өөрчлөлт орсон тул.

API Gateway + Lambda version#2

Ингээд Lambda-г GitLab CI/CD ашиглан автоматжуулах тест маань амжилттай боллоо. Ажиллагааны хувьд энгийн backend project-н CI/CD-ээс ялгарахгүй бөгөөд Deploy хийхээс өмнө тестийн хэсгийг ч бас оруулж өгч болно. Мөн өөр өөр version гаргах уу, Dev/Stage/Prod аль орчинруу deploy хийх гэх мэт олон тохиргоог нэмэх боломж бий.Өнөөдрийн нийтлэл маань ингээд дуусаж байна. Дараа харин юуг турших вэ?

Testing locally with SAM:

Хүсвэл SAM CLI ашиглан local тест хийж болно. Эхний удаа run-дахад харин Docker image татах байх. Түүний дараа бол шууд функц ажиллаад хариугаа өгнө.

sam local invoke HelloWorldFunction -e events/event.json
sam local start-api -> curl "http://127.0.0.1:3000/hello"

--

--

Билигүн.Б (Програмч аав)
2B +1% better 2day

I am who I am... || өөрийнхөөрөө байхаас ичихгүй