
บทนำ
ในยุคที่ระบบ Cloud กลายเป็นหัวใจของการพัฒนาแอปพลิเคชัน การบริหารจัดการ Infrastructure ด้วยมือ หรือผ่าน Console นั้นไม่ตอบโจทย์อีกต่อไป เพราะยิ่งระบบใหญ่ขึ้นเท่าไร การ Config ทรัพยากรแบบ manual ก็ยิ่งทำให้เกิดความผิดพลาดง่ายขึ้น และไม่สามารถทำซ้ำ (reproducible) ได้อย่างมั่นใจ
แนวคิด Infrastructure as Code (IaC) จึงเข้ามาช่วยให้ Developer และ DevOps สามารถกำหนดโครงสร้างพื้นฐาน (เช่น EC2, S3, VPC, Lambda ฯลฯ) ด้วย “โค้ด” ที่สามารถ version control, review, และ deploy อัตโนมัติได้
IaC คืออะไร?
Infrastructure as Code คือแนวทางที่ใช้โค้ดหรือสคริปต์กำหนดสภาวะของระบบโครงสร้างพื้นฐาน เช่น สร้างเซิร์ฟเวอร์, กำหนดเครือข่าย, สร้างฐานข้อมูล ฯลฯ โดยใช้เครื่องมืออย่าง Terraform หรือ AWS Cloud Development Kit (CDK)
Terraform vs AWS CDK
Terraform
Terraform เป็นเครื่องมือจาก HashiCorp ที่ใช้ภาษาประเภท declarative (เช่น HCL) ในการบอกว่าเราต้องการ Infrastructure หน้าตาแบบไหน เช่น ต้องมี S3 Bucket กี่ใบ, EC2 ขนาดเท่าไร ฯลฯ แล้ว Terraform จะจัดการสร้างและอัปเดตให้ตรงตามสเปค
provider "aws" {
region = "ap-southeast-1"
}
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-terraform-demo-bucket"
acl = "private"
}
เมื่อสั่ง terraform apply ระบบจะสร้าง Bucket ใน AWS ให้ตามโค้ดนี้อย่างอัตโนมัติ
AWS CDK
AWS CDK ใช้แนวทางที่ “เขียนโค้ดจริง” เช่น Python, TypeScript หรือ Java เพื่อสร้าง Infrastructure บน AWS ได้โดยตรง ซึ่งเหมาะกับ Developer ที่คุ้นกับภาษาการเขียนโปรแกรมทั่วไป
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyBucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY
});
}
}
ความแตกต่างหลัก
| หัวข้อ | Terraform | AWS CDK |
|---|---|---|
| ภาษา | HCL (Declarative) | TypeScript, Python, Java, C# |
| Multi-Cloud | รองรับ | เฉพาะ AWS |
| Learning Curve | ง่ายกว่า | เหมาะกับนักพัฒนา |
| CI/CD Integration | ดีมาก | ดีเยี่ยม (ผ่าน CDK Pipelines) |
ตัวอย่าง: สร้าง Lambda + S3 ด้วย Terraform
resource "aws_lambda_function" "demo_function" {
filename = "lambda.zip"
function_name = "demo-lambda"
role = aws_iam_role.lambda_role.arn
handler = "index.handler"
runtime = "nodejs18.x"
}
resource "aws_s3_bucket" "demo_bucket" {
bucket = "my-demo-bucket"
}
ตัวอย่าง: สร้าง Lambda + API Gateway ด้วย AWS CDK
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
const myLambda = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_18_X,
code: lambda.Code.fromAsset('lambda'),
handler: 'index.handler'
});
new apigateway.LambdaRestApi(this, 'MyApi', {
handler: myLambda
});
การจัดการ State และ Version Control
Terraform เก็บ “state file” ไว้เพื่อรู้ว่า Infrastructure ปัจจุบันเป็นอย่างไร ส่วน CDK จะคอมไพล์เป็น CloudFormation Template ก่อน deploy ซึ่งทำให้สามารถ version control ได้เหมือนกัน

แนวทางที่แนะนำ
- ใช้ Terraform ถ้าคุณมีระบบ Multi-Cloud
- ใช้ AWS CDK ถ้าคุณอยู่ใน AWS เต็มตัว และอยากผสานกับโค้ดได้ดี
- ใช้ร่วมกับ CodePipeline เพื่อสร้างระบบ CI/CD สำหรับ IaC
สรุป
ไม่ว่าคุณจะเลือก Terraform หรือ AWS CDK ทั้งคู่ต่างช่วยให้คุณทำงานกับ Infrastructure ได้อย่างมีประสิทธิภาพ ปลอดภัย และสามารถทำซ้ำได้ในทุกสภาพแวดล้อม โดยเฉพาะเมื่อรวมเข้ากับระบบ CI/CD และ Cloud Monitoring อย่าง CloudWatch
บทส่งท้าย
การเรียนรู้ IaC คือก้าวแรกสู่การเป็น Developer ที่สามารถ “ควบคุมระบบทั้งหมดด้วยโค้ด” ซึ่งจะช่วยให้คุณสร้างระบบที่ Scale ได้, ตรวจสอบได้, และปรับปรุงได้อย่างต่อเนื่อง
🧭 คำค้น SEO:
Terraform, AWS CDK, Infrastructure as Code, IaC, CloudFormation, DevOps, AWS Developer, IaC บน AWS, Terraform vs CDK, Automate Infrastructure, AWS Architecture, IaC Pipeline, CI/CD AWS, IaC Best Practices