AWS CodeDeploy 是 AWS 提供的全受管 「自動化程式碼部署服務」。
它的核心任務很簡單:「把你的應用程式(程式碼),自動安裝並啟動到伺服器(EC2、地端)或無伺服器環境(Lambda、ECS)上。」它是 AWS CI/CD 工具鏈
CodeCommit → CodeBuild → CodeDeploy → CodePipeline
中的「部署」環節。
以下是 CodeDeploy 的重點整理,特別針對考試與實務操作:
1. 核心功能與支援平台
CodeDeploy 的最大特色是通用性,它支援部署到以下三種運算環境:
- EC2 / 地端伺服器 (On-Premises):需要在機器上安裝 CodeDeploy Agent。可以更新現有的實例,或配合 Auto Scaling Group 自動部署新機器。
- AWS Lambda:負責管理流量轉移(Traffic Shifting),例如將 10% 流量導向新版本函式。
- Amazon ECS (容器):負責更新容器定義,並執行藍綠部署 (Blue/Green) 來切換流量。
2. 靈魂核心:AppSpec File (appspec.yml)
這是 CodeDeploy 最重要的設定檔。如果沒有這個檔案,CodeDeploy 不知道要做什麼。
- 位置:必須放在程式碼儲存庫(如 GitHub 或 S3 zip 檔)的根目錄。
- 格式:YAML 或 JSON。
- 內容:定義了兩個重點:Files:把哪些檔案從來源複製到伺服器的哪個路徑。Hooks (生命週期):在部署的各個階段要執行什麼 Shell Script(例如:安裝相依套件、重啟 Nginx)。
3. 部署策略 (Deployment Strategies)
這是考試最常考的觀念,區分 In-place 與 Blue/Green:
A. 就地部署 (In-place Deployment)
- 適用:EC2、地端伺服器。
- 運作:停止伺服器上的應用程式 →→ 更新程式碼 →→ 重新啟動應用程式。
- 缺點:會有短暫的服務中斷(Downtime),除非你有設 Load Balancer 並且一次只更新部分機器。
- 回滾 (Rollback):需要重新部署舊版本,速度較慢。
B. 藍綠部署 (Blue/Green Deployment)
- 適用:EC2、Lambda、ECS。
- 運作:Blue (舊環境):正在服務使用者的環境。Green (新環境):CodeDeploy 建立一套全新的環境(或新版本 Lambda)。等待新環境測試通過後,切換 Load Balancer 的流量指向 Green。
- 優點:零停機時間,且如果有問題可以瞬間切回舊環境(快速回滾)。
4. 生命週期鉤子 (Lifecycle Event Hooks)
在 appspec.yml 中,你可以控制部署流程的順序。常見的順序如下(EC2 為例):
- ApplicationStop:優雅地停止目前的應用程式。
- DownloadBundle:下載新程式碼(系統自動執行)。
- BeforeInstall:備份舊檔、清理目錄。
- Install:複製檔案(系統自動執行)。
- AfterInstall:修改檔案權限、配置設定檔。
- ApplicationStart:啟動服務(如 service httpd start)。
- ValidateService:最重要的步驟!執行測試腳本(如 curl localhost)確保服務真的活著。如果這步失敗,CodeDeploy 會判定部署失敗並自動回滾。
5. 比較:CodeDeploy vs. CloudFormation
這兩者很容易混淆,因為它們都在「建立/修改」東西。
特性AWS CloudFormationAWS CodeDeploy類別Infrastructure as Code (IaC)Application Deployment主要功能建立 基礎設施 (VPC, EC2, RDS, S3)更新 應用程式碼 (Java, Python, Node.js)比喻營造廠 (把房子蓋好)搬家公司/裝潢 (把家具搬進去、擺好)運作層級AWS 資源層級作業系統 / 程式碼層級
6. 考試關鍵字 (Keywords)
- appspec.yml (看到這個必選 CodeDeploy)。
- Blue/Green Deployment for EC2/Lambda/ECS (最安全的部署方式)。
- Minimize downtime (減少停機時間 →→ 選 Blue/Green)。
- Traffic Shifting / Canary / Linear (針對 Lambda 的漸進式部署)。
- CodeDeploy Agent (部署到 EC2 或 On-prem 必須安裝的東西)。















