#Pulumi คืออะไร

Pulumi เป็นเครื่องมือ Infrastructure as Code (IaC) สำหรับกำหนด จัดการ และปรับปรุงทรัพยากร Cloud ด้วยภาษาโปรแกรม เช่น TypeScript, Python, Go, C# และ Java แทนการเขียนไฟล์กำหนดค่าอย่างเดียว

#แนวคิดหลัก

  • Project: ชุดโค้ด IaC ของระบบ
  • Stack: สภาพแวดล้อมแยกกัน เช่น dev, staging, prod
  • Provider: ตัวเชื่อมต่อ API ของ AWS, Azure, Google Cloud, Kubernetes ฯลฯ
  • State: บันทึกสถานะทรัพยากรที่ Pulumi จัดการ
  • Preview: ตรวจสอบแผนเปลี่ยนแปลงก่อนลงมือจริง

#เปรียบเทียบกับ Terraform

ประเด็น Pulumi Terraform
ภาษา TypeScript, Python, Go, C#, Java ฯลฯ HCL เป็นหลัก
การใช้ฟังก์ชันและไลบรารี ใช้ความสามารถของภาษาโปรแกรม ใช้โมดูลและฟังก์ชัน HCL
การจัดการ State Pulumi Cloud หรือ backend ที่รองรับ Backend ที่กำหนด
Workflow pulumi preview, pulumi up terraform plan, terraform apply

#Workshop: สร้าง AWS S3 Bucket ด้วย Pulumi TypeScript

ต้องมี Node.js, Pulumi CLI และ AWS credentials ที่ได้รับสิทธิ์เพียงพอ อาจมีค่าใช้จ่ายจาก Cloud

#1. สร้างโครงการ

mkdir pulumi-s3-demo && cd pulumi-s3-demo
pulumi new aws-typescript

เลือกชื่อ Project, Stack และ AWS Region ตามที่ CLI ถาม

#2. เขียน index.ts

import * as aws from "@pulumi/aws";

const bucket = new aws.s3.BucketV2("demo-bucket", {
  tags: { Environment: "dev", ManagedBy: "Pulumi" },
});

export const bucketName = bucket.bucket;

#3. ตรวจสอบและ Deploy

pulumi preview
pulumi up
pulumi stack output bucketName

ตรวจสอบรายการเปลี่ยนแปลงก่อนตอบยืนยัน

#4. ลบทรัพยากรหลัง Workshop

pulumi destroy

หาก Bucket มีวัตถุอยู่ การลบอาจล้มเหลว ต้องจัดการข้อมูลภายในก่อน

#แนวทางใช้งานจริง

  1. แยก Stack ตาม environment และใช้การกำหนดสิทธิ์ขั้นต่ำ
  2. เก็บ Secret ผ่าน pulumi config set --secret หลีกเลี่ยงการฝังรหัสผ่านในโค้ด
  3. ตรวจสอบ pulumi preview ใน Pull Request ก่อนอนุมัติ Deployment
  4. กำหนด Policy, Tag และ Budget เพื่อควบคุมความเสี่ยงและค่าใช้จ่าย
  5. อย่าลืมว่าทรัพยากรบางชนิดอาจมีค่าใช้จ่ายแม้ไม่ได้ใช้งาน

#แหล่งเรียนรู้