# 【AWS】Day 6：運算服務 - Amazon EC2（虛擬機服務）

在前幾篇中，我們介紹了各種運算服務的分類方式，像是 IaaS、PaaS、FaaS 等等。

今天就從 AWS 中最經典、最基礎的 IaaS 服務開始介紹 —— **Amazon EC2（Elastic Compute Cloud）**

這個服務幾乎是所有 AWS 使用者早期接觸雲端的第一站，也是許多架構的基石。

---

## 什麼是 EC2？

EC2 就是一台 **雲端的虛擬機器（Virtual Machine）**。

可以想像成你在資料中心租了一台電腦，你可以選擇要用 Linux 還是 Windows，要幾核心、幾 GB 記憶體，要多大的硬碟，要不要固定 IP……這些你都可以自己決定。

建立 EC2 之後，就能連進去安裝軟體、跑應用、開 Web Server、跑排程、架設資料庫……什麼都行。

---

## EC2 的核心概念

### 1️⃣ Instance（執行個體）

每一台 EC2 就是一個 Instance，你可以開很多個、關掉它、重新啟動，甚至做 snapshot 備份。

### 2️⃣ AMI（Amazon Machine Image）

AMI 是一種映像檔，可以理解成 EC2 的「作業系統＋預設環境」模板。  
常見的 AMI 包含：

- Amazon Linux
- Ubuntu
- Debian
- Windows Server
- 自己製作的 AMI

### 3️⃣ Instance Type（機型）

AWS 提供各種 instance type 給你選擇，依照用途分類，例如：

<table id="bkmrk-%E9%A1%9E%E5%9E%8B%E4%BB%A3%E8%99%9F-%E7%94%A8%E9%80%94-%E4%BB%A3%E8%A1%A8%E5%9E%8B%E8%99%9F-t-%E7%B3%BB%E5%88%97-%E4%B8%80%E8%88%AC"><thead><tr><th>類型代號</th><th>用途</th><th>代表型號</th></tr></thead><tbody><tr><td>t 系列</td><td>一般型、低成本</td><td>t3.micro、t4g.nano</td></tr><tr><td>m 系列</td><td>平衡型</td><td>m6i.large</td></tr><tr><td>c 系列</td><td>計算密集型</td><td>c7g.medium</td></tr><tr><td>r 系列</td><td>記憶體密集型</td><td>r6g.large</td></tr><tr><td>g 系列</td><td>GPU 運算型</td><td>g5.xlarge</td></tr></tbody></table>

---

## 建立 EC2 的流程簡介

1. **選擇 AMI**：決定你要用哪一種作業系統
2. **選擇 Instance Type**：例如 `t3.micro`（免費方案支援）
3. **設定 Key Pair**：建立 SSH 金鑰，用來連線 EC2
4. **設定 Network（VPC）與 Security Group（防火牆）**
5. **設定磁碟（EBS）大小**
6. **啟動 EC2！**

完成後你會拿到一組 Public IP，就可以用 SSH 連進去使用了。

---

## 價格與計費方式

EC2 的價格組成會根據幾個項目決定：

<table id="bkmrk-%E9%A0%85%E7%9B%AE-%E8%AA%AA%E6%98%8E-instance-type-"><thead><tr><th>項目</th><th>說明</th></tr></thead><tbody><tr><td>Instance Type</td><td>不同型號每小時價格不同</td></tr><tr><td>計費模式</td><td>On-Demand / Spot / Reserved</td></tr><tr><td>使用時間</td><td>每秒或每小時計費</td></tr><tr><td>是否有附加儲存</td><td>EBS 空間也另外計費</td></tr><tr><td>傳輸流量</td><td>Outbound（出站）會收費</td></tr></tbody></table>

---

## EC2 的使用情境

EC2 適合用在哪些情況呢？以下列舉幾個常見案例：

- 需要完整控制環境與作業系統
- 要安裝自訂軟體或中介軟體（middleware）
- 部署高效能或特殊架構的應用（如容器主機、資料庫伺服器）
- 架設 CI/CD 服務、自架 Git、Redis、RabbitMQ
- 建立可手動調整、監控的後台系統

---

## 小結

EC2 是 AWS 中最基礎的運算服務，具備極大的彈性與控制權：

