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
AWS CLI #
AWS CLI (Command Line Interface) là công cụ hỗ trợ việc quản lý các dịch vụ AWS bằng một dòng lệnh và tự động hóa chúng thông qua các tập lệnh, do chính AWS phát hành. Trong bài viết này, chúng ta sẽ sử dụng aws cli để tạo AWS Lambda.
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 “lambda_function.py” chứa hàm “lambda_handler” bằng Python 3 đơn giản với nội dung như sau:
import requests
def lambda_handler(event, context):
response = requests.get("https://www.example.com/")
print(response.text)
return response.text
Mặc định, AWS Lambda gọi handler với đường dẫn là “lambda_function.lambda_handler“. Đó là lý do trong bài viết này, các file hướng dẫn + tên hàm được đặt tên như vậy. Người dùng hoàn toàn có thể thay đổi tên tùy theo ý thích của mình, nhưng sẽ cần thêm option “–handler <đường dẫn đến handler>” ở trong câu lệnh deploy. Format đường dẫn sẽ có dạng: <đường dẫn đến file handler>.<tên hàm handler>
Ngoài Python, 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ư Node.js, Go,…
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: python:3.9 // Sử dụng image "python:3.9" cho việc deploy
stage: deploy
before_script:
- mkdir package
- pip3 install aws-cli
- pip3 install --target ./package requests && cd package
- zip -r ../my-deployment-package.zip . && cd ..
- zip -g my-deployment-package.zip lambda_function.py
script:
- >
if [ $(aws lambda get-function --function-name tel4vn_lambda) ]; then
aws lambda update-function-code --function-name tel4vn_lambda --zip-file fileb://my-deployment-package.zip
else
aws lambda create-function --function-name tel4vn_lambda --runtime python3.9 --zip-file fileb://my-deployment-package.zip
fi
after_script:
- rm -rf package
Lưu ý:
- File deploy (zip) sẽ bao gồm toàn bộ code và các thư viện cần thiết để thực thi. Nếu function của bạn chỉ bao gồm một số thư viện mặc định hoặc sử dụng các thư viện có sẵn từ AWS SDK, bạn sẽ không cần thêm chúng vào file deploy.
- Trong trường hợp source code của bạn sử dụng Python 3.8 trở lên và có sử dụng thư viện boto3, bạn sẽ không cần thêm chúng vào file deploy vì mặc định AWS Lambda đã hỗ trợ sẵn thư viện này.
- Trong trường hợp sau Lambda của bạn cần nhiều thư viện và tổng dung lượng của file deploy lớn hơn 50 MB, bạn sẽ cần upload file deploy này lên AWS S3 – service dùng để lưu trữ trên AWS, trước khi tiến hành cập nhật code của Lambda.
- Thay vì upload file deploy, người dùng có thể sử dụng container image thông qua service AWS ECR để deploy.
- Nếu bạn mọi thông tin cấu hình đều được tổ chức trong 1 file code thì có thể sử dụng Serverless Framework để deploy.
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)
- Phần 6: Deploy AWS Lambda với Gitlab-CI & Serverless Framework
- Phần 7: Lưu trữ Terraform state trên Gitlab
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/ |