CI/CD cho Serverless Applications (Phần 1)
- Tháng Tư 16, 2021
- Posted by: codestar
- Category: Uncategorized
Serverless Application Model (SAM)
AWS SAM là một open-source framework được dùng để phát triển ứng dụng serverless trên AWS. Một ứng dụng serverless là một tập hợp các Lamda function, even sources và các resources khác cùng làm việc để thực hiện các tác vụ khác nhau cho một hệ thống. Serverless application không chỉ bao gồm các Lamda function mà còn có các resources khác như APIs, database, event source mappings.
Trong phần này, ta sẽ tìm hiểu cách tạo ra một SAM application và hiểu được cấu trúc của nó.
Cài đặt SAM CLI
Khởi tạo project
SAM CLI là công cụ giúp chúng ta tạo và quản lý ứng dụng serverless của mình. Ta có thể phát triển ứng dụng từ một trong các example mà SAM cung cấp. Sau đây ta sẽ khởi tạo một template Hello World của SAMsam init
Nhập 1 để chọn các template của AWS
Chọn artifact là một file zip đẩy lên S3
Chọn phiên bản nodejs 12.x
Đặt tên cho project
Chọn Hello World Example
Project đã đươck khởi tạo:
Kiến trúc của ứng dụng
Kiến trúc của Hello Word template vừa được khởi tạo khi deploy sẽ bao gồm 1 lambda function, một API gateway cho phép thực thi lambda function tại đường dẫn /hello với GET request. Lambda function sẽ đi kèm vời một IAM role cho phép tương tác với các tài nguyên AWS khác, ví dụ như database.
SAM templates
SAM template là tài liệu định nghĩa kiến trúc cho ứng dụng serverless của bạn. Mở file template.yaml trong project:
Bạn có thể nhận ra cú pháp của SAM templates hoàn toàn tương tự AWS Cloudformation. SAM templates được mở rộng từ Cloudformation, vì vậy mọi resource định nghĩa trong Cloudformation có thể dùng được trong SAM templates. Ta cùng tìm hiểu các thành phần của template.
Transform
Trường Transform cho Cloudformation biết cú pháp template này tuân thủ theo AWS Serverless Application Model specification
Globals
Các thành phần trong Globals định nghĩa các properties chung cho toàn bộ serverless functions và APIs của ứng dụng. Trong ví dụ dưới đây, timeout lambda function được đặt mặc định là 3s.
Hello World Function
Các dòng dưới đây định nghĩ một Lambda function với một IAM execution role. Nó cũng chỉ ra source của Lambda function được đặt trong forder hello-world. Hàm handler là lambdaHandler trong file app.js
Chú ý rằng IAM role cho Lambda fuction không được định nghĩa ở đây do SAM sẽ mặc định tạo mới một IAM role. Bạn cũng có thể tự tạo role bằng cách định nghĩa trong Role parameter. Danh sách đầy đủ các parameters cho lambda function ở đây
Event Triggers
Events làm một trong các thuộc tính của function, nó định nghĩa event sẽ trigger Lambda function. Trong ví dụ này, ta đã định nghĩa event từ API gateway với endpoint /hello .
Outputs
Ta có thể tùy chọn in ra các output sau khi deploy Cloudformation để dễ dàng quản lý và tìm kiếm. Các out này có thể là API gateway URL, resource ARN,…
Lambda code
function lambdaHandler trong file hello-world/app.js
Lambda handler
Khi lambda function được trigger, hàm handler sẽ xử lý event nhận được. Sau khi xử lý xong và trả về response, hàm handler sẽ khả dụng cho các event khác.
Bởi vì Lambda handler sẽ khởi chạy mỗi lần được gọi nên ta sẽ đặt những phần code được sử dụng chung bên ngoài phạm vi của handler. Ta có thể sử dụng Lambda layer để chứa các phần code common, thư viện cho ứng dụng của mình. Ví dụ như khởi tạo kết nối database,…
Còn tiếp…
Tác giả: Nguyễn Đức Hải