🗺️ AWS 服務地圖
運算與容器・EC2・CLF-C02/SAA-C03/SOA-C03/SAP-C02

EC2、Auto Scaling 與 Application Load Balancer:壞一台、湧一波都撐得住

一台 EC2 撐不住午餐尖峰,也禁不起當機。這一頁讓你看懂 ALB 怎麼分流與做健康檢查、Auto Scaling 怎麼換掉壞機器並依負載增減台數,以及兩種健康檢查到底差在哪裡。

故障與健康檢查模擬器 調整政策模擬器 主控台/CLI/CloudFormation 三種做法

💡 先搞懂問題

虛構公司「晴空食品」的線上訂便當網站,一開始只跑在一台 EC2 執行個體(instance)上。平常沒問題,但每天中午十一點半到一點,訂單一湧進來,CPU 就衝到滿、網頁轉圈圈;有一天應用程式卡死,主控台上的 EC2 狀態檢查卻還是綠色的兩個勾,直到客人打電話來才發現;另一次是所在的可用區域(Availability Zone,AZ)出狀況,整個網站停擺。工程師想加開機器,又怕下午沒人時白白付錢。

AWS 對這三個問題的標準解法是一組三件套。啟動範本(launch template)把「要開什麼樣的機器」寫下來:用哪個 AMI(Amazon Machine Image,開機映像)、什麼執行個體類型、套哪些安全群組、開機時跑什麼使用者資料(user data)。EC2 Auto Scaling 依照啟動範本管理一個 Auto Scaling 群組(Auto Scaling group,ASG):你設定最小、所需(desired)與最大容量,它把執行個體分散到多個 AZ,壞掉的換新,負載高時依調整政策(scaling policy)加開、負載低時減少。Application Load Balancer(ALB)站在最前面,用一個 DNS 名稱接住所有請求,再分給目標群組(target group)裡健康的執行個體;它會定時對每台做健康檢查(health check),沒回應的就不再轉送。

新手最常卡在三個地方。第一,以為開了 Auto Scaling 就有高可用,結果群組只放在一個 AZ,AZ 一出事照樣全停。第二,以為 Auto Scaling 會發現「應用程式卡死」,其實它預設只看 EC2 狀態檢查,只能發現機器或作業系統層級的故障;要連應用程式一起看,群組的健康檢查要加上 ELB 健康檢查。第三,以為加開的機器馬上能接客,其實新執行個體要開機、安裝、暖機,所以有暖機時間(instance warmup)與健康檢查寬限期(health check grace period)這些設定。

午餐尖峰的客人 門口帶位員=ALB 看哪個櫃位有空、有沒有回應,再把客人帶過去 大安分店=AZ a 櫃位 1✓ 營業中 櫃位 2✕ 壞了 新櫃位換上場 信義分店=AZ b 櫃位 3✓ 營業中 櫃位 4✓ 營業中 松山分店=AZ c 櫃位 5✓ 營業中 加開櫃位暖機中 尖峰時加開,開好才開始接客 壞的撤掉, 換新的上場 區經理=Auto Scaling 群組 最少 3、所需 5、最多 9 個櫃位 壞了就換、排隊太長就加開 開櫃 SOP 手冊=啟動範本 裝潢=AMI、櫃位大小=執行個體類型 開店前準備清單=使用者資料
三家分店在不同行政區,一區停電,另外兩區照常營業。門口帶位員只把客人帶到有回應的櫃位;區經理照著「最少 3、所需 5、最多 9」的規則排班,壞了換新、尖峰加開,而每個新櫃位都照同一本開櫃 SOP 手冊佈置。

生活比喻:連鎖便當店的帶位員與區經理

晴空食品後來把一家店擴成連鎖:大安、信義、松山三家分店分散在不同行政區,每家有幾個出餐櫃位。客人不必知道去哪一家,只要到門口找帶位員,帶位員看哪個櫃位有空、店員有沒有回應,就把客人帶過去;某個櫃位的店員叫了沒反應,帶位員就先不往那裡帶人。區經理手上有一份排班規則:任何時候最少開 3 個櫃位、最多 9 個,平常維持 5 個;排隊的人多到某個程度就加開,閒下來就收掉;哪個櫃位壞了,撤掉換一個新的。新櫃位一律照總部的開櫃 SOP 手冊佈置:同樣的裝潢、同樣大小的櫃台、開店前跑同一份準備清單。

