AWS DVA-C02
Esc
↑↓เลื่อน↵เปิดescปิด28 ผลลัพธ์
21

AWS CICD

AWS Developer Tools & CI/CD Pipeline

Developer Tools & IaC 11 นาที 24 คำถาม

01แนวคิด CI/CD (Continuous Integration / Delivery / Deployment)

CI/CD คือแนวคิดที่ทำให้การ build, test, และ deploy โค้ดเป็นแบบอัตโนมัติ เพื่อปล่อยซอฟต์แวร์ได้บ่อยและปลอดภัยขึ้น ก่อนจะเข้าบริการแต่ละตัวของ AWS ต้องแยกให้ออกว่า CI, Continuous Delivery, และ Continuous Deployment ต่างกันตรงไหน เพราะข้อสอบชอบถามเชิงนิยาม

Continuous Integration (CI)
นักพัฒนา push โค้ดเข้า code repository (เช่น CodeCommit/GitHub) บ่อยๆ จากนั้น build server (เช่น CodeBuild) จะ build + test โค้ดอัตโนมัติ แล้วรายงานผล feedback กลับให้เร็ว เป้าหมายคือ หา bug เร็ว, release เร็ว, deliver บ่อย
Continuous Delivery
ทำให้ซอฟต์แวร์ release ออกได้ "บ่อยและเชื่อถือได้" โดยทำ deployment ให้เป็นอัตโนมัติ แต่ขั้นตอน push สู่ production ยังต้องมี manual approval (มนุษย์กดอนุมัติ)
Continuous Deployment
ทุกอย่างอัตโนมัติเต็มรูปแบบ ไปจนถึง production โดย ไม่มี manual approval ถ้าผ่าน test ทั้งหมด โค้ดจะ deploy ขึ้น production เอง
บริการ AWSหน้าที่หลักเทียบกับเครื่องมือทั่วไป
CodeCommitSource / Git repository (managed)GitHub / GitLab
CodeBuildBuild & Test โค้ดJenkins build / CircleCI
CodeDeployDeploy ไปยัง EC2/Lambda/ECS/On-premAnsible / manual deploy
CodePipelineOrchestrate ทุก stage เข้าด้วยกันJenkins Pipeline
CodeArtifactเก็บ & แชร์ software packages/dependenciesNexus / Artifactory
CodeGuruML-powered code review & profilingSonarQube + APM
Tips สำหรับการสอบ
จำสูตร: Continuous Delivery = มี manual approval ก่อนขึ้น prod, Continuous Deployment = ไม่มี manual approval (อัตโนมัติเต็มถึง prod). ข้อสอบชอบสลับสองคำนี้

02CodeCommit (Git Repository & Authentication)

CodeCommit เป็น managed Git repository บน AWS — โค้ดเก็บใน private repos, scalable, integrate กับ IAM, และ encrypted (KMS) โดยอัตโนมัติ ไม่มี size limit ของ repo ตามที่ต้องจำเชิงตัวเลข แต่จุดที่ออกสอบจริงคือ การ authenticate และ notifications

วิธี Authentication เข้า CodeCommit

  • SSH Keys — ผู้ใช้ configure SSH key ที่ผูกกับ IAM User (จัดการในหน้า IAM)
  • HTTPS — ใช้ AWS CLI Credential helper หรือ Git Credentials (HTTPS Git credentials ที่ generate ให้ IAM User)
  • ห้าม ใช้ username/password ของ AWS Console ตรงๆ และ ไม่ใช้ access keys ในการ git clone โดยตรง

Authorization & Encryption

  • ควบคุมสิทธิ์ด้วย IAM Policies (เช่น จำกัด branch ที่ push ได้ด้วย IAM condition)
  • Encryption at rest ด้วย AWS KMS, in transit ด้วย HTTPS/SSH
  • Cross-account access ทำผ่าน IAM Roles + STS (AssumeRole) — ไม่ใช่การแชร์ credentials

