⚡ ใช้ Terraform หรือ AWS CDK ทำ Infrastructure as Code (IaC)

Sharing is caring!

บทนำ

ในยุคที่ระบบ 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
      });
    }
  }
  

ความแตกต่างหลัก

หัวข้อTerraformAWS 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

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *