メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Infrastructure as Code (IaC): จัดการโครงสร้างพื้นฐานด้วยโค้ด

บทความนี้แนะนำ Infrastructure as Code (IaC) ซึ่งเป็นแนวคิดในการจัดการโครงสร้างพื้นฐานด้วยโค้ด เพื่อให้การ Provisioning เป็นไปอย่างอัตโนมัติ ลดข้อผิดพลาด และเพิ่...

Infrastructure as Code (IaC): จัดการโครงสร้างพื้นฐานด้วยโค้ด

ในบทก่อนหน้านี้ เราได้พูดถึง Continuous Delivery (CD) ซึ่งเป็นหัวใจสำคัญของการส่งมอบซอฟต์แวร์อย่างรวดเร็วและเชื่อถือได้ แต่การส่งมอบซอฟต์แวร์นั้นไม่ได้จบแค่ที่การ Deploy ตัว Application Code เท่านั้น โครงสร้างพื้นฐาน (Infrastructure) ที่ Application ของเราทำงานอยู่ก็มีความสำคัญไม่แพ้กัน ลองจินตนาการว่าคุณมี CD Pipeline ที่ดีเยี่ยม แต่ต้องมาเสียเวลากับการสร้าง Server, Config Network, หรือปรับแต่ง Load Balancer ด้วยมือทุกครั้งที่ต้องการ Deploy Application ใหม่ นั่นคงไม่ใช่เรื่องสนุกแน่ๆ

ดังนั้นในบทนี้ เราจะมาทำความรู้จักกับ Infrastructure as Code (IaC) ซึ่งเป็นแนวทางที่จะช่วยให้เราจัดการโครงสร้างพื้นฐานได้อย่างอัตโนมัติ เหมือนกับการเขียนโค้ดสำหรับ Application ของเรานั่นเอง

ความหมายและประโยชน์ของ IaC

Infrastructure as Code (IaC) คือแนวคิดในการจัดการและ Provisioning โครงสร้างพื้นฐาน (เช่น Server, Network, Load Balancer, Database) โดยใช้ไฟล์ Configuration ที่สามารถอ่านได้ด้วยเครื่อง (Machine-readable) แทนที่จะต้องทำการ Config ด้วยตนเองผ่าน GUI หรือ Command Line Interface (CLI)

พูดง่ายๆ ก็คือ เราจะเขียนโค้ดเพื่อบอกว่าเราต้องการให้โครงสร้างพื้นฐานของเรามีหน้าตาเป็นอย่างไร แล้วเครื่องมือ IaC จะทำการสร้างและจัดการโครงสร้างพื้นฐานให้เป็นไปตามที่เรากำหนดไว้

ประโยชน์ของการใช้ IaC:

  • ลดข้อผิดพลาด (Reduce Errors): การ Config ด้วยมือมีโอกาสผิดพลาดสูงมาก การใช้ IaC จะช่วยลดข้อผิดพลาดจากการพิมพ์ผิด หรือลืม Config บางอย่างไป
  • เพิ่มความเร็ว (Increase Speed): การสร้างและจัดการโครงสร้างพื้นฐานเป็นไปโดยอัตโนมัติ ทำให้เราสามารถ Deploy Application ได้เร็วขึ้น
  • ลดต้นทุน (Reduce Costs): การ Automation ช่วยลดเวลาและทรัพยากรที่ต้องใช้ในการจัดการโครงสร้างพื้นฐาน
  • เพิ่มความสอดคล้อง (Improve Consistency): โครงสร้างพื้นฐานทุกชุดจะถูกสร้างขึ้นตาม Configuration เดียวกัน ทำให้มั่นใจได้ว่าทุก Environment (เช่น Development, Staging, Production) มีความสอดคล้องกัน
  • จัดการได้ง่าย (Improve Manageability): โครงสร้างพื้นฐานถูกกำหนดไว้ในรูปแบบโค้ด ทำให้สามารถ Version Control, Review, และ Rollback ได้ง่าย
  • Self-Documenting Infrastructure: IaC scripts ทำหน้าที่เป็นเอกสารอ้างอิงที่ "มีชีวิต" เกี่ยวกับโครงสร้างพื้นฐาน ซึ่งแม่นยำกว่าเอกสารที่สร้างด้วยมือ