Notifications & Integrations

CodeCommit ส่ง event ได้ผ่าน SNS / AWS Lambda / EventBridge เช่น เมื่อมีคน push, มี pull request, หรือ comment. เคสที่ใช้ SNS/Lambda มักเป็น: ป้องกัน branch หลัก, แจ้งเตือน deletion, trigger external build.

กับดักข้อสอบ
ถ้าโจทย์ถามว่าจะให้ user เข้าถึง CodeCommit อย่างปลอดภัย อย่าเลือกคำตอบที่ใช้ IAM access key/secret key กับ git clone หรือใช้ root user — คำตอบที่ถูกคือ Git credentials over HTTPS หรือ SSH keys associated กับ IAM user. หมายเหตุ: ปัจจุบัน AWS ไม่เปิดให้สร้าง CodeCommit repo ใหม่สำหรับลูกค้าใหม่แล้ว แต่เนื้อหายังออกสอบ DVA-C02

03CodeBuild & buildspec.yml (จุดออกสอบหนัก)

CodeBuild เป็น fully managed build service — compile source, run tests, สร้าง artifacts. ไม่ต้องจัดการ build server เอง, จ่ายตามเวลาที่ใช้ (per-minute). Source มาจาก CodeCommit/S3/GitHub/Bitbucket. คำสั่ง build ถูกนิยามใน buildspec.yml ที่อยู่ที่ root ของ source code (หรือกำหนด inline ก็ได้)

Phases ใน buildspec.yml (ต้องจำลำดับ)

  • install — ติดตั้ง dependencies/packages ที่ build environment ต้องใช้
  • pre_build — คำสั่งก่อน build เช่น login เข้า ECR, npm install
  • build — คำสั่ง build จริง เช่น mvn package, docker build
  • post_build — งานหลัง build เช่น docker push, สร้าง artifact, ส่ง notification
  • env — กำหนด environment variables (plaintext / parameter-store / secrets-manager)
  • artifacts — ระบุไฟล์ output ที่จะส่งไปเก็บใน S3
  • cache — ระบุไฟล์/โฟลเดอร์ที่จะ cache ไป S3 เพื่อ build ครั้งหน้าเร็วขึ้น
yaml
version: 0.2

env:
  variables:
    JAVA_HOME: "/usr/lib/jvm/java-11"
  parameter-store:
    LOGIN_PASSWORD: /CodeBuild/dockerLoginPassword   # จาก SSM Parameter Store
  secrets-manager:
    DB_PASSWORD: prod/db:password                    # จาก Secrets Manager

phases:
  install:
    runtime-versions:
      java: corretto11
    commands:
      - echo Installing dependencies...
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password | docker login --username AWS --password-stdin $REPO_URI
  build:
    commands:
      - echo Build started
      - mvn package
  post_build:
    commands:
      - echo Build completed, pushing image...
      - docker push $REPO_URI:latest

artifacts:
  files:
    - target/my-app.jar
    - appspec.yml
  base-directory: .

cache:
  paths:
    - '/root/.m2/**/*'

Environment Variables & Secrets

  • variables — ค่า plaintext (ห้ามเก็บ secret ที่นี่)
  • parameter-store — ดึงค่าจาก SSM Parameter Store
  • secrets-manager — ดึงค่าจาก AWS Secrets Manager (เหมาะกับ password/credential ที่ rotate)

Local Build, VPC & Caching

  • Local Build — ทำได้โดยติดตั้ง CodeBuild Agent บนเครื่อง (รันใน Docker) เพื่อ debug buildspec ลึกๆ ก่อน push
  • CodeBuild สามารถรันใน VPC เพื่อเข้าถึง resource ส่วนตัว (RDS, ElastiCache, internal service)
  • Caching เก็บได้ที่ S3 (เช่น dependencies) หรือ local cache เพื่อลดเวลา build
  • Build environment เป็น Docker — ใช้ image ของ AWS หรือ custom image ของเราเองจาก ECR ได้
