Coding Gun

ทำ Automation บน AWS ด้วย Terraform

ในยทความนี้เราจะใช้ terraform มาช่วยจัดการ resources ต่างๆบน AWS ลองมาดูกันว่ามีขั้นตอนยังไงบ้าง

ขั้นตอนที่ 1 สร้าง User Account สำหรับ terraform

สิ่งที่ต้องสร้างขึ้นมาใหม่คือ user account ซึ่งไม่ควรใช้ user ที่มีคนใช้งานอยู่เพราะ เพื่อความปลอดภัยเราควรจะแยก user account ของคนและระบบออกจากกันและเนื่องจาก terraform เป็น ระบบดังนั้นควรสร้าง user ใหม่ขึ้นมา โดยมีขั้นตอนต่างๆ ดังนี้

  1. เปิด AWS management console เข้าไปที่ IAM เลือก add user
  2. กรอก username
  3. เลือก access type เป็น programmatically (ไม่ต้องเลือก AWS Management Condole access)
  4. Set Permission ให้กับ account นี้ ด้วยการเลือก policy หรือ add user เข้าไปใน group
  5. Add tag(optional)
  6. Review ข้อมูลต่างๆให้ถูกต้อง แล้วกดปุ่ม Create user
  7. จะมีหน้าที่แสดง Access Key ID และ Secret Access Key ให้เรา copy เก็บไว้ใช้งาน(เพราะเรามองไม่เห็น Secret Access Key อีกแล้ว) หรือจะเลือก download เป็นไฟล์ csv ก็ได้

ขั้นตอนที่ 2 ติดตั้ง AWS CLI

เราจะแยกการติดตั้ง AWS CLI ออกเป็น 2 platform คือ Windows และ MacOS

การติดตั้ง AWS CLI บน Windows

  1. Download ไฟล์ setup AWS CLI ได้จากที่นี่

  2. Double click ไฟล์ AWSCLIV2.msi และ ทำตามขั้นตอนการติดตั้งโปรแกรมปกติ

  3. ตรวจสอบ aws cli ด้วยคำสั่ง

    C:\> aws --version
    

การติดตั้ง AWS CLI บน MacOS

  1. Download ไฟล์ setup ด้วยคำสั่งนี้
    $ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
    
  2. Install AWS CLI ด้วยคำสั่ง
    $ sudo installer -pkg AWSCLIV2.pkg -target /
    
  3. ตรวจสอบว่า aws cli ใช้งานได้หรือไม่ด้วยคำสั่ง
    $ aws --version
    

ถ้าการติดตั้งมีปัญหาแนะนำให้ไปอ่านวิธีการแก้ปัญหาต่างๆที่ Troubleshoot AWS CLI errors

ใส่ AWS credentials ไว้ใน Environment Variables

เราต้องนำ AWS Access Key ID กับ AWS Secret Access Key ที่เราได้มาตอน create user ก่อนหน้านี้ มาเก็บไว้ใน Environment Variables ด้วยคำสั่งนี้

ขั้นตอนที่ 3 ติดตั้ง terraform provider

หลังจากที่เรามี aws cli และ user account ที่พร้อมจะทำงานบน AWS แล้วสิ่งที่ต้องทำต่อไปคือ ติดตั้ง terraform provider เพราะ terraform ไม่ได้มีคำสั่งที่เกี่ยวของกับ aws เลยดังนั้นเราจึงต้่องใช้ terraform provider ซึ่ง provider นั้นสามารถเขาไปดูเอกสารการใช้งานได้ที่ terraform registry โดยที่ในขั้นตอนต่อไปเราจะติดตั้ง aws provider โดยเริ่มจาก

  1. สร้างไฟล์ main.tf และใส่เนื้อหานี้ลงไป

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

    หลังจากนั้นทำการติดต้ัง aws provider ด้วยคำสั่ง

    $ terraform init
    
  2. บอก aws provider ว่าจะเลือกทำงานบน region ไหน โดยเพิ่ม provider block เข้าไปใน main.tf และวางไว้ต่อจาก block ก่อนหน้า

    provider "aws" {
        region  = "ap-southeast-1"
    }
    
  3. สร้าง EC2 instance ด้วย resource block โดยวางไว้ใน main.tf เหมือนเดิม

    resource "aws_instance" "app_server" {
        # รหัสของ ami ต้องตรงกับ region ที่เรา deploy instance ลงไป
        # ami รหัสนี้ใช้ได้กับ region ap-southeast-1 เท่านั้น
        ami           = "ami-0464f90f5928bccb8"
        instance_type = "t2.micro"
    
        tags = {
            Name = "ExampleAppServerInstance"
        }
    }
    

เมื่อเราได้ไฟล์ main.tf ที่สมบูรณ์แล้วให้ตรวจสอบความถูกต้องด้วยคำสั่ง

$ terraform validate

หลังจากนั้นให้สร้าง ec2 instance ด้วยคำสั่ง

$ terraform apply 

เมื่อเสร็จครบทุกขั้นตอนแล้วไม่มีข้อผิดพลาด ให้กลับเข้าไปใน AWS Management Console แล้วเลือก EC2 instances ลองดูว่ามี ec2 instance ที่เป็น t2.micro และมี tag Name = “ExampleAppServerInstance” อยู่ และถ้า ec2 instance นี้ขึ้นสถานะเป็น running ก็ถือว่าเราสามารถทำ automation ได้อย่างสมบูรณ์

อ่านต่อเพิ่มเติมได้ที่นี่

Phanupong Permpimol
Follow me

Software Engineer ที่เชื่อในเรื่องของ Process เพราะเมื่อ Process ดี Product ก็จะดีตาม ปัจจุบันเป็นอาจารย์และที่ปรึกษาด้านการออกแบบและพัฒนา Software และ Web Security