เครื่องมือ IaC ที่นิยมใช้

มีเครื่องมือ IaC มากมายให้เลือกใช้ แต่ละเครื่องมือก็มีจุดเด่นและข้อเสียที่แตกต่างกันไป ต่อไปนี้เป็นเครื่องมือที่ได้รับความนิยม:

  • Terraform: เป็นเครื่องมือ Open-Source ที่พัฒนาโดย HashiCorp เน้นการจัดการ Infrastructure ในลักษณะ Declarative (เราบอกว่าเราต้องการอะไร ไม่ใช่บอกว่าต้องทำอะไร) รองรับ Cloud Providers หลายราย (เช่น AWS, Azure, GCP) และ On-Premise Infrastructure
  • Ansible: เป็นเครื่องมือ Open-Source ที่พัฒนาโดย Red Hat เน้นการจัดการ Configuration และ Deployment ในลักษณะ Imperative (เราบอกว่าต้องทำอะไรบ้าง) เหมาะสำหรับการ Config Servers และ Deploy Applications
  • CloudFormation (AWS): เป็นบริการของ AWS ที่ช่วยให้เราจัดการ Infrastructure บน AWS โดยใช้ Template ในรูปแบบ JSON หรือ YAML
  • Azure Resource Manager (Azure): เป็นบริการของ Azure ที่ช่วยให้เราจัดการ Infrastructure บน Azure โดยใช้ Template ในรูปแบบ JSON
  • Google Cloud Deployment Manager (GCP): เป็นบริการของ GCP ที่ช่วยให้เราจัดการ Infrastructure บน GCP โดยใช้ Template ในรูปแบบ YAML

Trade-offs ในการเลือกเครื่องมือ IaC:

  • Declarative vs. Imperative: Terraform ใช้แนวทาง Declarative ซึ่งทำให้ง่ายต่อการเข้าใจและจัดการ แต่ Ansible ใช้แนวทาง Imperative ซึ่งทำให้มีความยืดหยุ่นมากกว่า
  • Cloud Provider Lock-in: CloudFormation, Azure Resource Manager, และ Google Cloud Deployment Manager ถูกผูกติดกับ Cloud Provider นั้นๆ แต่ Terraform และ Ansible สามารถใช้ได้กับหลาย Cloud Providers
  • Learning Curve: เครื่องมือแต่ละตัวมี Learning Curve ที่แตกต่างกัน Terraform อาจจะยากกว่าในช่วงแรก แต่ Ansible อาจจะยากกว่าเมื่อต้องจัดการ Infrastructure ที่ซับซ้อน

สำหรับบทนี้ เราจะเน้นไปที่ Terraform เนื่องจากเป็นเครื่องมือที่ได้รับความนิยมและมีความยืดหยุ่นสูง

การเขียน IaC Script (Terraform)

Terraform ใช้ภาษา HashiCorp Configuration Language (HCL) ในการเขียน Configuration File ไฟล์ Configuration เหล่านี้จะบอกว่าเราต้องการให้ Infrastructure ของเรามีหน้าตาเป็นอย่างไร

ตัวอย่าง: สร้าง AWS EC2 Instance ด้วย Terraform

สมมติว่าเราต้องการสร้าง AWS EC2 Instance โดยใช้ Terraform เราจะต้องสร้างไฟล์ที่ชื่อว่า main.tf (หรือชื่ออะไรก็ได้ที่มีนามสกุล .tf) และใส่ Code ดังนี้:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = "us-west-2" # เปลี่ยนเป็น Region ที่คุณต้องการ
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b7437d049889c" # เปลี่ยนเป็น AMI ID ที่คุณต้องการ
  instance_type = "t2.micro"
  tags = {
    Name = "Example EC2 Instance"
  }
}