回到 AWS:分店對應可用區域(AZ),櫃位是 EC2 執行個體,門口帶位員是 Application Load Balancer:它的接聽程式(listener)接住請求,轉給目標群組裡通過健康檢查的執行個體。區經理是 Auto Scaling 群組,「最少 3、所需 5、最多 9」就是最小、所需、最大容量,「排隊太長就加開」是調整政策,例如讓平均 CPU 維持在 50% 的目標追蹤(target tracking)。開櫃 SOP 手冊是啟動範本:裝潢是 AMI、櫃台大小是執行個體類型、準備清單是使用者資料。
連鎖便當店(比喻) AWS 的正式名稱 分店分散在不同行政區 每個出餐櫃位 門口帶位員 叫店員一聲,看有沒有回應 看櫃位的燈有沒有亮 區經理的排班規則 排隊太長就加開 開櫃 SOP 手冊 跨多個 AZ 部署 EC2 執行個體 Application Load Balancer ELB 健康檢查(HTTP) EC2 狀態檢查 Auto Scaling 群組容量 調整政策 啟動範本
第四、五列是這一頁最重要的差別:「叫店員看有沒有回應」是 ALB 對應用程式發出的 HTTP 健康檢查;「看櫃位的燈有沒有亮」是 EC2 狀態檢查,只知道機器有沒有通電、作業系統有沒有回應,看不出店員是不是在發呆。

這個比喻有四個地方和實際不同。第一,真實的帶位員只有一個人,ALB 則在你啟用的每個 AZ 都有節點,對外只給一個 DNS 名稱,背後的 IP 會變動,所以不要把 IP 寫死,Route 53 用別名記錄指過去即可。第二,新櫃位不是「人站上去就能出餐」:新執行個體要開機、跑使用者資料、通過健康檢查,通常要幾分鐘,所以預先把軟體裝進 AMI、設定合理的暖機時間,都能縮短這段空窗。第三,「撤掉壞櫃位」在 AWS 是終止(terminate)執行個體再開一台新的,不是修好舊的,執行個體本機上的資料會跟著消失,所以應用程式要設計成無狀態,工作階段放在 ElastiCache 或 DynamoDB、檔案放在 S3 或 EFS。第四,區經理只管台數,不管要開在哪一區的哪個街口:Auto Scaling 會盡量讓各 AZ 的台數平均,某個 AZ 出事時,自動改在其他 AZ 補足。

以前:一台扛全部 改成:ALB+Auto Scaling 跨 AZ 使用者 AZ a EC2 ×1 公有 IP 直連 當機=停業;AZ 出事=停業 尖峰時 CPU 滿載、排長龍 使用者 ALB(每個 AZ 都有節點) Auto Scaling 群組(2~6 台) AZ a AZ b EC2 EC2 壞一台:ALB 不再轉送、Auto Scaling 換新 尖峰:依調整政策加開,離峰再收
左邊所有雞蛋放在同一個籃子裡;右邊至少兩台、分在兩個 AZ,前面由 ALB 依健康檢查分流。代價是多了負載平衡器的費用與設計工作(應用程式要無狀態),但換來的是單台故障、單一 AZ 故障與尖峰流量都能自動處理。

🎮 互動實驗室一:故障與健康檢查模擬器

先選部署方式、要不要放 ALB,以及 Auto Scaling 群組的健康檢查類型,再按上方紅色按鈕觸發一種故障。畫面會一個階段一個階段播放:ALB 什麼時候停止轉送、Auto Scaling 有沒有發現並換掉不健康的執行個體、服務還活不活著。Auto Scaling 群組的所需容量固定為 3 台,會盡量平均分散到選定的 AZ;時間點是用 ALB 預設健康檢查設定估算的示意值。