กับดักข้อสอบ (env vars vs secrets)
ถ้าโจทย์ให้เก็บ DB password/API key สำหรับใช้ตอน build อย่าเลือก plaintext variables ใน buildspec — เลือก parameter-store (SSM) หรือ secrets-manager. ถ้าต้องการ rotation อัตโนมัติ ตอบ Secrets Manager
Tips สำหรับการสอบ
จำว่า buildspec.yml ต้องอยู่ที่ root ของ source. ถ้า build ช้าเพราะ download dependencies ทุกครั้ง คำตอบคือเพิ่ม cache (S3/local). ถ้า build ต้องเข้าถึง RDS ภายใน VPC ต้อง configure ให้ CodeBuild รันใน VPC

04CodeDeploy & appspec.yml + Lifecycle Hooks

CodeDeploy ทำหน้าที่ deploy application อัตโนมัติไปยัง EC2, on-premises, AWS Lambda, และ ECS ต้องติดตั้ง CodeDeploy Agent บน EC2/on-prem (ไม่ต้องสำหรับ Lambda/ECS). ไฟล์คุม deploy คือ appspec.yml — ตำแหน่งและเนื้อหาขึ้นกับ compute platform

Deployment Type: In-place vs Blue/Green

หัวข้อIn-placeBlue/Green
วิธีทำdeploy ทับ instances เดิมสร้างชุดใหม่ (green) แล้วสลับ traffic
รองรับ platformEC2/On-prem เท่านั้นEC2 (ผ่าน ASG/ELB), Lambda, ECS
Downtime/ความเสี่ยงมีโอกาส downtime ระหว่าง deployลด downtime, rollback ง่าย (สลับกลับ)
ค่าใช้จ่ายถูกกว่า (ไม่เพิ่ม instance)แพงกว่าชั่วคราว (รันสองชุด)

Deployment Configurations (ความเร็วในการกระจาย traffic)

  • AllAtOnce — deploy ทุก instance พร้อมกัน เร็วสุด แต่ downtime สูง เสี่ยงสุด
  • HalfAtATime — ครั้งละ 50% ของ instances
  • OneAtATime — ครั้งละ 1 instance ช้าสุด แต่ปลอดภัยสุด
  • Canary (Lambda/ECS) — ปล่อย traffic เป็น 2 ก้อน เช่น Canary10Percent5Minutes (10% ก่อน รอ 5 นาที แล้วปล่อยที่เหลือ)
  • Linear (Lambda/ECS) — ปล่อย traffic เพิ่มเท่าๆ กันทุกช่วงเวลา เช่น Linear10PercentEvery3Minutes
  • AllAtOnce สำหรับ Lambda/ECS = สลับทั้งหมดทันที

Lifecycle Hooks สำหรับ EC2/On-prem (ออกสอบบ่อยที่สุด)

ลำดับ hooks สำคัญมาก: ApplicationStop → DownloadBundle → BeforeInstall → Install → AfterInstall → ApplicationStart → ValidateService. หมายเหตุ: DownloadBundle และ Install เป็น step ที่ CodeDeploy agent ทำเอง เราเขียน script ใส่ hooks อื่นได้

  • BeforeInstall — งานก่อนติดตั้ง เช่น backup ไฟล์เดิม, decrypt files
  • AfterInstall — งานหลังไฟล์ลงแล้ว เช่น config, set permission
  • ApplicationStart — สั่งเริ่ม service/แอป
  • ValidateService — ตรวจว่า deploy สำเร็จ/health check (hook สุดท้าย)
yaml
version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html/
hooks:
  BeforeInstall:
    - location: scripts/backup.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: scripts/configure.sh
      timeout: 180
      runas: root
  ApplicationStart:
    - location: scripts/start_server.sh
      timeout: 60
      runas: root
  ValidateService:
    - location: scripts/health_check.sh
      timeout: 60
      runas: root