- 可以自由選擇作業系統與機型
- 適合習慣傳統主機操作的團隊
- 計費彈性、整合其他 AWS 服務方便

---

# EC2 進階篇：實戰操作與進階應用

在上一篇我們介紹了 EC2 的基本觀念與用途，這篇會帶大家進一步實作：

- 如何登入 EC2？
- 如何開放 port（像是 80、443）讓外部可以訪問？
- 怎麼設定開機自動執行程式？
- EC2 如何實作自動擴展（Auto Scaling）？

---

## 一、登入 EC2 實例（Linux）

當你啟動好一台 EC2 Linux 實例後，登入方式如下：

### ✅ 準備工作

- 確保當初有建立 Key Pair，下載了 `.pem` 檔案
- 開啟 Security Group 的 TCP port 22（SSH）
- 有 Public IP 或 Public DNS（可在 EC2 頁面查看）

### 💻 登入指令

```bash
chmod 400 my-key.pem
ssh -i my-key.pem ec2-user@<你的 Public IP>

```

> 不同 AMI 登入帳號不同：
> 
> - Amazon Linux 用 `ec2-user`
> - Ubuntu 用 `ubuntu`
> - Debian 用 `admin` 或 `debian`

---

## 二、開放 HTTP / HTTPS 連線

如果你要讓外部可以訪問你的 EC2，例如跑 Web server，需要設定 **Security Group**。

### ✅ 開啟常見 port：

- HTTP：80
- HTTPS：443
- 自定服務：你用什麼就開什麼（例如 3000、8080）

### 操作步驟：

1. 到 EC2 頁面點選「Security Group」
2. 找到你 EC2 所使用的 security group
3. 編輯「Inbound rules」
4. 新增：
    
    
    - 類型：HTTP、HTTPS
    - 來源：0.0.0.0/0（所有人都可以連）或限制特定 IP

---

## 三、設定開機後自動執行程式（User Data）

你可以在建立 EC2 時加入 **User Data**，當機器第一次啟動時會自動執行這段腳本。

### 範例：自動安裝 Nginx 並啟動 Web Server

```bash
#!/bin/bash
yum update -y
yum install -y nginx
systemctl enable nginx
systemctl start nginx
echo "Hello from EC2!" > /usr/share/nginx/html/index.html

```

> ✅ 注意：User Data 只能在 EC2 **首次啟動時執行一次**。  
> ✅ 如果想修改已存在的 User Data，需要重新建立新的 EC2 或自己寫開機指令。

---

## 四、設定 Auto Scaling Group（自動擴展）

Auto Scaling 是 EC2 強大的特點之一，可以根據負載自動增減 EC2 數量。

### 使用場景：

- 使用者流量增加，自動開新機器
- 流量低時自動縮減節省成本
- 保證服務有固定最少機器數（High Availability）

### 建立流程簡略：

1. 建立一個 Launch Template（定義要開什麼樣的 EC2）
2. 設定 Auto Scaling Group：
    
    
    - 定義最小 / 最大 EC2 數量
    - 設定 Scaling Policy（例如 CPU &gt; 60% 時新增 1 台）
3. 可結合 Load Balancer，讓所有流量平均分配到所有 EC2 上

---

## 五、備份與還原

EC2 本身不會自動備份，要使用以下方式保護資料：

### 快照（Snapshot）

- 可對 EBS 磁碟建立快照
- 快照可以還原成新的 EBS 磁碟掛回 EC2

### 建立 AMI

- 對目前 EC2 建立 AMI 映像檔
- 可隨時用這個 AMI 快速建立新機器（帶所有設定）

---

## 小結

這篇進階實作帶你實際操作 EC2，包括：

- 使用 SSH 登入實例
- 開放外部連線 port
- 利用 User Data 自動化設定
- 設定 Auto Scaling Group 自動擴展
- 建立快照與 AMI 做備份

EC2 的強大在於它的彈性與可控性，從個人專案到大型分散式系統，都能發揮作用。

---

下一篇，我們將來看看如果你不想自己處理作業系統、網路設定、磁碟掛載這些瑣事時，AWS 有沒有更輕鬆的方案？  
**Day 7：Elastic Beanstalk - 全自動部署的神隊友！**，我們不見不散！