Hướng dẫn tạo ứng dụng trên Amazon Web Services (AWS)
Amazon Web Services (AWS) là một trong những nền tảng điện toán đám mây phổ biến nhất thế giới. Với AWS, bạn có thể xây dựng và chạy các ứng dụng mà không cần mua máy chủ vật lý, thiết lập không gian máy chủ hoặc duy trì cơ sở hạ tầng riêng. Bài viết này sẽ hướng dẫn bạn tạo một ứng dụng đơn giản trên AWS bằng cách tiếp cận phổ biến: triển khai ứng dụng web sử dụng dịch vụ điện toán (EC2), cơ sở dữ liệu được quản lý (RDS) như một tùy chọn, và lưu trữ cùng tên miền nếu cần. Mặc dù ví dụ sau đây mang tính tổng quát, bạn có thể áp dụng nó cho nhiều loại ứng dụng khác nhau.
-
1. Chuẩn bị ban đầu: Kế toán và các khái niệm cơ bản
Trước khi bắt đầu, hãy đảm bảo bạn đã có tài khoản AWS. Nhiều dịch vụ AWS cung cấp gói miễn phí (miễn phí trong một số giới hạn nhất định), rất phù hợp để thực hành.
Một số khái niệm quan trọng bạn cần hiểu:
– Khu vực: Vị trí trung tâm dữ liệu AWS (ví dụ: Singapore/ap-southeast-1). Chọn khu vực gần nhất để có độ trễ thấp.
– IAM (Quản lý danh tính và quyền truy cập): một hệ thống quản lý quyền truy cập. Thực tiễn tốt nhất: không sử dụng tài khoản root cho công việc hàng ngày.
– VPC (Virtual Private Cloud): một mạng ảo nơi các dịch vụ của bạn hoạt động.
– Nhóm bảo mật: “tường lửa” để điều chỉnh quyền truy cập đến/đi từ máy chủ.
Hiểu rõ bốn điều này sẽ giúp bạn dễ dàng nắm bắt những kiến thức cơ bản về AWS hơn.
-
2. Tạo người dùng IAM và bảo mật tài khoản
Bảo mật luôn là ưu tiên hàng đầu của chúng tôi. Hãy đăng nhập vào Bảng điều khiển AWS với quyền root, sau đó:
1. Mở dịch vụ IAM.
2. Tạo người dùng mới (ví dụ: `admin-dev`) và chọn "Cung cấp quyền truy cập người dùng vào Bảng điều khiển quản lý AWS".
3. Cấp quyền: để thực hành, bạn có thể sử dụng AdministratorAccess (mặc dù trong các dự án thực tế, quyền này nên được giới hạn hơn).
4. Kích hoạt xác thực đa yếu tố (MFA) để tăng cường bảo mật.
Sau khi hoàn tất, hãy đăng xuất khỏi tài khoản root và đăng nhập bằng người dùng IAM mới được tạo.
-
3. Xác định kiến trúc ứng dụng
Trong hướng dẫn này, chúng ta sẽ xây dựng một kiến trúc đơn giản:
– EC2: dùng để chạy các ứng dụng web (ví dụ: Node.js/Express, Python Flask hoặc PHP).
– RDS tùy chọn: cơ sở dữ liệu MySQL/PostgreSQL được quản lý, giúp dữ liệu được lưu trữ gọn gàng.
– S3 (tùy chọn): lưu trữ các tệp tĩnh như hình ảnh, tài liệu hoặc bản sao lưu.
– Tuyến đường 53 (tùy chọn): quản lý tên miền.
– CloudWatch: công cụ giám sát cơ bản.
Nếu bạn mới bắt đầu, hãy tập trung vào EC2 để chạy các ứng dụng của mình trước tiên.
-
4. Tạo máy chủ EC2
a) Tạo một thể hiện
1. Đăng nhập vào dịch vụ EC2.
2. Nhấp vào Khởi chạy phiên bản.
3. Chọn hệ điều hành, ví dụ: Ubuntu Server 22.04 LTS.
4. Chọn loại phiên bản: đối với Gói Miễn phí, hãy sử dụng `t2.micro` hoặc `t3.micro` (tùy thuộc vào tình trạng sẵn có).
5. Tạo hoặc chọn một cặp khóa (ví dụ: `aws-key.pem`). Hãy giữ tệp `.pem` an toàn vì nó sẽ được sử dụng cho SSH.
b) Cấu hình mạng và tường lửa
– Hãy đảm bảo rằng máy ảo nằm trong VPC mặc định (chỉ để thực hành).
– Thiết lập Nhóm bảo mật:
– Cổng 22 (SSH) chỉ khả dụng từ địa chỉ IP của bạn (ví dụ: `Địa chỉ IP của tôi`)
– Cổng 80 (HTTP) của `0.0.0.0/0` (công cộng)
– Cổng 443 (HTTPS) từ `0.0.0.0/0` nếu sau này sử dụng SSL
Lưu ý: Mở SSH cho công chúng rất rủi ro. Luôn luôn giới hạn địa chỉ IP.
Nhấp vào Khởi chạy và đợi cho đến khi chương trình chạy xong.
-
5. Đăng nhập vào máy chủ qua SSH
Trên Windows, bạn có thể sử dụng WSL hoặc PuTTY. Trên macOS/Linux, bạn có thể thực hiện trực tiếp từ terminal.
1. Thay đổi khóa quyền:
“`đánh đập
chmod 400 aws-key.pem
“
2. Kết nối SSH đến máy chủ (sử dụng địa chỉ IPv4 công cộng từ EC2):
“`đánh đập
ssh -i aws-key.pem ubuntu@PUBLIC_IP
“
Nếu thành công, bạn đang truy cập máy chủ AWS Ubuntu.
-
6. Cài đặt máy chủ web và môi trường chạy ứng dụng
Dưới đây là một ví dụ về ứng dụng Node.js, một ngôn ngữ lập trình được sử dụng rộng rãi trong phát triển web hiện đại.
a) Cập nhật và cài đặt các phần phụ thuộc
“`đánh đập
cập nhật sudo apt && sudo apt nâng cấp -y
cài đặt sudo apt -y cuộn git
“
b) Cài đặt Node.js (phiên bản LTS)
“`đánh đập
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash –
sudo apt cài đặt -y nodejs
nút -v
npm -v
“
-
7. Tạo một ứng dụng đơn giản
Tạo thư mục dự án:
“`đánh đập
mkdir myapp && cd myapp
npm init -y
npm cài đặt nhanh
“
Tạo một tệp `index.js`:
“`js
const express = require(“express”);
ứng dụng const = express();
app.get(“/”, (req, res) => {
res.send(“Xin chào! Ứng dụng của bạn đang chạy trên AWS EC2.”);
});
app.listen(3000, () => console.log(“Máy chủ đang chạy trên cổng 3000”));
“
Chạy ứng dụng:
“`đánh đập
nút index.js
“
Hãy thử truy cập từ trình duyệt:
– `http://PUBLIC_IP:3000`
Tuy nhiên, cổng 3000 hiện không được mở trong Nhóm bảo mật. Bạn có thể:
1) Mở cổng 3000 trong Nhóm bảo mật, hoặc
2) Sử dụng proxy ngược (khuyến nghị hơn) để ứng dụng vẫn chạy trên cổng nội bộ nhưng có thể truy cập được qua cổng 80/443.
-
8. Sử dụng Nginx làm máy chủ proxy ngược (Truy cập qua cổng 80)
Cài đặt Nginx:
“`đánh đập
sudo apt install -y nginx
sudo systemctl kích hoạt nginx
sudo systemctl start nginx
“
Thiết lập cấu hình Nginx:
“`đánh đập
sudo nano /etc/nginx/sites-available/myapp
“
Nội dung cấu hình:
“`nginx
máy chủ {
nghe 80;
tên máy chủ _;
vị trí /
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Nâng cấp $ http_upgrade;
proxy_set_header Kết nối 'nâng cấp';
proxy_set_header Máy chủ $ host;
proxy_cache_bypass $http_upgrade;
}
}
“
Cho phép cấu hình:
“`đánh đập
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx-t
Sudo systemctl tải lại nginx
“
Giờ đây bạn có thể truy cập:
– `http://PUBLIC_IP/`
Ứng dụng chạy trên cổng 3000 nhưng người dùng truy cập thông qua cổng 80.
-
9. Chạy ứng dụng liên tục với PM2
Để ngăn ứng dụng bị lỗi khi ngắt kết nối SSH, hãy sử dụng PM2:
“`đánh đập
cài đặt sudo npm -g pm2
pm2 start index.js –name myapp
lưu lại chiều 2
khởi động chiều 2
“
Lệnh `pm2 startup` sẽ cung cấp thêm hướng dẫn. Chạy lệnh được hiển thị để ứng dụng tự động chạy khi máy chủ khởi động lại.
-
10. (Tùy chọn) Thêm cơ sở dữ liệu với RDS
Nếu ứng dụng của bạn yêu cầu cơ sở dữ liệu, RDS sẽ giúp bạn dễ dàng hơn vì AWS quản lý việc sao lưu, vá lỗi và mở rộng quy mô.
Các bước ngắn gọn:
1. Mở dịch vụ RDS → Tạo cơ sở dữ liệu.
2. Chọn MySQL hoặc PostgreSQL (Quy tắc của gói miễn phí có sẵn trên một số cấu hình nhất định).
3. Thiết lập tên người dùng/mật khẩu.
4. Hãy đảm bảo rằng phiên bản RDS nằm trong cùng một VPC với EC2.
5. Thiết lập Nhóm bảo mật RDS chỉ chấp nhận kết nối từ Nhóm bảo mật EC2 (không chấp nhận kết nối từ bên ngoài).
Sau khi cơ sở dữ liệu hoạt động, hãy lấy điểm cuối RDS và kết nối với nó từ ứng dụng của bạn bằng trình điều khiển cơ sở dữ liệu.
-
11. (Tùy chọn) Bật HTTPS với chứng chỉ SSL
Đối với môi trường sản xuất, HTTPS là bắt buộc. Phương pháp thông thường:
– Sử dụng tên miền (ví dụ: từ Route 53 hoặc nhà đăng ký tên miền khác).
– Cài đặt SSL thông qua Let's Encrypt (Certbot) trên EC2.
Tóm lại:
“`đánh đập
sudo apt install -y certbot python3-certbot-nginx
chứng chỉ sudo –nginx
“
Hãy làm theo hướng dẫn để chọn tên miền và bật chuyển hướng HTTPS.
-
12. Giám sát và Chi phí
AWS cung cấp CloudWatch để xem các chỉ số như CPU, mạng và nhật ký cụ thể. Bạn cũng nên theo dõi chi phí để tránh bỏ lỡ cơ hội nào đó.
Lời khuyên quan trọng:
– Kích hoạt cảnh báo thanh toán trong CloudWatch (ví dụ: cảnh báo nếu phí vượt quá 5 đô la).
– Tắt tiến trình khi không sử dụng.
– Loại bỏ các tài nguyên không sử dụng (bộ cân bằng tải, EBS, địa chỉ IP tĩnh, ảnh chụp nhanh) vì chúng vẫn có thể phát sinh chi phí.
-
Đóng cửa
Chúc mừng! Bạn đã học được những kiến thức cơ bản về xây dựng ứng dụng trên AWS bằng EC2, chạy ứng dụng web, thiết lập máy chủ proxy ngược Nginx và đảm bảo ứng dụng luôn hoạt động với PM2. Bạn cũng đã có cái nhìn tổng quan về các dịch vụ bổ sung như RDS cho cơ sở dữ liệu, S3 cho lưu trữ và chứng chỉ HTTPS để bảo mật.
Nếu bạn muốn thăng cấp, các bước tiếp theo thường là:
– Triển khai tự động với CI/CD (GitHub Actions + SSH hoặc AWS CodeDeploy),
– Sử dụng container với Docker và các hệ thống điều phối như ECS hoặc EKS,
– Sử dụng kiến trúc serverless với Lambda + API Gateway.
Nếu bạn muốn, vui lòng cho biết loại ứng dụng bạn đang xây dựng (Node.js, Laravel, Django, React, v.v.) và mục đích sử dụng (demo, production, large-scale). Tôi có thể tùy chỉnh hướng dẫn với các bước cụ thể hơn.