雲端基礎概念(IaaS / PaaS / SaaS)
是什麼?
雲端服務依照「你管多少 vs 雲端商管多少」分為三種模式:IaaS 提供基礎設施、PaaS 提供開發平台、SaaS 提供完整應用程式。選擇取決於你需要多少控制權和願意承擔多少維運工作。
ℹ️雲端 vs 地端
地端(On-Premises):自己買伺服器、自己建機房、自己維護一切。雲端:用多少付多少(Pay-as-you-go),彈性擴縮(Scale),全球部署。雲端不一定比地端便宜,但在彈性和速度上有巨大優勢。
核心觀念
- IaaS(Infrastructure as a Service):雲端提供 VM、Storage、Network。你負責 OS、Runtime、應用程式。例如 Azure VM、AWS EC2、GCP Compute Engine
- PaaS(Platform as a Service):雲端提供執行平台。你只管應用程式碼和資料。例如 Azure App Service、AWS Elastic Beanstalk、Google App Engine
- SaaS(Software as a Service):雲端提供完整應用。你只管使用和設定。例如 Microsoft 365、Salesforce、GitHub
- Shared Responsibility Model(共責模型):雲端商和你各自負責一部分安全。IaaS 你管最多、SaaS 你管最少
- Region 和 Availability Zone:Region 是地理區域(如 East Asia),AZ 是同一 Region 內的獨立機房。跨 AZ 部署提高可用性
常見誤區
⚠️常見誤區
- 雲端一定比較便宜:小規模或穩定負載的應用,地端 TCO(Total Cost of Ownership)可能更低。雲端的優勢是彈性,不是絕對價格
- 上雲就等於高可用:雲端機器也會掛。你必須自己做多 AZ 部署、健康檢查、自動回復才能達到高可用
- PaaS 沒有 Vendor Lock-in 問題:深度使用特定 PaaS 服務(如 Azure Functions 的 Binding)會讓你很難遷移到其他雲。評估 Lock-in 風險
流程/步驟
評估需求
需要多少控制權?團隊有多少維運能力?
選擇服務模式
需要完全控制用 IaaS,專注開發用 PaaS,現成工具用 SaaS
選擇雲端商
Azure、AWS、GCP 各有優勢,考量價格、生態系、地理位置
設計架構
選擇 Region、規劃 Network、設定 IAM 權限
成本優化
用 Reserved Instance 省錢、設定預算警報、定期清理閒置資源
流程解讀:從需求評估開始,決定要多少控制權。選擇服務模式後挑選雲端商,考量的不只是價格,還有團隊技術棧和雲端商的區域覆蓋。架構設計時注意高可用和安全,上線後持續做成本優化。
程式碼範例
C# 版本
// Azure SDK — 用程式碼管理雲端資源
using Azure.Identity;
using Azure.ResourceManager;
// 認證 — 用 DefaultAzureCredential(支援本機開發和雲端環境)
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);
// 列出所有 Resource Group
var subscription = await armClient.GetDefaultSubscriptionAsync();
await foreach (var rg in subscription.GetResourceGroups())
{
Console.WriteLine($"Resource Group: {rg.Data.Name}, Location: {rg.Data.Location}");
}
// 環境設定 — 不同環境用不同的雲端服務
// appsettings.Development.json → 本機 Docker
// appsettings.Staging.json → Azure App Service (PaaS)
// appsettings.Production.json → Azure App Service + Redis + SQL
builder.Configuration
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddAzureKeyVault(new Uri(vaultUri), credential); // 從 Key Vault 取密鑰TypeScript 版本
// AWS SDK v3 — 管理雲端資源
import { EC2Client, DescribeInstancesCommand } from "@aws-sdk/client-ec2";
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
// 列出 EC2 Instance(IaaS)
const ec2 = new EC2Client({ region: "us-east-1" });
const instances = await ec2.send(new DescribeInstancesCommand({}));
instances.Reservations?.forEach((r) =>
r.Instances?.forEach((i) =>
console.log(`Instance: ${i.InstanceId}, State: ${i.State?.Name}`)
)
);
// 上傳檔案到 S3(Storage)
const s3 = new S3Client({ region: "us-east-1" });
await s3.send(
new PutObjectCommand({
Bucket: "my-app-bucket",
Key: "uploads/photo.jpg",
Body: fileBuffer,
ContentType: "image/jpeg",
})
);Python 版本
# Azure SDK — Python
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
credential = DefaultAzureCredential()
subscription_id = "your-subscription-id"
# 列出 Resource Group
resource_client = ResourceManagementClient(credential, subscription_id)
for rg in resource_client.resource_groups.list():
print(f"Resource Group: {rg.name}, Location: {rg.location}")
# Boto3 — AWS Python SDK
import boto3
# 列出 S3 Bucket
s3 = boto3.client("s3")
response = s3.list_buckets()
for bucket in response["Buckets"]:
print(f"Bucket: {bucket['Name']}")架構圖/概念圖
由上到下,Application Code 永遠是你的責任。PaaS 幫你管 Runtime 和 OS。IaaS 只管實體硬體和虛擬化層,OS 以上都是你的。理解這個分界線是選擇服務模式的關鍵。
實戰補充
Q: 新專案應該選 IaaS 還是 PaaS?
A: 預設選 PaaS,除非有明確的理由需要控制 OS(如特殊驅動程式、效能調校)。PaaS 讓你專注在業務邏輯,維運成本低很多。等到 PaaS 真的限制了你,再考慮降級到 IaaS。
Q: 如何避免 Vendor Lock-in?
A: (1) 核心業務邏輯不要依賴雲端特定 API,用抽象層隔離。(2) 資料格式用標準格式(JSON、Parquet),不用雲端專屬格式。(3) 容器化應用程式,Docker Image 跨雲皆可執行。
Q: 多雲(Multi-Cloud)值得嗎?
A: 大多數中小團隊不值得。多雲增加架構複雜度、團隊學習成本、且無法享受單一雲端的深度整合和量大折扣。除非有法規要求(資料落地)或極高可用需求,否則先專注單一雲端。
理解測驗
🤔 PaaS 和 IaaS 的核心差異是什麼?
🤔 雲端的 Shared Responsibility Model 指的是什麼?
🤔 以下哪個是選擇 PaaS 而非 IaaS 的好理由?
重點整理
💡一句話記住
IaaS 全自己管、PaaS 專注寫 Code、SaaS 開了就用。 口訣:「越懶越 SaaS,越控越 IaaS」
| 模式 | 你管什麼 | 雲端管什麼 | 範例 | |------|---------|-----------|------| | IaaS | OS + Runtime + App | 硬體 + 虛擬化 | Azure VM, EC2 | | PaaS | App + Data | OS + Runtime + 硬體 | App Service, Beanstalk | | SaaS | 設定 + 使用 | 全部 | M365, Salesforce |