appspec สำหรับ Lambda / ECS
สำหรับ Lambda/ECS, appspec.yml ใช้ระบุ resource (function/task definition) และ hooks ต่างกัน เช่น Lambda มี BeforeAllowTraffic, AfterAllowTraffic; ECS มี BeforeInstall, AfterInstall, AfterAllowTestTraffic, BeforeAllowTraffic, AfterAllowTraffic. EC2 hooks (BeforeInstall/ApplicationStart) ใช้ไม่ได้กับ Lambda/ECS

Rollback

  • Rollback เกิดได้ทั้ง อัตโนมัติ (เมื่อ deployment fail หรือ CloudWatch Alarm trigger) หรือ manual
  • CodeDeploy rollback = deploy revision ที่ดี "ก่อนหน้า" ใหม่อีกครั้ง (re-deploy last known good) ไม่ใช่การ restore snapshot
Tips สำหรับการสอบ
Canary/Linear ใช้กับ Lambda และ ECS (traffic shifting). HalfAtATime/OneAtATime/AllAtOnce ใช้กับ EC2/On-prem. ถ้าโจทย์ถามว่า script ตรวจ health หลัง deploy ใส่ที่ hook ไหน = ValidateService. ถ้า backup ก่อนติดตั้ง = BeforeInstall

05CodePipeline (Orchestration)

CodePipeline เป็นเครื่องมือ orchestrate workflow CI/CD แบบ visual — ร้อย stage ต่างๆ เข้าด้วยกัน: Source → Build → Test → Deploy (และ stage อื่นๆ ที่กำหนดเอง) เป็น backbone ที่เชื่อม CodeCommit/CodeBuild/CodeDeploy เข้าด้วยกัน

องค์ประกอบหลัก

  • Stages — ขั้นตอนใน pipeline (Source, Build, Deploy ฯลฯ) แต่ละ stage มี action ได้หลายตัว (sequential/parallel)
  • Artifacts — output ของแต่ละ stage ถูกเก็บใน Amazon S3 แล้วส่งต่อเป็น input ให้ stage ถัดไป (ผ่าน artifact store ที่เป็น S3 bucket)
  • Manual Approval — เพิ่ม action ประเภท approval เพื่อให้คนกดอนุมัติก่อนไป stage ถัดไป (= Continuous Delivery)
  • EventBridge — trigger pipeline เมื่อมี event (เช่น push เข้า CodeCommit) เป็นวิธีที่แนะนำแทน polling
กับดักข้อสอบ: pipeline หยุดที่ stage หนึ่ง
ถ้า pipeline ทำงาน fail ให้ตรวจ CloudWatch Events/EventBridge และ IAM Role/Service Role ของ CodePipeline ก่อน. ถ้า stage ไม่ trigger เมื่อ push code คำตอบมักเป็น EventBridge rule (ไม่ใช่ periodic polling). ปัญหา 'pipeline ทำไม่ได้บาง action' มักเป็น permission ใน service role
Tips สำหรับการสอบ
Artifacts ระหว่าง stage เก็บใน S3 เสมอ (ต้องให้ S3 bucket encryption/permission ถูก). ใช้ EventBridge เพื่อ start pipeline แบบ event-driven. Manual approval action เป็นกุญแจของ Continuous Delivery

06CodeArtifact (Package Management)

CodeArtifact เป็น artifact/package repository แบบ managed สำหรับเก็บและแชร์ software dependencies ทำงานร่วมกับ package manager มาตรฐาน: npm, Maven/Gradle, pip, NuGet, yarn, twine ฯลฯ ช่วยให้ทีมไม่ต้องตั้ง Nexus/Artifactory เอง

  • สามารถตั้งเป็น proxy ของ public repository (เช่น npmjs, PyPI, Maven Central) — เมื่อขอ package ที่ไม่มี จะดึงจาก upstream มา cache ไว้
  • ควบคุมสิทธิ์ด้วย IAM และ resource policies (domain/repository policy)
  • Integrate กับ CodeBuild เพื่อดึง dependency ภายในขั้น build อย่างปลอดภัย
  • EventBridge สามารถ trigger เมื่อมี package version ใหม่ถูก publish (เช่น trigger pipeline ให้ build ใหม่)
