# 第二單元:雲端中的運算與 EC2 基礎 > AWS Certified Cloud Practitioner(CLF-C02) > 這是[AWS Cloud Practitioner Essentials](https://explore.skillbuilder.aws/learn/course/internal/view/elearning/134/aws-cloud-practitioner-essentials)的課程筆記 ## 學習目標 - 說明 Amazon EC2 的基本優勢 - 識別不同的 EC2 執行個體類型與計費選項 - 瞭解 EC2 Auto Scaling 與負載平衡器的運作方式 - 認識 SNS 和 SQS 的差異 - 瞭解容器與無伺服器運算選項 --- ## 一、什麼是 Amazon EC2? Amazon EC2(Elastic Compute Cloud)是 AWS 提供的核心服務之一,讓使用者可以在雲端中啟動虛擬伺服器(稱為執行個體),以便部署網站、應用程式或進行各種運算任務。 ### EC2 的優點: | 優勢 | 說明 | | -------- | ------------------------------ | | 彈性佈建 | 幾分鐘內快速啟動虛擬伺服器 | | 成本效益 | 採取按需計費模型,用多少付多少 | | 靈活控制 | 使用者可選擇作業系統、網路配置、軟體套件等 | | 垂直擴展/縮減 | 可依應用負載調整 CPU、記憶體 | | 多租用戶安全隔離 | EC2 執行個體彼此獨立,由 Hypervisor 管理隔離 | | 終止即停止付費 | 停止或刪除執行個體後不再計費 | --- ## 二、EC2 的三步驟運作方式 | 步驟 | 說明 | | -- | ------------------------------------------------ | | 啟動 | 選擇映像檔與執行個體類型(AMI、Instance Type)、設定安全組與網路後,啟動執行個體 | | 連接 | 可透過 SSH(Linux)或 RDP(Windows)等方式連線進入虛擬伺服器 | | 使用 | 安裝應用程式、新增儲存體、部署網站服務等,就像操作實體伺服器一樣 | --- ## 三、EC2 的虛擬化與安全 - EC2 執行個體是虛擬機器,運行於 AWS 資料中心的實體伺服器上。 - 使用 Hypervisor 技術實現「多租用戶」模式,讓不同用戶的資源彼此隔離,確保安全。 - 使用者不需管理硬體,只需專注應用開發與維運。 --- ## 四、EC2 執行個體類型 就像咖啡店有不同職位的員工對應不同任務,EC2 也提供不同類型的執行個體以對應各種需求。 | 分類 | 特點與適用情境 | | ------------------------------- | ----------------------------------------------------------- | | **一般用途(General Purpose)** | 均衡配置 CPU、記憶體、網路,適合:<br>- Web 應用程式伺服器<br>- 小型資料庫<br>- 程式碼儲存庫 | | **運算最佳化(Compute Optimized)** | 高處理效能,適合:<br>- 遊戲伺服器<br>- 科學建模<br>- 高效能 Web 應用程式 | | **記憶體最佳化(Memory Optimized)** | 適用記憶體密集任務,例如:<br>- 高效能資料庫<br>- 大數據分析、即時處理 | | **加速運算(Accelerated Computing)** | 搭配 GPU 或 FPGA 等硬體加速器,適合:<br>- AI 模型訓練<br>- 圖形處理、影像辨識 | | **儲存最佳化(Storage Optimized)** | 高 IOPS,低延遲存取,適合:<br>- 資料倉儲系統<br>- OLTP 系統、分散式檔案儲存 | ### 咖啡店比喻版:EC2 執行個體類型 | EC2 類型 | 比喻角色 | 特點說明 | 適合任務 | | ------------------------------- | ------------------- | ----------------- | -------------- | | **一般用途(General Purpose)** | 全能員工(什麼都能做) | 能做咖啡、接單、打掃,表現均衡 | 一般營運、小型店面 | | **運算最佳化(Compute Optimized)** | 快速打單手(收銀機專家) | 打單飛快、反應迅速,能應付大批人潮 | 高峰時段收銀、密集點單處理 | | **記憶體最佳化(Memory Optimized)** | 老闆腦袋超清楚(記得顧客偏好) | 記住大量常客、點單記錄 | 高端客戶服務、數據分析任務 | | **加速運算(Accelerated Computing)** | 咖啡拉花高手(視覺處理專家) | 用拉花機快速製作複雜圖案 | AI 模型訓練、影像辨識任務 | | **儲存最佳化(Storage Optimized)** | 倉管專家(抓貨快速、帳超準) | 存取大量材料快又準,效率極高 | 資料庫系統、大型存取任務 | --- ## 五、EC2 的計費選項(Instance Pricing Models) | 模型類型 | 說明與適用情境 | | ------------------------ | ----------------------------------------------------------------------- | | **隨需(On-Demand)** | 依實際用量計費,無需長期承諾,彈性高,適合短期測試或不穩定需求 | | **預留(Reserved)** | 承諾使用 1 或 3 年,最多可省下 75% 成本,有三種付款方式(全部預付、部分預付、無預付)。適合穩定工作負載,還有標準與可轉換兩種選擇。 | | **Savings Plans** | 承諾每小時支出,最多省下 72%,不須指定執行個體類型與區域,比預留方案更有彈性(不含容量保留) | | **競價(Spot)** | 以極低折扣(最高 90%)取得 AWS 空閒運算資源,適合能容許中斷的工作,如批次處理任務 | | **專用主機(Dedicated Host)** | 專屬實體主機,滿足授權或合規需求,成本最高,但安全性與隔離性最強 | --- ## 六、自動擴展(Amazon EC2 Auto Scaling)與可擴展性 ### 概念 可擴展性代表系統能根據需求自動增加或減少執行個體的數量。AWS 提供的 Auto Scaling 功能,協助企業達成: - **動態擴展**:根據即時需求(如 CPU 使用率)即時調整資源。 - **預測性擴展**:根據歷史資料預測流量,提前調整資源。 - **容錯能力**:執行個體失效時,自動替換。 ![image](https://hackmd.io/_uploads/S1f-snXxll.png) ### 垂直與水平擴展 - **垂直擴展(Scale up/down)**:提升單一執行個體效能(例如換更大的機型) - **水平擴展(Scale out/in)**:增加/減少執行個體數量,更彈性、更常用於 Auto Scaling ### Auto Scaling 範例設定: | 組態名稱 | 說明 | | ---- | ----------------- | | 最小容量 | 最少執行個體數,例如:1 台 | | 所需容量 | 預設維持的執行個體數,例如:2 台 | | 最大容量 | 自動擴展上限,例如:最多 4 台 | Auto Scaling有助於在尖峰期間增加處理量,在離峰期間減少支出,達到服務穩定與成本效益兼具。 ![image](https://hackmd.io/_uploads/rJKUon7eee.png) Azure Image來打包自己的東西做到水平擴展,也可以打包東西給別人。 --- ## 七、負載平衡(Elastic Load Balancing, ELB) * 自動將使用者請求分配至多個 EC2 執行個體,避免單點過載。 * 可分散至前端與後端實例,實現真正的鬆耦合架構(解耦架構)。 * 與 Auto Scaling 搭配,可動態調整接收請求的伺服器數量。 * ELB 是區域性服務,可自動擴展,並在縮減時等待所有請求完成後再關閉執行個體。 > 客人進入咖啡店時,他們可以選擇向眼前的三個收銀員之一點餐。奇怪的是,大部分客人都只排在其中一列,導致每一列客人的人數並不平均。縱使還有其他收銀員在等著接受訂單,他們卻只能站在旁邊乾瞪眼。客人走進來後並不確定要向誰點餐。在這種情況下,如果安排一位領班將會很有幫助。 > ![image](https://hackmd.io/_uploads/SkP6237xgg.png) ![image](https://hackmd.io/_uploads/HyeyanXxll.png) --- ## 八、鬆耦合與訊息服務:SQS 與 SNS 在咖啡店中,收銀員負責點餐,咖啡師則根據點餐單製作餐點。現階段收銀員負責點餐,用紙筆將內容寫下來,然後把單子交給咖啡師。咖啡師收下紙張後,便會開始製作餐點。下一張單子進來時,這個程序就會重複。只要收銀員和咖啡師能保持同步,這個程序就會很順暢。但是當收銀員點完餐,並轉身想要把單子交給咖啡師時,咖啡師正好在休息,或是忙著製作其他餐點,那會怎麼樣?收銀員的進度就會卡住,直到咖啡師準備好繼續接單為止。到了某個程度,便可能會取消該筆餐點,這樣收銀員才可以服務下一位客人。 看得出來,這個程序是有缺陷的,因為一旦收銀員或咖啡師無法同步,程序效能就會降低,導致接單的速度變慢,且無法完成餐點。更好的程序是在系統中引入某種緩衝或佇列。與其直接將單子交給咖啡師,我們改為讓收銀員將單子張貼到某個緩衝區,例如出餐看板。 這種將訊息放在緩衝區的概念叫做訊息與佇列。就像收銀員會將單子交給咖啡師一樣,應用程式也會彼此傳送訊息以進行通訊。如果應用程式直接彼此通訊,和之前的收銀員與咖啡師一樣,這就叫做緊湊耦合。 ### SQS: ![image](https://hackmd.io/_uploads/ByYQJpXegx.png) 緊湊耦合架構的一大特徵是,如果有單一元件故障或變更,便會導致其他元件出現問題,甚至危及整個系統。舉例來說,假設我們有一個應用程式 A 正在直接傳送訊息給應用程式 B,如果應用程式 B 故障且無法接受那些訊息,應用程式 A 也會開始發生錯誤。這就是緊湊耦合架構。 而鬆散耦合則是比較可靠的架構。在這種架構中,如果單一元件故障,由於它與其他元件相隔,因此不會導致整個系統發生連鎖性故障 ### 鬆耦合的好處: - 若某個服務失效,不會影響其他服務運作 - 增加系統彈性與容錯能力 而可針對這部分提供協助的有這兩項 AWS 服務:Amazon Simple Queue Service (簡稱 SQS) 和 Amazon Simple Notification Service (簡稱 SNS) | 服務 | 說明 | | ------------------------------------------- | ---------------------------------------------------- | | **Amazon SQS(Simple Queue Service)** | 訊息佇列服務,允許將任務暫存於佇列,由後端服務隨時處理。適合高延遲容忍的背景任務(出餐看板)。 | | **Amazon SNS(Simple Notification Service)** | 發布/訂閱模型。當有事件發生時,立即推送通知給訂閱的系統元件(如 Lambda、Email、SMS 等) | ### SNS: ![image](https://hackmd.io/_uploads/Hk30ka7gel.png) ### 應用場景範例: - SQS:檔案轉換系統、批次處理、任務排程 - SNS:購物網站下單通知、帳戶異動提醒、應用程式推播 ### 單體式應用程式和微型服務: ![image](https://hackmd.io/_uploads/SkA90n7lgg.png) 若要在單一元件失敗時協助維護應用程式可用性,您可以透過微型服務方法來設計應用程式。 ### 微型服務: ![image](https://hackmd.io/_uploads/Bk7RCh7llg.png) --- ## 九、無伺服器與容器運算選項 ![image](https://hackmd.io/_uploads/Skeozamggg.png) ![image](https://hackmd.io/_uploads/ByNxQ67exx.png) ### AWS Lambda(無伺服器) AWS Lambda 是一種無伺服器(serverless)運算服務,讓你不用管理伺服器,只要寫好函數(function),設定觸發條件,AWS幫你自動執行與擴展。 - 不需佈建伺服器,只需上傳程式碼,設定觸發事件 - 根據觸發次數與執行時間付費 - 自動擴展、高可用性,適用於 Web hook、影像處理、事件反應 ![image](https://hackmd.io/_uploads/r1WyW67egx.png) ### 常見應用 | 應用 | 說明 | | ----------------------- | ---------------------------- | | **自動處理 S3 上傳的圖片** | 使用者上傳圖片 → Lambda 自動壓縮或加浮水印 | | **排程任務(類似 Cron Job)** | 每天早上 8 點自動寄信或清資料庫 | | **API 回應處理** | 與 API Gateway 搭配,建構後端 API 邏輯 | | **影片處理/轉檔任務** | Lambda 在使用者上傳影片時自動轉換格式 | Lambda 的設計是用來執行 15 分鐘內的程式碼,因此不適合用在深度學習這類長期執行的程序上。Lambda 更適合用於快速處理,例如 Web 後端、處理請求或是後端支出報表處理服務在這類程序中,每個請求都不超過 15 分鐘。 ### 容器 容器提供一種標準的方式,將您應用程式的程式碼和相依性封裝至單一物件。您也可以將容器使用於對安全性、可靠性和可擴展性有基本要求的程序和工作流程。 容器適合需要封裝應用與其相依環境的情境,例如 CI/CD、微服務部署、跨平台應用。 > 假設你寫了一個網站,但你的電腦是 Windows,別人的電腦是 Mac。為了讓它們都能執行成功,你把網站和它的程式語言、函式庫、設定檔 全部打包成一個箱子(容器),這樣放到誰的電腦都能跑起來。 #### 一台主機有多個容器 假設公司的應用程式開發人員使用的電腦與 IT 作業人員的電腦有不同的環境。無論部署方式為何,開發人員希望確保應用程式的環境保持一致,因此他們採用容器化方法。這麼做有助於減少在不同運算環境中偵錯應用程式和診斷所耗時間的落差。 ![image](https://hackmd.io/_uploads/rkU1N6mlle.png =50%x ) #### 數十台主機有數百個容器 執行容器化應用程式時,請務必考量可擴展性。假設您使用的並非具有多個容器的單一主機,而是必須管理擁有數百個容器的數十個主機。甚或者,您必須管理具有數千個容器的數百個主機。在這種大規模下,不妨想像一下您要花多少時間來監視記憶體用量、安全性、記錄等等。 ![image](https://hackmd.io/_uploads/ByNlVaXgeg.png) 容器協調流程服務可協助您部署、管理及擴展容器化應用程式。接下來,您將了解到兩項提供容器協調流程功能的服務:Amazon Elastic Container Service 和 Amazon Elastic Kubernetes Service。 #### Amazon Elastic Container Service (Amazon ECS) [Amazon Elastic Container Service (Amazon ECS)](https://aws.amazon.com/ecs/) 是可高度擴展的高效能容器管理系統,可讓您在 AWS 上執行及擴展容器化應用程式。 Amazon ECS 支援 Docker 容器。[Docker](https://www.docker.com/) 是一種軟體平台,可讓您快速建立、測試和部署應用程式。AWS 支援使用開放原始碼 Docker Community Edition 和訂閱型 Docker Enterprise Edition。使用 Amazon ECS,您可以使用 API 呼叫來啟動和停止啟用 Docker 的應用程式。 #### Amazon Elastic Kubernetes Service (Amazon EKS) [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/) 是一項全受管服務,可讓您用來在 AWS 上執行 Kubernetes。 [Kubernetes](https://kubernetes.io/) 是一種開放原始碼軟體,可讓您大規模部署和管理容器化應用程式。由大型的志願者社群維護 Kubernetes,AWS 則積極與 Kubernetes 社群合作。只要 Kubernetes 應用程式的新功能一推出,您就可以輕鬆地將這些更新套用至 Amazon EKS 管理的應用程式。 #### AWS Fargate [AWS Fargate](https://aws.amazon.com/fargate/) 是一種容器專用的無伺服器運算引擎。Amazon ECS 和 Amazon EKS 都適用。 使用 AWS Fargate 時,您不需要佈建或管理伺服器。AWS Fargate 會為您管理伺服器基礎設施。您可以更專注於創新和開發應用程式,而且只需為執行容器所需的資源付費。 ### 容器服務:ECS、EKS、Fargate | 服務 | 特點 | | ------------------------------------------ | ------------------------------- | | **Amazon ECS(Elastic Container Service)** | 讓使用者不需安裝管理協調軟體即可部署容器 | | **Amazon EKS(Elastic Kubernetes Service)** | 基於 Kubernetes 的容器管理服務,支援更複雜應用場景 | | **AWS Fargate** | 搭配 ECS/EKS 執行無伺服器容器,不需管理底層 EC2 | --- ## 單元總結 - 雲端運算是以實支實付方式取得 IT 資源,AWS 提供彈性、高效的運算資源選項。 - Amazon EC2 是 AWS 的核心運算服務,能快速啟動虛擬伺服器。 - 可搭配 Auto Scaling 與 ELB 實現高可用、高擴展性的架構。 - 使用 SQS 與 SNS 建立鬆耦合系統,提升容錯能力與可維護性。 - 進階選項如 Lambda、ECS、EKS、Fargate 可依需求選用不同層級的運算管理便利性與效能。