Vitual WTTC – Quản lý hạ tầng Amazon Web Services cho các dự án Internet of Things

Đầu tháng tám này là sự quay trở lại với sự kiện chia sẻ Online WTTC tại Cộng đồng Kỹ thuật TAPIT. Buổi chia sẻ lần này mang chủ đề “QUẢN LÝ HẠ TẦNG TRÊN AWS CỦA CÁC DỰ ÁN INTERNET OF THINGS”.

Đến với buổi chia sẻ, các bạn được tiếp cận với góc nhìn của một người anh: Cao Hoàng Phúc – Cựu học viên TAPIT 2016, anh hiện tại là một Python Developer tại công ty Hitachi Vantara cở sở Thành phố Hồ Chí Minh, anh đã có nhiều kinh nghiệm làm việc với AWS trên các thiết bị IoTs. Với mục đích mong muốn giúp cho các bạn sớm tiếp cận đến những công nghệ, công cụ làm việc mới và hiệu quả trên AWS, tạo ra môi trường trao đổi kinh nghiệm từ các anh chị đi trước. Cảm ơn anh Phúc và các anh chị đã sắp xếp thời gian của mình để tham gia chia sẻ đến các bạn thành viên trong Cộng đồng. 

Buổi chia sẻ gồm hai nội dung chính:

  • Xây dựng hạ tầng Amazon Web Service bằng code.
  • Sử dụng Gitlab CI/CD

TÓM TẮT NỘI DUNG BUỔI CHIA SẺ:

1. Công cụ Terraform

Trước hết, chúng ta cùng nhắc đến thuật ngữ Infrastructure As Code. Thông thường, việc quản lý các web applications khá là phức tạp. Lấy ví dụ bạn đang quản lý load balancer, vài web servers, database servers,… Bạn có thể sẽ phải mất hàng giờ để provisioning và quản lý những hệ thống này. Lúc này chúng ta cần một công cụ để Infrastructure As Code, thuật ngữ này có thể được hiểu là bạn có thể thiết lập/quản lý những stack trước kia của hệ thống thông qua việc định nghĩa chúng trong 1 file script chẳng hạn, thay vì tốn thời gian và công sức setup manual từng thứ.

Terraform là một trong những công cụ giúp bạn quản lý, xây dựng và thay đổi Infrastructure (servers, vpc, storage …), deploy code tự động một cách an toàn và hiệu quả. Lý do tại sao chúng ta nên sử dụng Terraform sẽ được trình bày ở phần sau.


2. Gitlab CI/CD

Nếu bạn đang làm việc với một project có nhiều người cùng tham gia, mỗi ngày hàng chục, hàng trăm commit. Thì những công đoạn như tạo một image cho app, chạy tất cả các test dựa vào image, đẩy image lên registry, deploy vào server… sẽ tốn thời gian biết chừng nào. Thay vào đó, bằng việc tận dụng những công cụng được cung cấp sẵn của các nền tảng (Gitlab) hỗ trợ CI/CD, mọi thứ được làm tự động, đảm bảo code của chúng ta chạy đúng, test đủ và ra production càng sớm càng tốt để user được trải nghiệm tính năng mới.

Khái niệm CI/CD (Continuous Integration/Continuous Delivery – tích hợp liên tục / triển khai liên tục):

  • CI: là quá trình mà code của chúng ta được build, test trước khi tích hợp vào repository chung. Áp dụng với bất kì commit nào vào repository
  • CD: là quá trình xảy ra sau CI, đó là khi ta triển khai code ra môi trường thật (staging, production,…)

3. Ưu điểm của Terraform là gì?

  • Free và open-source:
    • Cộng đồng lớn, phiên bản release ra liên tục.
    • Khi bạn gặp bug, có thể thảo luận trên các cộng đồng để được hỗ trợ nhanh.
    • Open-source trên Github.
  • Không bị ràng buộc bởi provider
    • Mỗi nhà cung cấp đều có Infrastructure Exporting để deploy hạ tầng mã chương trình riêng (ví dụ AWS sẽ có CloudFormation, GCP có Cloud Deployment Manager). Ràng buộc ở đây, mỗi Infrastructure Exporting chỉ deploy trên provider của nó.
    • Terraform có thể deploy lên các Cloud khác thông qua provider do nhà cung cấp gửi đến. 
  • Dễ sử dụng: 
    • Code dễ đọc, dễ hiểu, dễ sử dụng.
    • Đầy đủ các tài liệu, thông tin, hướng dẫn.

4. Cách thức hoạt động

Khi làm việc với một project terraform, chúng ta cần quan tâm đến file .tf và file .tfvars. 

  • File .tf được sử dụng để khai báo các biến trong mã chương trình.
  • File .tfvars (Variable Definitions File) định nghĩa giá trị của các biến. 

Terraform hỗ trợ 2 loại Biến (Variable) trong quá trình sử dụng Terraform gồm: Input và Output

  • Input Variable : được sử dụng như một cách để truyền tham số giá trị cần cấu hình trong hạ tầng của bạn.
  • Output Variable : ở chiều ngược lại, thì Output Variable giúp hiển thị thông tin cần thiết về hạ tầng của bạn sau khi triển khai hạ tầng.

Khi bạn chạy Terraform tại folder chứa mã chương trình người dùng, Terraform sẽ tạo file .tfstate và lưu tại S3. Tệp này ghi lại thông tin về Infrastructure và mã chương trình với mục đích khi bạn thực hiện deploy, Terraform sẽ thực hiện so sánh dữ liệu chương trình với dữ liệu trong file .tfstate, Terraform tiến hành deploy lại nếu có sự thay đổi.

Khi triển khai hạ tầng với Terraform, các bạn cần chú ý đến các comment sau:

  • terraform init: Khởi tạo một thư mục làm việc với Terraform. Câu lệnh này phải được chạy trong cùng thư mục với các file .tf.
  • terraform plan -out plan.dat: Hiển thị để người dùng theo dõi những thay đổi sau khi thực thi, người dùng tiến hành bổ sung mã chương trình nếu cần thiết trước khi thực hiện apply. Tại bước này xảy ra 2 trường hợp:
    • TH1: Khi lần đầu tiên bạn thực hiện deploy, file .tfstate được sinh ra
    • TH2: Khi bạn tiến hành deploy lại chương trình, Terraform thực hiện so sánh mã chương trình với file .tfstate 
  • terraform apply plan.dat: chạy code để build hạ tầng. 
  • terraform validate: Kiểm tra cú pháp file .tf
  • terraform destroy: Xoá các hạ tầng được quản lý bởi Terraform lưu trong file .tfstate. Khi thực hiện việc xóa, cần lưu ý là Terraform không hỗ trợ callback về version cũ. 

=> Cách giải quyết: Revert code và tiến hành deploy lên Terraform. 

5. Câu hỏi thảo luận

  1. Thông thường, khi người dùng làm thủ công phải dựa vào giao diện của Amazone Web Service, khi giao diện được update, hay bổ sung các tính năng, những vị trí mình cấu hình ban đầu có thể được thay đổi, mình có cần cập nhật lại code hay không? 

Trả lời: Khi chương trình báo lỗi Phiên bản cũ, mình chỉ cần lựa chọn update version. Chương trình sẽ tự động được cập nhật theo version mới.

  1. Có cần một hạ tầng để mình build và deploy lên Terraform không?

Trả lời: Gitlab Ci/CD hỗ trợ việc build, change và destroy hạ tầng docker trên Cloud.

  1. Ưu điểm của Gitlab so với Github là gì?

Trả lời: Github mặc định là public. Những công ty khi sử dụng muốn Private thì sẽ sử dụng Gitlab. Gitlab cập nhật tính năng phát triển nhanh hơn Github.

  1. Ví dụ có 2 người đang tiến hành commit trên cùng 1 nhánh, nếu chương trình của người thứ nhất đang thực thi lệnh terraform plan và file .tfstate đang được cập nhật nhưng chưa hoàn tất, thì người thứ hai cũng tiến hành tương tự, Terraform có cơ chế nào để quản lý việc này?

Trả lời: Trong quá trình build, chương trình thứ 1 sẽ được build trước, Gitlab CI/CD có cơ chế đưa chương trình thứ 2 được build vào trạng thái chờ.

MỘT SỐ CÂU BỔ SUNG:

  1. So sánh chi phí của một dự án triển khai trên Cloud và On-Premise.

Trả lời: Tuỳ thuộc vào nhu cầu dự án do mỗi loại có mỗi điểm mạnh yếu riêng biệt.

  • On-Premise tốn kém chi phí đầu tư ban đầu lớn, chi phí duy trì duy trì cũng khá tốn kém. Phù hợp cho các công ty lớn.
  • Cloud bây giờ khá là phổ biến và giá cả cũng phải chăng. Chi phí trả theo hằng tháng hoặc  theo năm tuỳ người dùng lựa chọn.
  1. How to choose the right EC2 instance to build a IoT network with about 200 nodes, data rate via MQTT is about 100 Bytes/node/second

