關於在亞馬遜網路服務 (AWS) 上建立應用程式的教程
亞馬遜雲端服務 (AWS) 是全球最受歡迎的雲端運算平台之一。借助 AWS,您可以建立和運行應用程序,而無需購買實體伺服器、設定伺服器空間或維護自己的基礎架構。本文將引導您使用一種常見方法在 AWS 上建立一個簡單的應用程式:使用運算服務 (EC2) 部署 Web 應用程序,並可選擇使用託管資料庫 (RDS),以及根據需要部署儲存和網域。雖然以下範例具有通用性,但您可以將其應用於多種類型的應用程式。
1. 初步準備:會計與基本概念
在開始之前,請確保您擁有一個 AWS 帳戶。許多 AWS 服務都提供免費套餐(在一定限制範圍內免費),非常適合練習。
你需要理解的一些重要概念:
– 區域:AWS 資料中心位置(例如:Singapore/ap-southeast-1)。選擇距離最近的區域可降低延遲。
– IAM(身分和存取管理):一種存取管理系統。最佳實務:不要將根帳戶用於日常工作。
– VPC(虛擬私有雲):一個運作服務的虛擬網路。
– 安全群組:“防火牆”,用於控制伺服器的傳入/傳出存取。
了解這四件事,就能更容易掌握 AWS 的基礎知識。
2. 建立 IAM 使用者並保護帳戶
安全始終是我們的首要任務。請以 root 使用者登入 AWS 控制台,然後:
1. 開啟 IAM 服務。
2. 建立一個新使用者(例如 `admin-dev`),並勾選「向 AWS 管理主控台提供使用者存取權限」。
3. 授予權限:練習時可以使用 AdministratorAccess(儘管在實際專案中應該更嚴格地限制權限)。
4. 啟用 MFA(多因素身份驗證)以提高安全性。
完成後,從 root 使用者登出,然後使用新建立的 IAM 使用者登入。
3. 確定應用架構
在本教程中,我們將建立一個簡單的架構:
– EC2:執行 Web 應用程式(例如 Node.js/Express、Python Flask 或 PHP)。
– 可選的 RDS:託管的 MySQL/PostgreSQL 資料庫,以便整齊地儲存資料。
– S3(可選):儲存靜態文件,例如映像、文件或備份。
– Route 53(可選):管理網域。
– CloudWatch:基本監控。
如果你是新手,建議先專注於使用 EC2 來運行你的應用程式。
4. 建立 EC2 伺服器
a) 建立實例
1. 登入 EC2 服務。
2. 點選啟動實例。
3. 選擇作業系統,例如 Ubuntu Server 22.04 LTS。
4. 選擇實例類型:免費套餐使用 `t2.micro` 或 `t3.micro`(視情況而定)。
5. 建立或選擇金鑰對(例如,`aws-key.pem`)。請妥善保管`.pem`文件,因為它將用於SSH。
b) 網路和防火牆配置
– 確保執行個體位於預設 VPC 中(僅供練習)。
– 設定安全群組:
– 僅允許從您的 IP 位址(例如「我的 IP」)透過 22 連接埠(SSH)進行連接
– 0.0.0.0/0(公用)的 80 連接埠(HTTP)
– 如果稍後使用 SSL,則連接埠 443 (HTTPS) 來自 `0.0.0.0/0`
注意:向公眾開放 SSH 服務有風險。務必限制 IP 位址。
點擊“啟動”,等待實例運行。
5. 透過 SSH 登入伺服器
在 Windows 系統上,您可以使用 WSL 或 PuTTY。在 macOS/Linux 系統上,您可以直接在終端機中操作。
1. 更改權限密鑰:
“‘重擊
chmod 400 aws-key.pem
“
2. 透過 SSH 連接到伺服器(使用 EC2 的公網 IPv4 位址):
“‘重擊
ssh -i aws-key.pem ubuntu@PUBLIC_IP
“
如果成功,您將連接到 AWS Ubuntu 伺服器。
6. 安裝 Web 伺服器和應用程式運行時
這裡舉一個Node.js應用程式的例子,因為它被廣泛用於現代網路開發。
a) 更新和安裝依賴項
“‘重擊
sudo apt更新&& sudo apt升級-y
sudo apt install -y curl git
“
b) 安裝 Node.js(LTS 版本)
“‘重擊
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash –
sudo apt install -y nodejs
節點-v
npm -v
“
7. 創建一個簡單的應用程式
建立專案資料夾:
“‘重擊
mkdir myapp && cd myapp
npm初始化-y
npm install express
“
建立 `index.js` 檔案:
“`js
const express = require(“express”);
常量應用程式 = Express();
app.get(“/”, (req, res) => {
res.send(“您好!您的應用程式正在 AWS EC2 上運行。”);
});
app.listen(3000, () => console.log(“伺服器正在連接埠 3000 上運行”));
“
運行應用程式:
“‘重擊
節點索引.js
“
嘗試透過瀏覽器存取:
– `http://PUBLIC_IP:3000`
但是,安全群組中的 3000 連接埠目前未開放。您可以:
1)在安全性群組中開啟連接埠 3000,或
2) 使用反向代理(更建議),以便應用程式保留在內部連接埠上,但可以透過連接埠 80/443 存取。
8. 使用 Nginx 作為反向代理(透過 80 連接埠存取)
安裝 Nginx:
“‘重擊
sudo apt install -y nginx
sudo systemctl 啟用 nginx
sudo systemctl 啟動 nginx
“
設定 Nginx:
“‘重擊
sudo nano /etc/nginx/sites-available/myapp
“
配置內容:
“`nginx
服務器{
聽80;
server_name _;
位置/
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
“
啟用配置:
“‘重擊
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl 重新載入 nginx
“
現在訪問:
– `http://PUBLIC_IP/`
該應用程式運行在 3000 端口,但公眾透過 80 端口訪問它。
9. 使用 PM2 持久運行應用程式
為防止 SSH 斷開連線時應用程式崩潰,請使用 PM2:
“‘重擊
sudo npm install -g pm2
pm2 start index.js --name myapp
pm2 save
pm2啟動
“
`pm2 startup` 指令會提供更多說明。執行顯示的命令,即可讓應用程式在伺服器重新啟動時自動執行。
10.(可選)使用 RDS 新增資料庫
如果您的應用程式需要資料庫,RDS 可以簡化此過程,因為 AWS 會管理備份、修補程式和擴充功能。
簡短步驟:
1. 開啟 RDS 服務 → 建立資料庫。
2. 選擇 MySQL 或 PostgreSQL(某些設定可享免費套餐規則)。
3. 設定使用者名稱/密碼。
4. 確保 RDS 執行個體與 EC2 執行個體位於同一個 VPC 中。
5. 將 RDS 安全性群組設定為僅接受來自 EC2 安全群組的連線(不接受來自公共的連線)。
資料庫啟動後,取得 RDS 端點,並使用資料庫驅動程式從您的應用程式連接到它。
11.(可選)啟用帶有 SSL 憑證的 HTTPS
生產環境中必須使用 HTTPS。典型方法:
– 使用網域名稱(例如,從 Route 53 或其他註冊商註冊)。
– 在 EC2 上透過 Let's Encrypt (Certbot) 安裝 SSL。
簡而言之:
“‘重擊
sudo apt install -y certbot python3-certbot-nginx
sudo certbot –nginx
“
依照精靈選擇網域並啟用HTTPS重定向。
12. 監測和成本
AWS 提供 CloudWatch 來檢視 CPU、網路和特定日誌等指標。您還需要監控成本,以免錯失良機。
重要提示:
– 在 CloudWatch 中啟用計費警報(例如,如果費用超過 5 美元則發出警報)。
– 不使用時,請關閉執行個體。
– 刪除未使用的資源(負載平衡器、EBS、彈性 IP、快照),因為它們可能仍會產生費用。
關閉
恭喜!您已經掌握了使用 EC2 在 AWS 上建立應用程式、執行 Web 應用程式、設定 Nginx 反向代理程式以及使用 PM2 實現始終在線的基礎知識。您還了解了其他服務,例如用於資料庫的 RDS、用於儲存的 S3 以及用於安全的 HTTPS 憑證。
如果你想升級,通常接下來的步驟是:
– 使用 CI/CD 實現自動化部署(GitHub Actions + SSH 或 AWS CodeDeploy),
– 使用 Docker 容器和 ECS 或 EKS 等編排工具,
– 使用 Lambda + API Gateway 的無伺服器架構。
如果您願意,請具體說明您正在建立的應用程式類型(Node.js、Laravel、Django、React 等)及其預期用途(演示、生產環境、大規模應用)。我可以根據具體步驟自訂教程。