Giới thiệu #
AWS Lambda #
AWS Lambda là một dịch vụ điện toán phi máy chủ (serverless) trên AWS, hỗ trợ người dùng có thể thực thi các ứng dụng hoăc service backend mà không cần quan tâm đến hạ tầng bên dưới. Theo trang chủ của AWS, người dùng có thể kích hoạt AWS Lambda từ hơn 200 dịch vụ AWS và các ứng dụng phần mềm dưới dạng dịch vụ (Software-as-a-Service – SaaS), đồng thời chỉ phải trả tiền theo mức sử dụng.
Hiện tại AWS Lambda hỗ trợ các ngôn ngữ lập trình sau:
- Java
- Python
- C#
- Node.js
- Go
- PowerShell
- Ruby
Serverless Framework #
Đây là một công cụ được viết bằng Node.js, với mục tiêu ban đầu là hỗ trợ người dùng có thể deploy và quản lý một số tài nguyên liên quan đến AWS Lambda, và sau này mở rộng ra các “serverless compute” trên các public cloud khác (Google Cloud Function, Azure Function,…).
Người dùng chỉ cần khai báo một file template “serverless.yml” để định nghĩa các thông tin cần dùng cho việc deploy AWS Lambda. Sau đó công cụ này sẽ sử dụng file này để chuyển đổi sang file deploy tương ứng đối với từng cloud, ví dụ như AWS thì sẽ là CloudFormation template.
Các bước thực hiện #
Khai báo AWS Credentials #
Runner sẽ cần phải có “credentials” để có thể tương tác với AWS, ví dụ như khởi tạo, cập nhật cấu hình cũng như xóa các service trên AWS. Bạn có thể thiết lập thông tin “credentials” này ở mục Settings / CI/CD / Variables với các thông tin bên dưới:
Tên biến | Giá trị |
AWS_ACCESS_KEY_ID | Access key ID |
AWS_SECRET_ACCESS_KEY | Secret access key đi kèm |
AWS_DEFAULT_REGION | Region mặc định dùng để deploy |
Tạo “handler function” #
Bước tiếp theo là viết một đoạn code để nhận và thực thi các request từ phía client. Ở bài viết này, mình sẽ tạo 1 file “src/handler.js” chứa hàm “hello” bằng Node.js đơn giản với nội dung như sau:
'use strict'; module.exports.hello = async event => { return { statusCode: 200, body: JSON.stringify( { message: 'Lambda Sample - TEL4VN!' }, null, 2 ), }; };
Lưu ý: Để deploy thành công và AWS Lambda hoạt động đúng như mong muốn, người dùng cần khai báo chính xác “đường dẫn đến handler”. Với định dạng như sau: <đường dẫn đến file handler>.<tên hàm handler>. Như ở phần mô tả bên trên, chúng ta có thể thấy handler sẽ có giá trị là “src/handler.hello”
Ngoài Node.js, người dùng có thể thay thế bằng các ngôn ngữ lập trình khác mà AWS Lambda đang hỗ trợ như Python, Go,…
Tạo file “serverless.yml” #
File này sẽ chứa thông tin cấu dùng để deploy AWS Lambda, bao gồm: tên function, loại runtime, dung lượng RAM của function, description, cloud dùng để deploy,… Ví dụ:
service: lambda-example // Tên service được deploy provider: // Khai báo về cloud name: aws // Sử dụng AWS để deploy Lambda runtime: nodejs14.x // Ngôn ngữ sử dụng của Lambda functions: // Khai báo thông tin function hello: handler: src/handler.hello // Định nghĩa đường dẫn tới handler của function events: // Khai báo API Gateway với method GET để nhận request từ client - http: GET hello
Tạo job deploy trên .gitlab-ci,yml #
Sau khi đã thực hiện các bước nêu trên, giờ là lúc chúng ta sẽ định nghĩa các câu lệnh cần thiết dùng cho việc deploy AWS Lambda
deploy-lambda: image: node:latest // Sử dụng image "node:latest" cho việc deploy stage: deploy before_script: - npm config set prefix /usr/local - npm install -g serverless // Cài đặt serverless framework script: - serverless deploy --stage production --verbose // Deploy AWS Lambda cho môi trường production
Sau khi deploy thành công, người dùng có thể lấy endpoint của API Gateway đã được khởi tạo cùng lúc với AWS Lambda từ trong log deploy, với định dạng như sau:
endpoints: GET - https://<API ID>.execute-api.<region đã deploy>.amazonaws.com/production/hello
Người dùng có thể sử dụng endpoint này để request đến AWS Lambda thông qua API Gateway thay vì “invoke” trực tiếp, giúp tăng tính bảo mật hơn cho hệ thống.
Để kiểm tra kết quả sau khi deploy, người dùng có thể sử dụng endpoint với câu lệnh “curl” như sau:
curl "https://<API ID>.execute-api.<region đã deploy>.amazonaws.com/production/hello"
Nếu kết quả trả về như bên dưới là việc deploy đã thành công:
{ "message": "Lambda Sample - TEL4VN!" }
Xem thêm #
- Phần 1: Giới thiệu tổng quan về Gitlab Runner
- Phần 2: Các loại Runner Executor trong Gitlab CI
- Phần 3: Hướng dẫn cài đặt Gitlab Runner trên Ubuntu / Centos / Windows / macOS
- Phần 4: Các thành phần cơ bản trong file “.gitlab-ci.yml”
- Phần 5: Tạo Docker Image với Gitlab runner – Shell Executor
- Phần 5: Tạo Docker Image với Gitlab runner – Bind Docker socket
- Phần 5: Tạo Docker Image với Gitlab runner – Docker in Docker (Dind)
Nguồn tham khảo: docs.gitlab.cn
Trung tâm đào tạo Viễn thông và Công nghệ thông tin TEL4VN (TEL4VN) chuyên đào tạo các khóa học về DevOps như: Docker, Kubernetes, Ansible, Jenkins, Linux…….Ngoài ra, TEL4VN còn là Trung tâm đào tạo duy nhất về VoIP mã nguồn mở. 🌐Website: https://tel4vn.edu.vn/ |