Trả lời: 

  • Về IoTs nên dùng Lambda Function, về EC2 thì AWS cung cấp khá là nhiều lựa chọn cho người dùng lựa chọn theo nhu cầu xử lý về RAM, CPU,…  -> EC2 type chọn theo nhu cầu (RAM, CPU)
  • Có rất nhiều yếu tố ảnh hưởng đến vấn đề chịu tải của Server ( môi trường, tối ưu code,  cache,…)
  1. Khu vực (region) AWS địa phương và vùng (zone) AWS địa phương có gì khác nhau?

Trả lời: 

  • Một region bao gồm nhiều zone 
  • Mỗi khu vực hay mỗi quốc gia, AWS đặt tại mỗi region, để đảm bảo dữ liệu không bị mất nên AWS tạo ra nhiều zone trong 1 region, với mục đích nếu 1 trong các khu vực bị sự cố do thiên tai hay tấn công,… thì vẫn còn các zone khác đảm bảo tính liên tục và đảm bảo dữ liệu người dùng không bị mất đi khi một zone bị sự cố.
  1. Vấn đề và giải pháp bảo mật cho các ứng dụng IoTs? (so với máy chủ vật lý)

Trả lời: AWS đã xây dựng đầy đủ các giải pháp bảo mật cho người dùng. Thay vì việc phải xây dựng 1 Server có tính bảo mật chúng ta cần đầu tư rất nhiều thời gian cũng như chất xám, cần có 1 team đảm bảo vấn đề an ninh đủ mạnh.

  1. Cách tiếp cận và sử dụng các dịch vụ của AWS

Trả lời: AWS có rất nhiều dịch vụ cho người dùng, bạn có thể tham khảo tài liệu AWS cung cấp khá trực quan cho người mới tiếp cận.

  1. Ứng dụng của EC2 trong việc build web và có thể demo được không ạ?

Trả lời: Bản thân EC2 là máy chủ ảo nên ta có thể cài đặt tất cả môi trường cần thiết để build web.

  1. Giải pháp AWS đem lại cho IoTs là gì?

Trả lời: Aws IoTs core, secure AWS cung cấp đầy đủ các quy tắt bảo mật, IoTs,…

  • Amazon Simple Queue Service (SQS) là dịch vụ hàng đợi tin nhắn được quản lý hoàn toàn, cho phép bạn ngắt liên kết và điều chỉnh quy mô của các vi dịch vụ, hệ thống phân tán và ứng dụng serverless.
  • Dịch vụ trợ lý ảo alexa
  • Còn rất nhiều giải pháp khác về IOTS mà AWS cung cấp cho người dùng.
  1. Ưu điểm của AWS so với GCP?

Trả lời: Các dịch vụ về iot AWS cung cấp khá đầy đủ và hướng dẫn trực quan cho người dùng

  •  AWS ra đời trước nên nó ổn định hơn, cách đặt tên khá dễ hiểu cho mọi người tiếp cận, tương tác AWS khá nhanh
  •  GCP rẻ hơn, nhưng chưa ổn định, khó khăn hơn cho các bạn mới tiếp cận
  1. Cách xây dựng cơ sở hạ tầng và ứng dụng AWS IoTs

Trả lời: AWS cung cấp khá nhiều dịch vụ IoTs cho người dùng. Phải hiểu rõ các dịch vụ AWS cung cấp, thông qua đọc các tài liệu của AWS về IoTs, chúng ta mới bắt đầu triển khai xây dựng trên AWS.

  1. Sự quan trọng của AWS trong lĩnh vực IoTs

Trả lời: AWS hỗ trợ đầy đủ các dịch vụ IoTs nên rất tiện lợi cho người dùng phát triển hệ thống IoTs trên AWS.

Các bạn có thể tham khảo 1 số bài viết hướng dẫn liên quan đến AWS, GCP, Azure tại tapit.vn: https://tapit.vn/tong-hop-huong-dan-internet-things-voi-nodemcu-esp8266-va-esp32/

 

Cộng đồng Kỹ thuật TAPIT chia sẻ đến các bạn video đã được thu lại tại buổi chia sẻ. Nếu bạn đang quan tâm đến chủ đề này, hãy nhấn like và subcribe để nhận thông báo về những video với các nội dung liên quan nhé! 

 

Tìm hiểu thêm:
Fanpage Cộng đồng Kỹ thuật TAPIT: TAPIT – Learning, Research and Sharing Community