Why Infrastructure as Code (IaC)?
การสร้าง infrastructure แบบ manual (คลิกผ่าน Console) มีปัญหาหลายอย่าง: ผิดพลาดง่าย, ไม่มี version control, ยากต่อการสร้างซ้ำ และ review ไม่ได้ — Infrastructure as Code (IaC) คือการเขียน infrastructure เป็น code ที่ repeatable, version-controlled, reviewable และ automate ได้
ปัญหาของ Manual Setup
ต้องคลิกหลายขั้นตอน, error-prone, ไม่มี history, สร้างซ้ำใน region/account อื่นยาก
ข้อดีของ IaC
Repeatable, version control (Git), ทำ code review ได้, automation, ลบ/สร้างใหม่ได้ง่าย — ลด cost และเพิ่ม reliability
AWS CloudFormation
CloudFormation คือบริการ IaC ของ AWS — เขียน template แบบ declarative (บอกว่ายากอะไร ไม่ต้องบอกวิธีทำ) รองรับ resource ระดัป AWS เกือบทั้งหมด
"ฉันต้องการใช้ Security Group, EC2 instance 2 ตัวที่ใช้ SG นี้,
S3 bucket 1 ลูก, และ ELB 1 ตัวที่ต่อ EC2"
→ CloudFormation จะสร้าง resource ทั้งหมดตามลำดับ dependency ที่ถูกต้องInfrastructure as Code
ไม่ต้องสร้าง resource มืออีกต่อไป — review code, version control, ทำตามขั้นตอน software development
Cost
Tag resource ได้ง่าย — รู้ต้นทุน, สร้าง/ลบ dev environment อัตโนมัติ (ลบตอน 5 โมง, สร้างใหม่ตอน 8 โมง)
Productivity
ลบ + สร้างใหม่ได้ง่าย, สร้าง diagram อัตโนมัติ, เขียนแบบ declarative
Don't Reinvent the Wheel
มี template ฟรีจาก community + AWS — leverage docs ได้
Stack Designer
เครื่องมือ visualize resource และความสัมพันธ์ระหว่าง resource ใน stack
รองรับเกือบทั้งหมด
เกือบทุก AWS service รองรับ CloudFormation — หากขาดไปใช้ custom resource workaround ได้
AWS Cloud Development Kit (CDK)
AWS CDK คือการเขียน cloud infrastructure ด้วยภาษา programming ที่คุ้นเคย — JavaScript/TypeScript, Python, Java, .NET — แล้ว "compile" เป็น CloudFormation template (JSON/YAML)
- เขียน IaC ด้วยภาษาที่รู้อยู่แล้ว (ไม่ต้องเรียน YAML/JSON)
- มี type checking, IDE auto-complete, loop, condition เหมือน code ทั่วไป
- Deploy infrastructure + application runtime code พร้อมกันได้
- เหมาะมากสำหรับ Lambda function และ Docker container บน ECS / EKS
AWS Elastic Beanstalk
Elastic Beanstalk คือบริการ deploy application บน AWS แบบ developer-centric view — ภายในจริงใช้ EC2, ASG, ELB, RDS แต่รวมไว้ในมุมมอง all-in-one จัดการง่าย — เป็น Platform as a Service (PaaS)
AWS จัดการให้ (Managed)
การ config instance/OS, deployment strategy, capacity provisioning, load balancer, ASG, application health monitoring
Developer รับผิดชอบแค่
Application code เท่านั้น — ไม่ต้องยุ่งกับ infrastructure
3 Architecture Models:
Single Instance
EC2 ตัวเดียว — เหมาะ dev environment
LB + ASG
Load Balancer + Auto Scaling Group — เหมาะ production web app
ASG only
Auto Scaling Group อย่างเดียว — เหมาะ worker / non-web production
Supported Platforms: Go, Java SE, Java with Tomcat, .NET on Windows Server with IIS, Node.js, PHP, Python, Ruby, Single/Multi-Container Docker, และ Custom Platform (advanced)
AWS CodeDeploy
CodeDeploy คือบริการ deploy application แบบอัตโนมัติ — รองรับ EC2 และ on-premises servers (hybrid) — เพียงติดตั้ง CodeDeploy Agent บน server ตัวเป้าหมาย
- รองรับ EC2 + on-premises servers — hybrid service
- Server ต้องติด CodeDeploy Agent จึงจะสิ่ง deploy ได้
- ไม่ได้ provision server — แค่ deploy code ลง server ที่มีอยู่แล้วเท่านั้น
AWS CodeCommit
CodeCommit คือ source control แบบ Git บน AWS — ทางเลือกแทน GitHub / GitLab / Bitbucket สำหรับองค์กรที่ต้องการเก็บ code ภายใน AWS
- Source-control hosting — รองรับ Git protocol
- ร่วมงานได้ง่าย — versioning อัตโนมัติ
- Fully managed, scalable, HA
- Private + secure — integrate กับ IAM จำกัด access ได้
- AWS integration — ต่อไป CodeBuild / CodePipeline ได้ทันที
AWS CodeBuild
CodeBuild คือบริการ build code บน cloud — compile → รัน test → สร้าง package (artifact) — พร้อมส่งไป deploy ต่อได้
- Fully managed — ไม่ต้องดูแล build server เอง
- Serverless — ไม่มี server provision
- Scalable + HA + secure
- Pay-as-you-go — จ่ายเฉพาะเวลาที่ build จริง
AWS CodePipeline
CodePipeline คือตัว orchestrate CI/CD pipeline — เชื่อมต่อขั้นตอน: Code → Build → Test → Provision → Deploy
[Source] → [Build] → [Test] → [Deploy]
CodeCommit CodeBuild CodeBuild CodeDeploy
GitHub Beanstalk
CloudFormation- Compatible กับ CodeCommit, CodeBuild, CodeDeploy, Elastic Beanstalk, CloudFormation
- รองรับ 3rd-party เช่น GitHub
- สามารถใส่ manual approval step ระหว่างขั้นตอนได้
AWS CodeArtifact
CodeArtifact คือบริการเก็บ + จัดการ software package + dependency artifact — ใช้แทนการ host artifact server เอง (เช่น Nexus, Artifactory)
- รองรับ Maven, Gradle (Java)
- รองรับ npm, yarn (JavaScript)
- รองรับ twine, pip (Python)
- รองรับ NuGet (.NET)
AWS CodeStar
CodeStar คือ unified UI สำหรับงาน software development — รวม CodeCommit + CodePipeline + CodeBuild + CodeDeploy + Beanstalk + EC2 ไว้ที่เดียว
- Quick start — setup project CI/CD ได้รวดเร็ว
- แก้ code บน cloud ได้ผ่าน Cloud9
- รวม dashboard issue tracking, team collaboration
AWS Cloud9
Cloud9 คือ cloud IDE บน browser — เขียน / run / debug code ได้จาก browser โดยไม่ต้องติดตั้งเครื่องมือบน local
- Browser-based IDE
- รองรับ real-time collaboration (pair programming)
- Integrate กับ CodeStar / CodeCommit ได้
AWS Systems Manager (SSM)
Systems Manager (SSM) คือชุดเครื่องมือจัดการ EC2 + on-premises servers ขนาด fleet — hybrid service — มีผลิตภัณฑ์ย่อยมากกว่า 10 ตัว
Patch Manager
Automate การ patch OS บน fleet — ตรวจสอบ compliance
Run Command
รัน command ข้าม server หลายตัวพร้อมกัน ไม่ต้อง SSH
Parameter Store
เก็บ config / secret — plain text หรือ encrypted (ผ่าน KMS)
Session Manager
เข้า EC2 ผ่าน browser หรือ CLI โดย ไม่ต้องใช้ SSH และไม่ต้องเปิด port 22
State Manager
บังคับ state ของ instance ให้อยู่ตามที่กำหนด
Inventory
เก็บข้อมูล software / OS / patch ของ fleet
AWS OpsWorks
OpsWorks คือ managed Chef + Puppet — เครื่องมือ configuration management automation ยอดอยู่ใน enterprise — ทางเลือกของ SSM
- Provision AWS resource ได้เฉพาะ (EC2, Database, Load Balancer, EBS)
- ไม่ได้จัดการ service อื่นๆ นอกเหนือจาก 4 ตัวนี้
- Hybrid: จัดการ on-premises ได้ด้วย
Deployment Services Comparison
ตารางเปรียบเทียบบริการ deployment / management พิจารณาตามสถานการณ์:
CloudFormation
AWS only — IaC สำหรับรีสอร์สทั้งหมด — repeat ข้าม region/account ได้
Elastic Beanstalk
AWS only — PaaS รองรับภาษา / framework จำกัด + Docker — รูปแบบ architecture รู้จักล่วงหน้า
CodeDeploy
Hybrid (AWS + on-prem) — deploy application code ลง server ที่มีอยู่
Systems Manager
Hybrid — จัดการ fleet (patch, run command, parameter, session)
OpsWorks
Hybrid — managed Chef / Puppet — configuration management
Developer Services Summary
สรุปบริการสำหรับ developer บน AWS:
CodeCommit
Git source control — เก็บ code repository
CodeBuild
Build + test code — สร้าง artifact
CodeDeploy
Deploy application ลง EC2 / on-prem
CodePipeline
Orchestrate CI/CD — ร้อยขั้นตอนทั้งหมด
CodeArtifact
เก็บ software package / dependency
CodeStar
Unified UI รวมทุกอย่างไว้ที่เดียว
Cloud9
Cloud IDE บน browser
CDK
IaC ด้วย programming language → CloudFormation