คำอธิบาย:

  • terraform block: กำหนด Providers ที่ Terraform จะใช้ ในที่นี้คือ aws
  • provider "aws" block: กำหนด Provider Configuration สำหรับ AWS เช่น Region
  • resource "aws_instance" "example" block: กำหนด Resource ที่เราต้องการสร้าง ในที่นี้คือ aws_instance (EC2 Instance)
    • ami: Amazon Machine Image (AMI) ID ที่ใช้สำหรับ Instance
    • instance_type: Instance Type (ขนาดของ Instance)
    • tags: Tags ที่ใช้ระบุ Instance

ขั้นตอนการใช้งาน:

  1. ติดตั้ง Terraform: ดาวน์โหลดและติดตั้ง Terraform จาก https://www.terraform.io/downloads
  2. Config AWS Credentials: กำหนด AWS Credentials เพื่อให้ Terraform สามารถเข้าถึง AWS Account ของคุณได้ (สามารถใช้ AWS CLI หรือ Environment Variables)
  3. Initialize Terraform: รันคำสั่ง terraform init เพื่อ Initialize Terraform และดาวน์โหลด Providers ที่จำเป็น
  4. Plan: รันคำสั่ง terraform plan เพื่อดูว่า Terraform จะสร้าง, แก้ไข, หรือลบอะไรบ้าง
  5. Apply: รันคำสั่ง terraform apply เพื่อสร้าง Infrastructure ตามที่กำหนดไว้ใน Configuration File

หลังจากรันคำสั่ง terraform apply สำเร็จ Terraform จะทำการสร้าง EC2 Instance ใน AWS Account ของคุณ

แนวปฏิบัติที่ดี (Best Practices):

  • Version Control: เก็บ Configuration Files ไว้ใน Version Control System (เช่น Git) เพื่อให้สามารถติดตามการเปลี่ยนแปลงและ Rollback ได้
  • Modularization: แบ่ง Configuration Files ออกเป็น Modules เพื่อให้ง่ายต่อการ Re-use และ Manage
  • State Management: จัดการ Terraform State File อย่างระมัดระวัง (สามารถใช้ Terraform Cloud หรือ Remote Backend)
  • Variables: ใช้ Variables เพื่อทำให้ Configuration Files มีความยืดหยุ่นและสามารถปรับแต่งได้ง่าย

ตัวอย่างการใช้ Variables:

สร้างไฟล์ variables.tf:

variable "region" {
  type    = string
  default = "us-west-2"
  description = "AWS Region"
}

variable "ami" {
  type    = string
  default = "ami-0c55b7437d049889c"
  description = "AMI ID"
}

แก้ไขไฟล์ main.tf:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = var.region
}

resource "aws_instance" "example" {
  ami           = var.ami
  instance_type = "t2.micro"
  tags = {
    Name = "Example EC2 Instance"
  }
}

ตอนนี้เราสามารถเปลี่ยน Region และ AMI ID ได้โดยการแก้ไขไฟล์ variables.tf หรือโดยการกำหนด Environment Variables

สรุป:

Infrastructure as Code (IaC) เป็นแนวทางที่สำคัญในการจัดการโครงสร้างพื้นฐานอย่างอัตโนมัติ การใช้ IaC ช่วยลดข้อผิดพลาด เพิ่มความเร็ว ลดต้นทุน และเพิ่มความสอดคล้องในการ Deploy Application ของเรา Terraform เป็นเครื่องมือ IaC ที่ได้รับความนิยมและมีความยืดหยุ่นสูง การเรียนรู้ Terraform จะช่วยให้คุณสามารถจัดการ Infrastructure ได้อย่างมีประสิทธิภาพ

ในบทต่อไป เราจะมาพูดถึง Monitoring และ Logging ซึ่งเป็นสิ่งจำเป็นในการติดตามสถานะและประสิทธิภาพของ Application และ Infrastructure ของเรา

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る