Overview
Tiếp nối ở bài viết trước về các bước khởi tạo CI/CD Pipeline với Google Cloud Services Ở bài viết này, chúng ta sẽ cũng tìm hiểu cách để khởi tạo một CI/CD Pipeline bằng cách sử dụng Amazon Web Services: AWS CodeCommit, AWS CodeBuild, AWS Pipeline, AWS ECS & Fargate.
Các kiến thức tiền đề Để có thể hiểu rõ hơn về bài viết này, người đọc sẽ cần có Basic AWS Cloud Knowledge Có thể tham khảo tài liệu sau
Introduction
Có thể nói, chúng ta đã có một quãng đường dài trong ngành công nghệ, với những tiến bộ hiện nay thì khi thực hiện deploy website hoặc application, chúng ta không cần quan tâm quá nhiều về hạ tầng Infra, server, network management hay việc scale hạ tầng Infra dựa trên network traffic nữa.
Chúng ta hoàn toàn có thể dựa vào mô hình cloud computing
Vậy Cloud Computing là gì?
Cloud Computing là service cung cấp theo yêu cầu của người dùng các dịch vụ như computing power, các server, database, phần mềm cho người dùng sử dụng với định giá trả theo số lần sử dụng.
Giờ thì doanh nghiệp không còn cần phải tốn quá nhiều chi phí cho việc dựng physical server, data center. Chúng ta hoàn toàn có thể truy cập các dịch vụ như computing power, các server, database, dựa trên nhu cầu sử dụng.
Các Cloud Services phổ biến hiện nay có thể kể đến như: Amazon Web Services (AWS), Cloud Cloud Platform(GCP), or Azure Cloud.
Phân loại Models Cloud Computing
Infrastructure as a Service (IaaS)
IaaS cung cấp quyền truy cập vào các tính năng network, máy tính (máy tính ảo hoặc trên phần cứng chuyên dụng) và không gian lưu trữ dữ liệu. Các service này rất linh hoạt và người dùng hoàn toàn làm chủ việc kiểm soát các resource mình đang sử dụng (VD: AWS ES2)
Platform as a Service (PaaS)
Với mô hình PaaS, chúng ta sẽ không cần phải quản lý hạ tầng Infra cơ bản (thường là phần cứng và hệ điều hành), và chỉ cần tập trung vào việc phát triển phần mềm VD: AWS Elastic Beanstalk
Software as a Service (SaaS)
SaaS cung cấp cho chúng ta một product hoàn chỉnh được quản lý và điều hành bởi bên cung cấp dịch vụ. VD: Gmail
Advantages of Cloud Computing
Flexible access: Cho phép truy cập vào cloud services từ bất kì đâu thông qua internet.
High availability: Đảm bảo resource luôn available dựa trên yêu cầu của khách hàng, cung cấp khả năng chịu lỗi.
Flexible scaling: Cho phép sacling các resouce dựa trên nhu cầu, của người dùng, có thể thực hiện manual hoặc automatic.
Reduce IT cost: Giảm các chi phí trả trước, tối ưu việc sử dụng tài nguyên, giảm thải tiêu thụ năng lượng và không gian chứa server, data center dựa trên mô hình trả phí theo số lần sử dụng.
Business continuity: Giảm impact của thời gian chết.
AWS
Amazone Web Services cung cấp các dịch vụ kiện toán đám mây rất đáng tin cậy với độ bảo mật cao, có thể mở rộng quy mô linh hoạt và tiết kiệm chi phí. AWS cung cấp các cơ sở hạ tầng Infra như là một dịch vụ Infrastructure as a service(IaaS), Platform as a Service(PaaS), Software as a Service(SaaS) và đồng thời cũng cung cấp một model mới là Function as a Service(FaaS) như AWS Lambda là một entity không có máy chủ
Về các background knowledge liên quan đến AWS, các bạn có thể tham khảo chuỗi các bài viết liên quan đến setting AWS: https://viblo.asia/p/aws-essentials-phan-1-guildline-settings-iam-tren-aws-1Je5EDDmlnL
Amazon Elastic Container Service(ECS)
Amazon ECS là một nền tảng điều phối container phát triển bởi Amazon, tương đồng với Kubernetes.
Amazon Elastic Container Service (ECS) giúp lên schedule và sắp xếp các container trên một nhóm các server.
Source: AWS ECR
Hai thành phần chính của ECS là Tasks và Services.
Task là một hoặc nhiều container sẽ được ECS lên schedule cùng nhau.
A Service giống như một Auto Scaling group cho các task. nó tự định nghĩa số lượng các task để run thông qua cluster, nơi mà các task cần phải chạy, tự động liên kết chúng với load balancer, và chia tỉ lệ theo chiều ngang dựa trên các metrics (số liệu) mà người dùng đã định nghĩa như là Memory Ultilization,....
Một service quan trọng khác của AWS service là Elastic Container Registry(ECR), đây là một service để đăng kí lưu trữ, quản lý các container images.
Khái niệmFargate?
AWS Fargate là một compute engine không máy chủ dành cho Amazon ECS để thực hiện chạy các container mà không cần lo lắng về các cơ sở hạ tầng Infra phía dưới. Với Fargate, chúng tá sẽ chỉ định một image đại diện trong ECR để deploy với thông số CPU cũng như memory cần thiết. Fargate xử lý việc cập nhật và bảo mật dưới Linux OS, Docker daemon, và ECS agent được biết như là các hạ tầng Infra để quản lý cũng như scaling.
Giờ chúng ta sẽ bắt đầu làm việc trên AWS cloud.
Steps để Deploy Application trên AWS Fargate
Step1: Bước đầu tiên chúng ta cần login vào AWS management console và search theo keyword ECR
Step2: Click vào ‘Get started’ trên page tiếp theo, site sẽ yêu cầu bạn tạo repository. Điền các thông tin cần thiết. Bạn có thể tạo một private hoặc public repository, đặt tên cho repository và click ‘Create repository’
Step3: Lúc này ECR đã sẵn sàng, click vào repository radio button, và ‘View push commands’ button sẽ xuất hiện
Step4: Tiếp tục clicck vào ‘View push commands’, sẽ xuất hiện popup command để upload một docker images lên Elastic container registry(ECR)
Note: Chúng ta cần có sẵn docker image để push lên ECR.
Các bạn có thể tham khảo các image khả dụng sử dụng docker images command, dưới đây là một docker image đã được chuẩn bị sẵn để deploy và push lên ECR.
Trước khi chạy AWS command chúng ta sẽ cần install AWS CLI, tham khảo bài viết sau để install AWS CLI
AWS Command Line Interface(CLI) là command line tool để quản lý AWS.
Với Linux, chúng ta sẽ chạy command sau để instal CLI
Chúng ta có thể check xem install có thành công hay không bằng cách sử dụng command ‘aws –version’
Tiếp theo chúng ta sẽ cần config với AWS account credentials để execute AWS commands. Click vào account và tiếp tục click vào ‘My Security Credentials‘ sau đó sẽ khởi tạo. Credentials sẽ được tạo và sau đó người dùng có thê download chúng.
Bây giờ, trên terminal sẽ chạy ‘aws configure command để config credentials của bạn, chỉ định credentials, và set bất kì region nào sau đó với output format, bạn có thể ấn Enter (hoặc use json như là output format).
Giờ chúng ta đã setting xong và có thể push docker image lên ECR.
Step5: Follow commands dựa trên Operating system bạn đang chạy, chạy command ở dưới local terminals. Nếu bị gặp lỗi get permission denied thì sử dụng sudo trước khi chạy docker commands.
Nếu bạn đã sàng tạo docker image thì tạm chưa chạy run build command và nếu chưa tạo docker image thì sẽ đi tới directory nơi lưu trữ Dockerfile và chạy command chỉ định.
Và đó là các step để push docker image lên ECS, chúng ta có thể xác nhận lại từ console.
Step6: Giờ chúng ta cần khởi tạo một cluster. Check panel bên trái cho các Cluster và click vào đó. Trên redirect page click vào ‘Create Cluster’. Chọn ‘Networking only‘ và click để config cluster. Assign name cho cluster và add tags cho nó (Điều này sẽ rất hữu dụng khi bạn làm việc trong tổ chức và cần phân biệt giữa các project để take note billing) sau đó click create.
Step7: Giờ chúng ta cần tạo ‘Task Definition’. Click vào ‘View cluster’ và phía bên trái bạn sẽ thấy ‘Task Definitions’ option, click vào mục này. Sau đó click vào ‘Create new Task Definition‘ và chọn Fargate là launch type sau đó click next để config.
Tiếp theo chúng ta cần config Task Definition, đặt tên, và chỉ định task Memory cũng như CPU cần để chạy task.
Click vào Add container, để thêm container chúng ta đã push lên ECR. Đặt tên và image URI chúng ta đã copy ở sep trước sau đó chỉ định pỏt mappings thành 5000 để cho phép các container truy cập vào port của host containers để send hoặc nhận traffic. Sau đó click Add và click Create.
Giờ chúng ta có thể view ‘Task Definition‘
Step8: Click vào Actions và Run Task, chọn launch type là Fargate
Chọn VPC và subnet từ dropdown sau đó click Run Task
Step9: Lúc này các Task đã được khởi tạo thành công, chúng ta cần add inbound rule cho security group để access application vào port 5000.
Click vào các task đã tạo và trên page tiếp theo click vào ENI Id phía dưới Network section và note lại Public IP.
Page sẽ được redirect tới page network interface, click vào checkbox, sau đó chọn security group phía dưới Details section.
Giờ click vào Edit inbound rules và click Add rule. Add một custom TCP rule cho port 5000 và source là 0.0.0.0/0 (để đảm bảo application có thể access thông qua mọi IP) sau đó click Save rules.
Bây giờ chúng ta có thể access toàn bộ application sử dụng Public IP thông qua Network section và port 5000.
Reference/ Nguồn: https://www.analyticsvidhya.com/blog/2021/06/deploying-machine-learning-application-on-aws-fargate/