Tips สำหรับการสอบ
ถ้าโจทย์พูดถึงการ host/แชร์ dependencies ภายในองค์กร, proxy ของ public package registry, หรือเก็บ private npm/pip/Maven packages = CodeArtifact. ถ้าเป็น container image = Amazon ECR (ไม่ใช่ CodeArtifact)

07CodeGuru & CodeStar

Amazon CodeGuru เป็นบริการ ML สองส่วน: CodeGuru Reviewer (วิเคราะห์โค้ดเชิงสถิติหา bug/ช่องโหว่/แนวทางที่ดี) และ CodeGuru Profiler (วิเคราะห์ runtime performance ของแอปที่กำลังรัน เพื่อหา bottleneck และลดต้นทุน CPU)

บริการทำงานช่วงไหนหน้าที่
CodeGuru Reviewerก่อน deploy (static analysis)หา bug, security issue, resource leak, แนะนำปรับปรุงโค้ด
CodeGuru Profilerขณะ runtime (production)หา performance bottleneck, CPU/heap usage, ลดต้นทุน

CodeStar

CodeStar เป็น unified UI ที่รวมเครื่องมือ CI/CD ทั้งหมด (CodeCommit, CodeBuild, CodeDeploy, CodePipeline) ในที่เดียว ช่วยตั้ง project + CI/CD pipeline ได้รวดเร็วผ่าน template. หมายเหตุ AWS CodeStar (เดิม) อยู่ในช่วง phase-out แต่ยังพบในขอบเขตข้อสอบ DVA-C02

Tips สำหรับการสอบ
คำใบ้: 'หา bug/ช่องโหว่ในโค้ด อัตโนมัติด้วย ML' = CodeGuru Reviewer. 'หา bottleneck/ลด CPU cost ตอน runtime' = CodeGuru Profiler. 'รวมทุก dev tool ใน dashboard เดียวเริ่มโปรเจกต์เร็ว' = CodeStar

คำถามทบทวน

ทดสอบความเข้าใจหัวข้อ AWS CICD

24 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย

ทำแล้ว 0/24คะแนน 0
  1. 1.ทีมพัฒนาต้องการให้ทุก commit ที่ผ่าน automated test ถูก deploy ขึ้น production โดยอัตโนมัติ ไม่มีการกดอนุมัติโดยมนุษย์ แนวทางนี้เรียกว่าอะไร?

  2. 2.นักพัฒนาต้องการ clone repository ใน CodeCommit ผ่าน HTTPS อย่างปลอดภัยโดยผูกกับ IAM user วิธีใดเหมาะสมที่สุด?

  3. 3.ใน buildspec.yml นักพัฒนาต้องการ login เข้า Amazon ECR ก่อน build Docker image ควรวางคำสั่งนี้ใน phase ใด?

  4. 4.บริษัทต้องการเก็บ database password ที่ใช้ตอน build ใน CodeBuild โดยรองรับการ rotate อัตโนมัติ ควรอ้างอิงค่าใน buildspec.yml จากแหล่งใด?

  5. 5.การ build ใน CodeBuild ช้ามากเพราะต้อง download Maven dependencies ใหม่ทุกครั้ง ควรทำอย่างไรเพื่อลดเวลา build?

  6. 6.build ของ CodeBuild ต้องเชื่อมต่อกับ RDS database ที่อยู่ใน private subnet ของ VPC จะ configure อย่างไร?

  7. 7.ใน appspec.yml สำหรับ EC2 นักพัฒนาต้องการรัน script ตรวจ health check หลังจากแอปเริ่มทำงานแล้ว เพื่อยืนยันว่า deploy สำเร็จ ควรใส่ใน lifecycle hook ใด?

  8. 8.บริษัทต้องการ deploy แอปบน EC2 โดยลดความเสี่ยง downtime และสามารถ rollback ได้ทันทีโดยสลับ traffic กลับ deployment type ใดเหมาะสม?

  9. 9.ทีมต้องการ deploy Lambda function เวอร์ชันใหม่โดยปล่อย traffic 10% ก่อน รอ 5 นาที แล้วค่อยปล่อยที่เหลือทั้งหมด ควรใช้ deployment configuration ใด?

  10. 10.Deployment บน EC2 ต้องการความปลอดภัยสูงสุด ยอมให้ deploy ช้าได้ โดย deploy ทีละ instance เพื่อให้ service ยังคงพร้อมใช้งานเสมอ ควรเลือก deployment config ใด?

  11. 11.ใน CodePipeline artifacts ที่ส่งต่อระหว่าง stage ถูกจัดเก็บที่ใด?

  12. 12.ต้องการให้ CodePipeline เริ่มทำงานทันทีเมื่อมีการ push code เข้า CodeCommit แทนการ poll เป็นระยะ ควรใช้บริการใด?

  13. 13.บริษัทใช้ Continuous Delivery และต้องการให้มีคนตรวจสอบก่อน deploy ขึ้น production จะเพิ่มอะไรใน CodePipeline?

  14. 14.องค์กรต้องการ host private npm และ pip packages ภายในและตั้งเป็น proxy ของ public registry เพื่อ cache dependencies ควรใช้บริการใด?

  15. 15.ทีมต้องการให้มีการวิเคราะห์โค้ดอัตโนมัติด้วย ML เพื่อหา bug, resource leak, และช่องโหว่ด้านความปลอดภัย ก่อน merge ควรใช้บริการใด?

  16. 16.แอปที่รันใน production ใช้ CPU สูงและมี cost มาก ทีมต้องการหา bottleneck ของ performance ขณะ runtime ควรใช้บริการใด?

  17. 17.ใน appspec.yml ของ deployment บน EC2 นักพัฒนาต้องการ backup ไฟล์เดิมก่อนที่ไฟล์ใหม่จะถูกติดตั้ง ควรใส่ script ใน hook ใด?

  18. 18.CodeDeploy ทำ deployment ไปยัง EC2 fleet แล้วล้มเหลว ระบบควรกลับสู่เวอร์ชันที่ทำงานได้ก่อนหน้าโดยอัตโนมัติ กลไก rollback ของ CodeDeploy ทำงานอย่างไร?

  19. 19.ก่อน push buildspec.yml ขึ้นจริง นักพัฒนาต้องการ debug และทดสอบ build steps บนเครื่อง local จะทำอย่างไร?

  20. 20.deployment บน ECS แบบ Blue/Green ต้องการรัน script ทดสอบกับ task ใหม่ (green) ผ่าน test listener ก่อนสลับ production traffic ควรใช้ hook ใดใน appspec.yml ของ ECS?

  21. 21.ทีมต้องการ trigger CodePipeline ให้ build ใหม่อัตโนมัติเมื่อมี package version ใหม่ถูก publish ใน CodeArtifact จะทำอย่างไร?

  22. 22.นักพัฒนาต้องการให้แต่ละ IAM user เข้าถึง CodeCommit ผ่าน SSH การ associate SSH public key ทำที่ใด?

  23. 23.CodePipeline ทำงานล้มเหลวที่ Deploy stage โดยขึ้น error ว่าไม่มีสิทธิ์เรียก CodeDeploy สาเหตุที่เป็นไปได้มากที่สุดคืออะไร?

  24. 24.องค์กรต้องการ unified dashboard ที่รวม CodeCommit, CodeBuild, CodeDeploy, CodePipeline เพื่อเริ่มต้นโปรเจกต์ CI/CD ได้รวดเร็วผ่าน template ควรใช้บริการใด?