概述 & 考試範圍
DOP-C01 是集合 SysOps, Developer Associate 兩者合併的 Professional 級別考試,專注的情境分為:
- 系統管理:System Manager
- 系統架構:Disaster Recovery、Trusted advisor、Best Practices for Cloud
- 開發應用:API Gateway、Lambda、CloudFront
- 應用佈署:Code family、Blue/Green deployment、CloudFormation、Elastic Beanstalk
- 資訊安全:Parameter store、KMS、CloudTrail、Config
考試基本資訊:
- 考試時間:180 分鐘 (如需更多時間可延長 30 分鐘)
- 考試題數:75 題
- 考試題型:選擇題、複選題 (選 3 個)
- 考試深度:必須實作過 AWS 專案並理解 SDK、API 運作原理,具有 Multi-Region 架構設計概念。
考試時間比 Associate 還要多 40 分鐘,但是題目和答案非常的長,基本上每個選項都能符合題目所需要求,但是會有最符合題意的 Best Practices,
考前必備基本知識
- Disaster Recovery
- 常見 ELB + EC2 + RDS/Dynamodb 災難復原方法
- 最小的 RTO 和 RPO 以及改進方式
- Code family (CodeCommit, CodeBuild, CodeDeploy, CodePipeline, CodeStar)
- Continuous Delivery vs. Continuous Deployment 差別在於 Delivery 支援 “Approve“,Deployment 則是關注在 “Automation“。
- CodeCommit
- 全托管服務
- 即 Git 的版本控管服務
- 私有的 Repo
- Repo 沒有 size 限制
- 程式碼只在該 AWS 帳號內
- 支援加密、IAM access control 等安全性機制
- 可以整合其他 CI 工具 (ex. Jenkins / CodeBuild / …)
- CodeBuild
- 全托管服務
- 即 CI 服務
- 支援 Source 來自 CodeCommit, S3, Github and Bitbucket (Bitbucket Server 不支援)
- 透過 buildspec.yml 定義 building
- 目前建議使用
version: 0.2
CODEBUILD_
開頭的變數不能使用,通常為內建變數run-as
只支援 Linux 用來指定特殊執行權限env
支援四種類型,分別適用於:variables
:以 key-value 型態,一般純字串參數parameter-store
:從 ssm parameter store 獲取參數 ( CodeBuild 必須擁有ssm:GetParameters
權限)secrets-manager
:指定從 AWS Secrets Manager Key獲得變數exported-variables
:把 environment output 出來,可以在 post_build 後利用此值 (相對的在 post_build 之前可以覆蓋)git-credential-helper
:支援用 gitcredentials 儲存參數
proxy
通常在 Private subnet 的環境使用,利用 HTTP_PROXXY / HTTPS_PROXY 到 internet,而不用一定要有 NAT Gateway / IGW。(參考 Use CodeBuild with a Proxy Server)phases
開始執行 building 階段- install
- pre_build
- build
- post_build
reports
一個 project 最多有 5 個 reportartifacts
用來處理phases
後的資料- cache 支援 S3 和 Local cache,S3 便於構建其他情境使用,Local 比 S3 更快 (因為不用網路傳輸)
- 目前建議使用
- 不需要等待 build queue
- 依 Build time 計費
- 利用 Docker 做到客製化
- 當 image 版本使用 Ubuntu standard 2.0 或 Amazon Linux (AL2) standard image 1.0 之後的版本必須加入
runtime-versions
參數。 - 安全性:
- 支援 KMS 加解密
- 利用 IAM 控制權限
- 可以在 VPC 網路內執行
- 支援 CloudTrail 記錄 API 執行資訊
- 支援 CloudWatch Events, Logs and Metrics
- CodeDeploy
- 全托管服務
- 即 Continuous Deployment 服務
- 當 Target 屬於 instance 時採用 Server-Agent 架構,則 instance 需要安裝 CodeDeploy agent。
- 費用:當 Target 為 AWS Service 免費,On-Premise 每台每次 / 0.02 USD
- CodePipeline
- 全托管服務
- 即 Continuous Delivery 服務,專門處理 workflow 並且支援 “approve”。
- 支援本身的 AWS Code family 以及 CloudFormation, Beanstalk, ECS 等
- 支援 Custom Action Jobs (Lambda) 處理特殊情境。
- CodeStar 整合 Code family 快速建構整個 CI / CD Pipeline。
- CI / CD Pipeline
- CI 可以透過 Branch 判斷環境,再依情境決定是否 CD
- 利用 Pull Request 達到 Master branch 審核管理
- Elastic Beanstalk vs OpsWorks vs CloudFormation
- Elastic Beanstalk 基於多個服務集成的高層級服務,設定最少、最快最簡單的方法,適合僅有開發知識的工程人員使用。
- OpsWorks 專注於 Application (即軟體) 的設定管理服務,相容於 Chef / Puppet 及其特性達到自動修復、定期更新。
- CloudFormation 相較 Elastic Beanstalk 為低層級服務,專注在各個服務細項設定,可搭配 Elastic Beanstalk 和 OpsWorks 補其不足的地方。
- CloudFormation
- Helper Scripts 使用於 EC2 的情境
- cfn-init (AWS::CloudFormation::Init) 用於啟動 EC2 時安裝、啟動服務、獲取 metadata 等
- cfn-signal 搭配 CloudFormation 使用,不需要 AWS credentials (自動判斷 Stack membership),用於判別 EC2 是否完成建置,CloudFormation 可以搭配 CreationPolicy 和 WaitOnResourceSignals 作為判斷 Resource 建立完成,除此之外 Auto Scaling group 也具有相同效用。
- cfn-get-metadata 搭配 CloudFormation 使用,不需要 AWS credentials (自動判斷 Stack membership),用於 EC2 內獲取 CloudFormation metadata 資訊。
- cfn-hu 以 Service 型態安裝於 EC2,用於監控 matadata 異動時觸發 hooks.conf 所寫的動作。
- Helper Scripts 使用於 EC2 的情境
- Elastic Beanstalk
- 主要專注於 Application 佈署服務,支援 AWS 多個核心服務包含 EC2, ECS, ELB and RDS 等
- 可以支援多個版本同時佈署,也支援 Blue/Green 的佈署方法,每一個版本指向一個 S3 Object。
- 一個環境只能運行一個 Application 版本,但多個環境可以佈署同一個 Application 版本。
- 分為 Web (前台服務 ELB, EC2 …), Worker (後台服務 SQS) Environment Tier
- Deployment Methods 分為五種,尤其是 Rolling, Immutable, Blue/Green 重要,參考 Ref[1]
- 支援 Docker
- 支援自定義 AMI
- 理解 .ebextensions 用法,與環境讀取的優先順序
- System Manager
- 專注管理 EC2、On-Premise
- Server-Agent 架構,instance 需要安裝 SSM Agent
- instance ID 開頭 “mi-” 為 On-Premise、”i-” 為 EC2
- instance 又區分為 standard-instances 和 advanced-instances
- standard-instances 在單一帳號 EC2 + On-Premise 最多 1000 個 instance
- advanced-instances 可以使用超過 1000 個以上 instance
- 開啟 advanced-instances 後帳號所有 Region 的 On-Premise instance 自動轉為 advanced-instances
- On-Premise 支援 Session Manager
- 支援 Microsoft Hotfix Patch
- 每個 On-Premise 每小時 $0.00695 USD (參考 System Manager Price)
- OpsWork
- 分為 stacks, layers, recipes 類別
- Server-Agent 架構,EC2 必須安裝 Agent
- 支援 auto-healing (自動修復),當 auto-healing 啟動時 Stacks agent 與 Opswork Server 失聯即判定異常,Opswork Stack 將自動重建 EC2
- EC2
- Auto Scaling Lifecycle 參考 Ref[2]
- Scale-out 經過 Pending:* 後才會 InService,Scale-in 經過 Terminaing:* 後才會 Terminated,中間都可以透過 hooks 另外做判斷。
- Application Load balancer 整合 Lambda
- Network Load balancer 整合 API Gateway
- Auto Scaling Lifecycle 參考 Ref[2]
考試心得
DevOps engineer – Professional 這張認證的深度很吃實戰經驗,每一題都是多個服務的組合題型,基本上沒有實際使用過幾乎不會過,大概分為幾大類
- Disaster Recovery:最重要在於資料庫還原,RDS / Dynamodb 的 Backup/Restore 要夠熟,尤其是如何在最短時間完成。
- 架構設計:用最低的成本完成需求,Scale-in / out 的情境設計很吃重
- 系統維運:大量 Patch hotfix 執行、大量系統資訊收集、各類系統遠端方法、跨 Region 維運、跨 Region Log Pipeline 設計。
- CI / CD:最吃重的一個項目,當有額外需求時適時的利用 Custom Job/Action 來完成需求。
- 資料庫:Schema 設計包含 Primary + Sort key 定義,如何用最少 RCU/WCU。
- 資安:Secure 的存放方法、CloudTrail 的運用與即時分析資料。
答案選項可能會出現 API method 讓你選,沒開發過這個服務 API 壓根答不出來,每個選項都只有些微差距,看起來好像都可以,不夠熟很難選出正確答案。
最後請記得一定要延長 30 分鐘 (210 min),當我做完 75 題後只剩下 30 分鐘左右可以回頭檢查 (當時有 10 個標記題目未答 …),如果只有預設的 180 分鐘絕對不夠,除非很有信心。
Reference
- Elastic Beanstalk Deployment Methods (轉至 Jayendra’s Blog)
- Auto Scaling Lifecycle
- AWS Certified DevOps Engineer – Professional (DOP-C01) Exam Learning Path
- AWS Certified SysOps Administrator – Associate(SOA-C01) 考試準備
- AWS Certified Solutions Architect – Associate(SAA-C01) 考試準備
- AWS Certified Developer – Associate(SDA-C01) 考試準備
- AWS Certified Solution Architect – Professional(SAP-C01) 考試準備