部署方式
負載平衡
Auto Scaling 健康檢查類型
使用者請求
    選好設定後,按上方任一個故障按鈕。
    畫面說明:載入中。

    🎮 互動實驗室二:調整政策模擬器

    晴空食品從 10:00 到 13:50 的負載(以「需要幾台跑滿 100% 的執行個體」表示,示意數字),每 10 分鐘一格。選一種調整政策,調整最小、最大、初始所需容量與暖機時間,按「播放」逐格看執行個體數與平均 CPU 怎麼變化。這是為了看懂概念的簡化模型,不是 AWS 實際的演算法:平均 CPU = 負載 ÷ 已上線台數;新執行個體在暖機期間不分擔負載、也不算進平均;目標追蹤在 CPU 高於目標時立刻依比例加開,低於目標 8 成連續 3 格才縮減;步進調整在高於目標 10、30 個百分點時加 1、加 2 台,低於目標 20 個百分點時減 1 台;排程調整在 10:40~12:40 把所需容量設為尖峰值。

    調整政策
    已上線執行個體暖機中平均 CPU(左軸)負載需求(換算成台數)目標 CPU
    畫面說明:載入中。

    🛠️ 操作教學:建立啟動範本、ALB 與 Auto Scaling 群組

    跟著 8 個步驟,在左邊的示意主控台替晴空食品建立啟動範本,再建立 Auto Scaling 群組:選 VPC 與多個 AZ 的子網路、連接到新的 ALB 與目標群組、開啟 ELB 健康檢查、設定容量與目標追蹤政策。VPC 與子網路沿用 VPC 教學頁建立的那一套。你填的名稱、執行個體類型、子網路與容量會即時反映到右邊的 AWS CLI 與 CloudFormation;目前步驟對應的那幾行以黃色底標示。填錯時畫面會說明原因,修正後才能進到下一步。

    示意畫面:簡化重繪,只保留和本主題有關的欄位;實際畫面以 AWS 管理主控台為準。
    ☁ 雲端主控台搜尋服務、功能與文件ap-northeast-1

    自己動手時要注意

    權限:執行的 IAM 身分要能建立啟動範本、負載平衡器與 Auto Scaling 群組,例如 ec2:CreateLaunchTemplate、ec2:RunInstances、elasticloadbalancing:CreateLoadBalancer、elasticloadbalancing:CreateTargetGroup、elasticloadbalancing:CreateListener、autoscaling:CreateAutoScalingGroup、autoscaling:PutScalingPolicy;啟動範本若指定了 IAM 執行個體設定檔,還需要 iam:PassRole。Auto Scaling 會用服務連結角色 AWSServiceRoleForAutoScaling 代你啟動與終止執行個體,第一次使用時自動建立。

    費用:Auto Scaling 本身不另收費,費用來自它開出的執行個體、EBS 磁碟、ALB(依小時加上容量單位計費)與公有 IPv4 位址,以及私有子網路連出去時的 NAT 閘道。最大容量就是你願意付費的上限,練習時把它設小。2025-07-15 以後建立的帳戶採抵用金制的 Free Tier,練習費用會先從抵用金扣;選擇免費方案(Free account plan)的帳戶,抵用金用完或滿 6 個月就會關閉(查證日期 2026-10-07)。

    收尾:先刪 Auto Scaling 群組(加 --force-delete 會一併終止群組裡的執行個體),再刪負載平衡器與目標群組,最後刪啟動範本;如果直接終止執行個體而不刪群組,Auto Scaling 會馬上再開新的補回所需容量。用 CloudFormation 建立的,刪除堆疊就會依相依順序刪除它建立的所有資源。

    # 方法一:CloudFormation 建立的,刪除堆疊即可(無法復原,確認名稱再執行)
    aws cloudformation delete-stack --stack-name qingkong-web
    
    # 方法二:CLI 建立的,依序刪除(ARN 中的 111122223333 等請換成自己的值)
    aws autoscaling delete-auto-scaling-group --auto-scaling-group-name qingkong-web-asg --force-delete
    aws elbv2 delete-load-balancer --load-balancer-arn arn:aws:elasticloadbalancing:ap-northeast-1:111122223333:loadbalancer/app/qingkong-web-alb/0123456789abcdef
    aws elbv2 delete-target-group --target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:111122223333:targetgroup/qingkong-web-tg/0123456789abcdef
    aws ec2 delete-launch-template --launch-template-name qingkong-web-lt

    範例裡沒有任何存取金鑰、密碼或真實的帳戶 ID,111122223333 是 AWS 文件慣用的佔位帳戶。用 CLI 前先以 aws configure sso(IAM Identity Center)或 aws configure 設定好身分,再用 aws sts get-caller-identity 確認目前是哪個帳戶。啟動範本裡也不需要放任何金鑰:執行個體要存取其他 AWS 服務時,用 IAM 執行個體設定檔取得暫時憑證。

    ☁️ 對照 Azure 的做法:Azure 把「範本+群組」合成一個資源:虛擬機器擴展集(Virtual Machine Scale Sets)本身就定義了映像與大小,自動調整規則也掛在擴展集上;AWS 則把機器定義放在啟動範本、台數與政策放在 Auto Scaling 群組,兩者分開管理、各自有版本。負載平衡方面,對應 ALB 的是 Azure Application Gateway,第 4 層則是 Azure Load Balancer;兩邊都靠健康探查決定要不要轉送。完整比較見 Azure 站的 虛擬機器擴展集互動教學。

    📘 原理補完

    啟動範本:把「要開什麼樣的機器」寫下來

    EC2 是 IaaS:AWS 負責實體主機與虛擬化層(Nitro System),作業系統修補、應用程式與安全群組設定是你的責任。啟動範本記錄開一台執行個體需要的參數:AMI、執行個體類型、金鑰對、網路介面與安全群組、IAM 執行個體設定檔、儲存、執行個體中繼資料選項與使用者資料。啟動範本有版本,Auto Scaling 群組可以指定「預設版本」「最新版本($Latest)」或固定某一版,改 AMI 時新增一版,再用執行個體重新整理(instance refresh)逐批換新。舊的啟動組態(launch configuration)功能較少,官方建議改用啟動範本。

    AMI 不要寫死某個 ID:AMI 屬於單一區域,而且會定期發布修補過的新版。AWS 把各作業系統最新的 AMI ID 放在 Systems Manager 的公用參數,例如 Amazon Linux 2023 的 /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64(Arm 版把結尾換成 arm64)。啟動範本的 ImageId 可以直接寫 resolve:ssm: 加參數名稱,CloudFormation 則常用 AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> 型別的參數,或 {{resolve:ssm:…}} 動態參考。要注意架構一致:Graviton 的 t4g、m7g 等類型只能搭 arm64 的 AMI,t3、c7i 等 x86 類型只能搭 x86_64 的 AMI,操作教學會檢查這一點。使用者資料(user data)在第一次開機時執行,原始大小上限 16 KB;要讓新機器更快上線,可以把軟體預先裝進自訂 AMI,使用者資料只做最後的設定。

    SSM 公用參數 …/al2023-ami- kernel-default-x86_64 → 最新的 AMI ID 啟動範本 v1:t3.micro v2($Latest):t3.small AMI、類型、安全群組 IAM 角色、IMDSv2 使用者資料 Auto Scaling 群組 所需容量 3 AZ a AZ b AZ c 每台都照同一版範本 改版後用執行個體 重新整理逐批換新 AMI 不寫死:區域內最新的映像由公用參數提供,範本換區域也能用
    左邊的公用參數永遠指向最新的 Amazon Linux 2023 AMI;中間的啟動範本有版本,群組可以指定 $Latest 或固定版本;右邊的群組依所需容量,把執行個體平均開在多個 AZ。

    Auto Scaling 群組:最小、所需、最大,加上跨 AZ

    Auto Scaling 群組最核心的是三個數字:最小容量是任何時候都不低於的台數,最大容量是費用的上限,所需容量是現在要維持的台數,必須介於兩者之間。調整政策、排程動作或你手動修改,改的都是所需容量;群組再負責把實際台數拉到所需容量。群組綁定 VPC 裡的多個子網路,每個子網路屬於一個 AZ,Auto Scaling 會盡量讓各 AZ 的台數平均;某個 AZ 無法使用時,它改在其他 AZ 啟動執行個體補足所需容量,那個 AZ 恢復後再逐步重新平衡。

    群組會定期檢查每台執行個體的健康狀態,判定不健康的就終止並啟動新的一台,這就是「自我修復」。其他常用功能包括:混合執行個體政策(混用多種類型與 On-Demand、Spot)、生命週期勾點(lifecycle hook,開機或終止前先做事)、暖池(warm pool,預先準備好已初始化的執行個體),以及預設暖機時間(default instance warmup),讓新執行個體在暖機期間不被算進彙整指標。

    所需容量只能在最小與最大之間移動 012345678 最小 2 最大 6 所需 3 調整政策依指標改所需容量 排程動作依時間改三個數字 健康檢查替換不改數字,換掉壞的
    藍色區段是所需容量可以移動的範圍。調整政策要擴展時,最多只能加到最大容量;要縮減時,最少只能減到最小容量。健康檢查替換則不改這三個數字,只把壞的換成新的,所以台數維持不變。

    Application Load Balancer:接聽程式、目標群組與健康檢查

    ALB 在第 7 層運作。接聽程式在某個通訊協定與連接埠(例如 HTTPS 443)等待連線,依規則(路徑、主機名稱、標頭等)決定轉給哪個目標群組;目標群組裡是一組目標(執行個體、IP 或 Lambda 函式),每個目標群組有自己的健康檢查設定。建立 ALB 時至少要選兩個 AZ 的子網路,對外的 ALB 要放在公有子網路,執行個體則可以放在私有子網路,只讓 ALB 的安全群組連進來。ALB 預設開啟跨區域負載平衡(cross-zone load balancing),請求會平均分給所有 AZ 裡健康的目標。

    健康檢查的預設值(instance 與 ip 類型的目標,2026 年 10 月查證):每 30 秒檢查一次、逾時 5 秒、連續 2 次失敗判定為不健康、連續 5 次成功判定為健康、成功代碼 200、路徑 /。不健康的目標會被移出輪替;如果一個目標群組裡的目標全部不健康,ALB 會「失效開放」(fail open),把請求送給所有目標,避免完全不轉送。實務上建議另外寫一個輕量的 /health 路徑,檢查應用程式真正能服務,而不只是網頁伺服器有開。

    使用者 ALB 接聽程式 :80 規則 /api/* 預設規則 目標群組 api-tg AZ a ✓ AZ b ✓ 目標群組 web-tg AZ a ✓ AZ b ✓ AZ b ✕ 移出 健康檢查:每 30 秒 GET /health 連續 2 次失敗移出、連續 5 次成功加回 ALB 至少橫跨兩個 AZ 的子網路,對外只給一個 DNS 名稱 (健康檢查數字為預設值,可以在目標群組上調整)
    接聽程式接住請求,規則依路徑決定目標群組;每個目標群組各自做健康檢查,只把請求送給健康的目標。右下那台被移出輪替後,ALB 只是不再轉送給它;要把它換掉,靠的是 Auto Scaling。

    兩種健康檢查:看「燈有沒有亮」還是看「有沒有回應」

    Auto Scaling 群組預設只用 EC2 狀態檢查:執行個體不在 running 狀態,或系統狀態檢查(AWS 端的主機、電力、網路)、執行個體狀態檢查(作業系統、網路設定)失敗時,才判定不健康。應用程式卡死、記憶體洩漏讓網頁一直逾時、網頁伺服器程序掛了,這些情況作業系統還活著,EC2 狀態檢查照樣通過。把群組的健康檢查類型加上 ELB 之後,只要目標在 ALB 的目標群組裡被判定不健康,Auto Scaling 也會判定它不健康並替換。群組放在負載平衡器後面時,官方建議開啟 ELB 健康檢查。

    開啟 ELB 健康檢查時一定要搭配健康檢查寬限期:新執行個體開機、跑使用者資料需要時間,寬限期內 Auto Scaling 不會因為 ELB 檢查失敗就終止它(EC2 狀態檢查則不受寬限期影響)。用主控台建立群組時寬限期預設 300 秒,用 CLI 或 SDK 建立時預設是 0 秒,也就是關閉寬限期,所以操作教學的 CLI 會明確寫 --health-check-grace-period 300。寬限期設得太短,新機器還沒準備好就被判不健康,會陷入「開了又砍、砍了又開」的循環。

    AWS 的實體主機、電力、網路系統狀態檢查 執行個體的作業系統執行個體狀態檢查 應用程式(網頁、API)卡死時:作業系統仍正常 EC2 狀態檢查 (Auto Scaling 預設) 卡死時:✓ 通過 ELB 健康檢查 GET /health → 200? 卡死時:✕ 失敗 群組健康檢查類型加上 ELB,才看得到應用程式這一層 兩種都開時,任一種判定不健康,Auto Scaling 就替換這台
    EC2 狀態檢查看的是下面兩層:主機與作業系統。應用程式卡死時這兩層都正常,所以只有 ALB 的 HTTP 健康檢查會發現。這就是實驗室一「應用程式卡死」情境裡,健康檢查類型選 EC2 時 ALB 已經不轉送,壞機器卻一直沒被換掉的原因。
    0 秒卡死 約 60 秒ALB 判定不健康停止轉送 接著Auto Scaling 終止並啟動新的一台 開機+寬限期跑使用者資料寬限期內不會被砍 再約 150 秒連續 5 次成功開始接流量 60 秒 = 30 秒間隔 × 連續 2 次失敗;150 秒 = 30 秒間隔 × 連續 5 次成功 依預設值估算的示意時間,實際長短取決於開機與應用程式啟動速度
    從卡死到新機器接客,中間有好幾段等待。這段時間裡服務能不能撐住,取決於其他執行個體夠不夠分擔,這也是最小容量至少設 2、而且分散在兩個以上 AZ 的理由。縮短空窗的方法包括:把軟體預先烤進 AMI、調整健康檢查間隔與門檻、使用暖池。

    調整政策:目標追蹤、步進、排程與預測

    目標追蹤像恆溫器:你指定一個指標與目標值(例如平均 CPU 50%),Auto Scaling 自動建立並管理 CloudWatch 警示,依比例加減台數讓指標接近目標;擴展時很積極,縮減時較保守,暖機中的執行個體不算進彙整指標。預先定義的指標有四個:ASGAverageCPUUtilization、ASGAverageNetworkIn、ASGAverageNetworkOut、ALBRequestCountPerTarget。指標要能隨台數等比例變化才適合,例如「每台的請求數」可以,「整個負載平衡器的總請求數」或「延遲」就不適合。官方最推薦先用目標追蹤。

    步進調整依 CloudWatch 警示超過門檻的「幅度」分段調整,例如超過 60% 加 1 台、超過 80% 加 2 台,適合需要精細控制的情境;簡單調整一次只做一個調整、中間有冷卻時間,是較舊的做法。排程調整在已知的時間改最小、最大或所需容量,例如每個工作日早上 9 點前加開;預測調整依過去的流量模式預測並提前擴展,適合有明顯週期、而且開機需要較長時間的工作負載。這些方式可以同時使用:排程或預測先把基本台數準備好,目標追蹤再處理臨時的波動。

    目標追蹤:像恆溫器 步進調整:依幅度分段 目標 50% 高於目標→依比例加 回到目標附近就穩住 只要設一個目標值,警示自動建立 80% 以上+2 台 60%~80%+1 台 30%~60%不動 30% 以下-1 台 門檻與調整量要自己設計(數字為示意)
    目標追蹤只要說「我要 50%」,加多少、減多少由系統計算;步進調整則要自己決定每一段門檻和調整量,彈性大但設計與維護成本也高。實驗室二的步進政策就是照右圖的分段,只是門檻會跟著你設定的目標值移動。
    調整方式怎麼運作適合要注意
    目標追蹤維持某個指標接近目標值,警示自動管理大多數網站與 API,指標隨台數等比例變化選對指標;搭配暖機時間
    步進調整依警示超標幅度分段加減需要精細控制每一段的反應門檻、調整量要自己設計與維護
    簡單調整警示觸發時調整一次,冷卻後才能再調舊有設定反應慢,新設計優先用前兩種
    排程調整在指定時間改最小、最大、所需容量已知的固定尖峰,例如上班時間、活動開賣時區與提前量要算好
    預測調整依歷史模式預測並提前擴展有每日或每週週期、開機時間長需要累積歷史資料
    題目要的 是什麼? 指標維持在固定值例如平均 CPU 50% 依超標幅度分段反應超越越多、加越多 尖峰時間事先知道每天 11:30、活動開賣 有週期、開機慢要提前準備好容量 應用程式卡死要被換掉EC2 狀態檢查看不出來 目標追蹤 步進調整 排程調整 預測調整 加上 ELB 檢查
    題目常把幾種調整方式放在同一組選項裡。看到「維持某個百分比」選目標追蹤;看到「每天固定時間」選排程;看到「依過去模式提前」選預測;看到「應用程式沒回應卻沒被換掉」,答案通常是把群組的健康檢查類型加上 ELB。

    判斷步驟

    1. 先確認要防的是什麼:單台故障、應用程式卡死、單一 AZ 故障,還是流量尖峰。
    2. 高可用:Auto Scaling 群組至少選兩個 AZ 的子網路,最小容量至少 2;前面放 ALB,ALB 也要橫跨至少兩個 AZ。
    3. 健康檢查:群組放在 ALB 後面時,健康檢查類型加上 ELB,並設定足夠的健康檢查寬限期;目標群組的健康檢查路徑要真的反映應用程式狀態。
    4. 擴縮:預設先用目標追蹤;已知時段加排程或預測;設定合理的暖機時間,最大容量就是費用上限。
    5. 應用程式要無狀態:工作階段與檔案放到 ElastiCache、DynamoDB、S3 或 EFS,執行個體隨時可以被終止與替換。

    容易考錯的地方

    Auto Scaling 不等於高可用:群組只放一個 AZ,AZ 故障時沒有地方可以補。題目問「最能提高可用性」時,答案通常是「跨多個 AZ 的 Auto Scaling 群組+ALB」,而不是「換更大的執行個體」。

    應用程式卡死沒被換掉:群組預設只用 EC2 狀態檢查,要把健康檢查類型加上 ELB。干擾選項常寫「開啟 EC2 詳細監控」或「加大執行個體」,都解決不了。

    ALB 與 Auto Scaling 的分工:ALB 負責「不轉送給不健康的目標」,Auto Scaling 負責「換掉不健康的執行個體、增減台數」。只有 ALB 沒有 Auto Scaling,壞機器會一直留著;只有 Auto Scaling 沒有 ALB,新機器換了 IP,使用者也連不到。

    調整政策的關鍵字:「維持在某個百分比」是目標追蹤;「固定時間」是排程;「依歷史提前」是預測;「依超標幅度分段」是步進。要擴展 ECS、DynamoDB 等非 EC2 資源,則是 Application Auto Scaling。

    寬限期與暖機:健康檢查寬限期太短,新機器還沒準備好就被砍;暖機時間太短,彙整指標會被剛開機的機器拉低或拉高,造成過度擴縮。

    相關考試:CLF-C02 的雲端技術領域要求認得自動擴展與負載平衡;SAA-C03 的 in-scope 清單列出 Amazon EC2、Amazon EC2 Auto Scaling 與 Elastic Load Balancing,是高可用架構題的常客;SOA-C03 列出 AWS Auto Scaling 與 Elastic Load Balancing;SAP-C02(2026-11-17 起換成 SAP-C03)、DOP-C02 會考更大規模的部署與部署策略。

    ✅ 自我檢測

    以下 6 題都是原創題,選完會立即顯示對錯與解析,全部作答後會出現總分。目前得分:0 / 6