Prerequisites
มี instance หรือ Devices ที่ติดตั้ง Terraform ( )
Data ที่ต้องใช้ใน Terraform (สามารถหาได้จาก )
Provider
username
and password
: นำมาจากที่ผู้ใช้กรอกเข้าเว็ป portal
tenant_id
or tenant_name
: เอาไว้ระบุ project ที่เราจะใช้งาน Terraform สามารถหาได้จาก project_id หรือ project_name
Terraform version : รองรับversion >= 1.8.4
Openstack version : รองรับversion ~> 2.0.0
auth_url
: ต้องใช้ url นี้ ในการ Authentication
region
: เลือกพื้นที่ หรือ เขตในการสร้าง instance
Instance
image_id
หรือ image_name
: ใช้สำหรับกำหนด OS ให้กับ instance
flavor_id
หรือ flavor_name
: ใช้สำหรับกำหนด Machine Type ให้กับ instance
availability_zone
: ระบุพื้นที่ที่กำลังใช้งาน
key_pair
: จำเป็นต้องสร้าง key pair ก่อนจึงจะนำไปใช้งานได้
ซึ่งเมื่อสร้างเสร็จเเล้วจะได้ไฟล์ .pem สามารถใช้ remote เข้า instance ด้วยคำสั่ง
ssh -i [target = pathfile] username@hostname
security_groups
: สามารถระบุชื่อ security group เพื่อนำมาใช้ได้
Network
network_id
: เป็น id networkเเต่ละตัว ซึ่งสามารถนำไปใช้ในการสร้าง port เเละ subnet
pool
: เป็น External network ที่เป็น public ของเเต่ละ AZ ที่เราสามารถนำมาใช้สร้าง floating ip ใน Terraform
port_id
: id port ของ instance ตัวนั้นๆ
วิธีการสร้าง instance
สร้างไฟล์ openstack_provider.tf
Copy touch openstack_provider.tf
เเก้ไขไฟล์ openstack_provider.tf ดังนี้
Copy # Define required providers #กำหนด Provider สำหรับใช้งาน
terraform {
required_version = ">= 1.8.2"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 2.0.0"
}
}
}
# Configure the OpenStack Provider
provider "openstack" {
user_name = "xxxxxx" #user name ใช้ user เดียวกันกับที่ login ใน portal
password = "xxxxxx" #password ใช้ password เดียวกันกับที่ login ใน portal
tenant_name = "xxxxxx" #เป็น ID ของ tenant หากเว้นไว้จะใช้จากตัวเเปร OS_PROJECT_NAME ของ environment
auth_url = " https://identity-api.nipa.cloud"
region = "NCP-TH" #เขตหรือพื้นที่ใช้สำหรับสร้างตัว instance
}
ใช้คำสั่ง terraform init
เพื่อเริ่มใช้งาน terraform เป็นขั้นตอนแรกที่สำคัญในการเริ่มต้นใช้งาน Terraform เนื่องจากมันจะจัดเตรียมสภาพแวดล้อมให้พร้อมสำหรับการดำเนินการคำสั่ง Terraform อื่น ๆ เช่น terraform plan
หรือ terraform apply
เมื่อ init สำเร็จจะปรากฎ ผลลัพธ์ดังรูป
folder .terraform
และ file .terraform.lock.hcl
ที่เกิดขึ้นจากการใช้คำสั่ง terraform init
เมื่อทำการ init เรียบร้อย ก็จะสามารถเพิ่ม resource ต่างๆ เพื่อใช้จัดการ infrastructure ด้วย terraform ได้
สร้างไฟล์ ที่ชื่อว่า compute_instance.tf
Copy touch compute_instance.tf
ทำการเเก้ไขไฟล์ compute_instance.tf
Copy resource "openstack_networking_port_v2" "port_for_test" {
name = "openstack_networking_floatingip_associate_v2_port"
network_id = "{Network_id}" # network id
}
resource "openstack_compute_instance_v2" "myinstance" {
name = "myinstance" #ชื่อของ instance
flavor_id = "{flavor_id}" #ใส่ instance flavor id ที่ต้องการ
key_pair = "my_key_pair_name" #ใส่ชื่อ key pair ที่ generate จาก Portal
security_groups = ["default"]
availability_zone = "NCP-BKK" #สามารถเลือก availability_zone ได้
block_device {
uuid = "af3ea4e9-f664-4801-9b1a-59aa3c206342"
source_type = "image"
volume_size = 10
boot_index = 0
destination_type = "volume"
}
network {
port = openstack_networking_port_v2.port_for_test.id
}
}
ใช้คำสั่ง terraform plan
เพื่อตรวจสอบ script เเละดูว่ามีการเปลี่ยนแปลงใดจะเกิดขึ้นเมื่อใช้คำสั่ง terraform apply
ใช้คำสั่ง terraform apply
เพื่อสร้าง instance
หลังจากใช้คำสั่ง terraform จะถามว่าต้องการ perform action หรือไม่ ถ้าต้องการให้พิมพ์ yes ถ้าไม่ต้องการให้พิมพ์ no
หากสร้าง instance สำเร็จจะได้ผลลัพธ์ดังรูป
การ attach floating ip เข้ากับ instance
สร้างไฟล์ openstack_networking_floatingip.tf
Copy touch openstack_networking_floatingip.tf
เเก้ไขไฟล์ openstack_networking_floatingip.tf
Copy resource "openstack_networking_floatingip_v2" "floatip_1" {
pool = "Standard_Public_IP_Pool_NON" #ให้กรอกชื่อของ pool ที่มีอยู่ โดยจะต้องอยู่ใน AZ เดียวกัย Instances
}
สร้างไฟล์ openstack_networking_floatingip_associate.tf
Copy touch openstack_networking_floatingip_associate.tf
เเก้ไขไฟล์ openstack_networking_floatingip_associate.tf
Copy resource "openstack_networking_floatingip_associate_v2" "floating_ip_associate" {
floating_ip = openstack_networking_floatingip_v2.floatip_1.address #เป็นการนำ floating ip จาก resource ในข้อสองมาใส่
port_id = openstack_networking_port_v2.port_for_test.id
}
ใช้คำสั่ง terraform apply
เพื่อสร้าง floating ip เเละผูกเข้ากับ instance
หลังจากใช้คำสั่ง terraform จะถามว่าต้องการ perform action หรือไม่ ถ้าต้องการให้พิมพ์ yes ถ้าไม่ต้องการให้พิมพ์ no
หลังจากใช้คำสั่งเเล้วจะปรากฎผลลัพธ์ ดังรูป
วิธีการลบ Instance
terraform destroy
คำสั่งสำหรับลบ infrastructure ที่ถูกสร้างขึ้นทั้งหมดที่ถูกสร้างขึ้นด้วยไฟล์ .tf ใน folder นั้นๆ
หลังจากใช้คำสั่ง terraform จะถามว่าต้องการ perform action หรือไม่ ถ้าต้องการ ให้พิมพ์ yes ถ้าไม่ต้องการ ให้พิมพ์ no
จะได้ผลลัพธ์ดังรูป