Udacity Project, Deploy a high-availability web app using CloudFormation
Phong Nguyen
Blog này là memo của mình về 1 trong 4 Project của khóa học Cloud DevOps Engeneer trên Udacity
Mở đầu
Chào các đọc giả Cloud Mentor Pro Blog,
Hôm nay sẽ là một chủ đề hơi khác so với những bài blog trước. Blog này là memo của mình về 1 trong 4 Project của khóa học Cloud DevOps Engeneer trên Udacity
Udacity là một nền tảng giáo dục trực tuyến, nổi bật với các chương trình học chuyên sâu gọi là Nanodegree, giúp người học phát triển kỹ năng trong các lĩnh vực như Cloud, trí tuệ nhân tạo (AI), khoa học dữ liệu, lập trình, phát triển web, và kỹ thuật phần mềm. Udacity hợp tác với các công ty công nghệ hàng đầu như Google, IBM, và Amazon để thiết kế chương trình đào tạo thực tiễn, phù hợp với yêu cầu tuyển dụng thực tế.
Điểm nổi bật của Udacity là cung cấp các bài giảng thực hành, dự án thực tế, và hỗ trợ từ các chuyên gia nhằm giúp người học nắm vững kiến thức và áp dụng vào công việc. Với trọng tâm vào kỹ năng thực tế và các ngành nghề đang phát triển, Udacity là lựa chọn phổ biến cho những ai muốn nâng cao kỹ năng hoặc thay đổi sự nghiệp trong lĩnh vực công nghệ.
Điểm nổi bật của khóa học trên Udacity:
- Các khóa học thường được thiết kế với sự hợp tác của các công ty lớn như Google, IBM, và Amazon, nhằm đảm bảo tính thực tiễn và phù hợp với nhu cầu thị trường lao động.
- Cung cấp các khóa học theo hình thức dự án và có cấu trúc rõ ràng với lộ trình học tập cụ thể.
- Hỗ trợ và hướng dẫn từ các chuyên gia trong ngành, thường xuyên có phản hồi cho bài tập và dự án.
- Khóa học thường có chi phí cao, vì chúng là các chương trình chuyên sâu và có lộ trình học tập rõ ràng.
- Một số khóa học có thể yêu cầu đăng ký hàng tháng.
- Hướng đến những người muốn học sâu về công nghệ và phát triển nghề nghiệp trong các lĩnh vực cụ thể.
- Phù hợp cho cả người mới và những người đã có kinh nghiệm trong ngành muốn nâng cao kỹ năng.
Project Introduction
Sau đây là nội dung của project 2 (1 trong số 4 project của khóa Cloud DevOps Engeneer)
Dự án này sẽ gồm hai phần:
- Diagram: Bạn sẽ phát triển một Diagram sử dụng làm tài liệu trực quan giúp hiểu rõ hơn về kịch bản CloudFormation.
- Script (Template and Parameters) Phần thứ hai là giải thích các hướng dẫn và tạo một script CloudFormation phù hợp.
Starter Code
Bạn cần fork Starter code tại Github repository
Project Scenario
- Công ty của bạn đang tạo một ứng dụng giống như Instagram có tên là Udagram, và yêu cầu là triển khai ứng dụng mới này trên hạ tầng AWS bằng cách sử dụng Infrastructure as Code.
- Bạn được giao nhiệm vụ cung cấp hạ tầng cần thiết và triển khai một ứng dụng giả lập, cùng với phần mềm hỗ trợ cần thiết.
- Vì network infrastructure sẽ được phát triển bởi một Team riêng biệt, bạn phải tạo các stack độc lập cho network infrastructure và the application
- Việc khởi tạo và destroy hạ tầng cần được tự động hóa để mỗi Team có thể tạo và destroy môi trường thử nghiệm theo nhu cầu.
Project Requirements
Infrastructure Diagram
Bạn sẽ cần tạo một infrastructure diagram bằng một công cụ mà bạn chọn, với tất cả các tài nguyên AWS cần thiết cho giải pháp của bạn. Các tài nguyên mà chúng tôi mong đợi sẽ thấy trong sơ đồ bao gồm:
- Network resources:
- VPC
- Subnets
- Internet Gateway
- NAT Gateways
- EC2 resources:
- Autoscaling group with EC2 instances
- Load Balancer
- Security Groups
- Static Content:
- S3 bucket
Sử dụng các mũi tên để bao gồm bất kỳ mối quan hệ liên quan nào giữa các tài nguyên. Bạn có thể bỏ qua các nhãn tên cho bất kỳ resource icon nào mà bạn cho là phù hợp, miễn là sơ đồ vẫn rõ ràng và không mơ hồ.
Network and Servers Configuration
Bạn sẽ cần tạo networking infrastructure cho giải pháp của mình, bao gồm một new VPC và 4 subnets: 2 public và 2 private, tuân theo high availability best practices.
Các yêu cầu cụ thể:
- Networking infrastructure
- Tạo một new VPC.
- Tạo 4 subnets: 2 public và 2 private
- Sử dụng parameters JSON file để truyền CIDR blocks cho VPC và các subnets.
- Internet Gateway:
- Attach Internet Gateway và NAT Gateways để cung cấp quyền truy cập internet.
- Autoscaling Group:
- Sử dụng Launch Templates để tạo một Autoscaling Group cho các application server của bạn.
- Triển khai bốn server, với 2 server ở mỗi private subnet.
- Sử dụng loại type t2.micro để đáp ứng yêu cầu CPU và RAM.
- Hệ điều hành sử dụng là Ubuntu 22.
- Load Balancer:
- Ứng dụng cần được exposed ra internet thông qua một Application Load Balancer.
Static Content:
- Tạo một S3 bucket bằng CloudFormation để lưu trữ static content, với quyền truy cập public.
- IAM Role của EC2 cần có quyền read and write vào bucket này.
Security Groups
- Cần mở cổng 80 cho các server để giao tiếp với Load Balancer và kiểm tra status của Load Balancer, vì Udagram sử dụng cổng HTTP default.
- Server cũng cần có quyền truy cập Internet không giới hạn để tải xuống và cập nhật phần mềm.
- Load Balancer phải cho phép tất cả public traffic (0.0.0.0/0) on port 80 inbound.
CloudFormation Templates
- Cần cung cấp hai template CloudFormation riêng biệt: một cho networking resources và một cho application resource (server, load balancer, bucket).
- Application Template phải sử dụng outputs từ networking template để xác định VPC và các subnet.
- Một trong những output exports của application stack CloudFormation nên là public URL của LoadBalancer, nên thêm "http://" trước tên DNS của Load Balancer cho tiện lợi.
- Có thể create và destroy toàn bộ hạ tầng bằng cách sử dụng script mà không cần tương tác với giao diện người dùng, có thể sử dụng bất kỳ ngôn ngữ nào (bash, python, v.v.), nhưng phải sử dụng CloudFormation CLI hoặc thư viện được xây dựng trên nó (như boto3).
BONUS (Optional features)
- Tạo một CloudFront distribution để phục vụ static content.
- Thiết lập một bastion host (jump box) để cho phép SSH vào các server trong private subnet. Bastion host này sẽ nằm trong 1 public subnet có inbound cho phép ssh port 22 từ IP nhà bạn, và cần có priate key để truy cập các server khác.
Điều kiện hoàn thành
The Basics
Criteria | Submission Requirements |
---|---|
Parameters | The more the better, but an exaggerated number of parameters can be messy ( say, 10 or more ). 1 or 0 is definitely lacking. |
Infrastructure Diagram | An infrastructure diagram is present with the required network, server, and storage resources. |
Security Groups | Security Groups follow the least privilege principle. |
Resources | This is the mandatory section of the script, we are looking for a LoadBalancer, Launch Template, AutoScaling group a health check, security groups and a Listener and Target Group. |
Outputs | Should have URL here with the Load Balancer DNS Name and “http” in front of it. |
Working Test | If the student provides a URL to verify his work is running properly, it will be a page that says “it works! Udagram, Udacity” |
Scripts | Scripts allow automation of the creation and deletion of infrastructure. |
Load Balancer
Criteria | Submission Requirements |
---|---|
Target Group | The auto-scaling group needs to have a property that associates it with a target group. The Load Balancer will have a Listener rule associated with the same target group |
Health Check and Listener | Port 80 should be used in Security groups, health checks and listeners associated with the load balancer |
Auto-Scaling
Criteria | Submission Requirements |
---|---|
Subnets | Students should be using PRIV-NET ( private subnets ) for their auto-scaling instances |
Machine Specs | The machine should have 10 GB or more of disk and it may use a t2.micro or better. The LaunchTemplate configuration should match the server's requirements. |
Importing Network IDs from Network Stack | Network output values are used as imports in the Udagram stack. |
Bonus
Criteria | Submission Requirements |
---|---|
Output | Any values in the output section are a bonus |
Bastion Host | Any resource of type AWS::EC2::Instance, optional, but nice to have. |
Source code
Các bạn dựa trên những yêu câu trên và hoàn thành bài tập.
Bên dưới là source code của mình sau khi hoàn thành bài tập (các bạn dùng tham khảo)