Phần 6: Deploy AWS Lambda với Gitlab-CI và Serverless Framework

Giới thiệu #

deploy aws lambda

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.

deploy-aws-lambda
AWS Lambda. Nguồn ảnh: aws.amazon.com

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,…).

deploy-aws-lambda-serverless
Serverless Framework. Nguồn ảnh: serverless.com

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 #

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/
🔗 Fanpage: https://www.facebook.com/tel4vn

🔗 Youtube: TEL4VN

🏠Địa chỉ: 82/2/9 Đinh Bộ Lĩnh, P.26, Q.Bình Thạnh, TP.HCM
☎️SĐT: 028 3622 0868
📩 Email: tuyensinh@tel4vn.com

Powered by BetterDocs

Để lại bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *