Terraform with Openstack
ใน Tutorials นี้จะเป็นการใช้ Terraform ในการสร้าง instance สำหรับผู้ที่ไม่เคยใช้ Terraform ในการทำ โดยจะเริ่ม Guide ตั้งเเต่สิ่งที่ต้องเตรียมก่อนสร้าง(Prerequisites) การหา data เเละ Resource ที่จำเป็น
Prerequisites
มี instance หรือ Devices ที่ติดตั้ง Terraform (How to install)
การกำหนด Provider (OpenStack Provider)
Data ที่ต้องใช้ใน Terraform (สามารถหาได้จาก space.nipa.cloud)
Provider
usernameandpassword: นำมาจากที่ผู้ใช้กรอกเข้าเว็ป portaltenant_idortenant_name: เอาไว้ระบุ project ที่เราจะใช้งาน Terraform สามารถหาได้จาก project_id หรือ project_nameTerraform version : รองรับversion >= 1.8.4
Openstack version : รองรับversion ~> 2.0.0
auth_url: ต้องใช้ url นี้ https://identity-api.nipa.cloud ในการ Authenticationregion: เลือกพื้นที่ หรือ เขตในการสร้าง instance
Instance
image_idหรือimage_name: ใช้สำหรับกำหนด OS ให้กับ instanceflavor_idหรือflavor_name: ใช้สำหรับกำหนด Machine Type ให้กับ instanceavailability_zone: ระบุพื้นที่ที่กำลังใช้งานNCP-BKK
NCP-BKK2
NCP-NON
NCP-KKN
key_pair: จำเป็นต้องสร้าง key pair ก่อนจึงจะนำไปใช้งานได้ซึ่งเมื่อสร้างเสร็จเเล้วจะได้ไฟล์ .pem สามารถใช้ remote เข้า instance ด้วยคำสั่ง
ssh -i [target = pathfile] username@hostnamesecurity_groups: สามารถระบุชื่อ security group เพื่อนำมาใช้ได้
Network
network_id: เป็น id networkเเต่ละตัว ซึ่งสามารถนำไปใช้ในการสร้าง port เเละ subnetpool: เป็น External network ที่เป็น public ของเเต่ละ AZ ที่เราสามารถนำมาใช้สร้าง floating ip ใน Terraformport_id: id port ของ instance ตัวนั้นๆ
วิธีการสร้าง instance
สร้างไฟล์ openstack_provider.tf
touch openstack_provider.tf
เเก้ไขไฟล์ openstack_provider.tf ดังนี้
# 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
}Note : สามารถอ่านข้อมูลเพิ่มเติมได้ที่ openstack provider
ใช้คำสั่ง
terraform initเพื่อเริ่มใช้งาน terraform เป็นขั้นตอนแรกที่สำคัญในการเริ่มต้นใช้งาน Terraform เนื่องจากมันจะจัดเตรียมสภาพแวดล้อมให้พร้อมสำหรับการดำเนินการคำสั่ง Terraform อื่น ๆ เช่นterraform planหรือterraform apply
terraform init
เมื่อ init สำเร็จจะปรากฎ ผลลัพธ์ดังรูป

folder .terraform และ file .terraform.lock.hcl ที่เกิดขึ้นจากการใช้คำสั่ง terraform initเมื่อทำการ init เรียบร้อย ก็จะสามารถเพิ่ม resource ต่างๆ เพื่อใช้จัดการ infrastructure ด้วย terraform ได้
สร้างไฟล์ ที่ชื่อว่า compute_instance.tf
touch compute_instance.tf
ทำการเเก้ไขไฟล์ compute_instance.tf
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
}
}Note : สามารถอ่านข้อมูลเพิ่มเติมได้ที่ openstack_compute_instance_v2 , openstack_networking_port_v2
ใช้คำสั่ง
terraform planเพื่อตรวจสอบ script เเละดูว่ามีการเปลี่ยนแปลงใดจะเกิดขึ้นเมื่อใช้คำสั่งterraform apply
terraform plan

ใช้คำสั่ง
terraform applyเพื่อสร้าง instance
terraform apply
หลังจากใช้คำสั่ง terraform จะถามว่าต้องการ perform action หรือไม่ ถ้าต้องการให้พิมพ์ yes ถ้าไม่ต้องการให้พิมพ์ no หากสร้าง instance สำเร็จจะได้ผลลัพธ์ดังรูป

โดย instance ที่สร้างจะปรากฎในหน้า space.nipa.cloud ที่หัวข้อ COMPUTE > Instances
การ attach floating ip เข้ากับ instance
สร้างไฟล์ openstack_networking_floatingip.tf
touch openstack_networking_floatingip.tfเเก้ไขไฟล์ openstack_networking_floatingip.tf
resource "openstack_networking_floatingip_v2" "floatip_1" {
pool = "Standard_Public_IP_Pool_NON" #ให้กรอกชื่อของ pool ที่มีอยู่ โดยจะต้องอยู่ใน AZ เดียวกัย Instances
}สร้างไฟล์ openstack_networking_floatingip_associate.tf
touch openstack_networking_floatingip_associate.tfเเก้ไขไฟล์ openstack_networking_floatingip_associate.tf
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 plan
terraform plan
ใช้คำสั่ง
terraform applyเพื่อสร้าง floating ip เเละผูกเข้ากับ instance
terraform apply
หลังจากใช้คำสั่ง terraform จะถามว่าต้องการ perform action หรือไม่ ถ้าต้องการให้พิมพ์ yes ถ้าไม่ต้องการให้พิมพ์ no
หลังจากใช้คำสั่งเเล้วจะปรากฎผลลัพธ์ ดังรูป

เมื่อตรวจสอบ Instance ในหน้า space.nipa.cloud จะพบว่า Instance จะมี External Ip ที่ทำให้ instance สามารถเข้าถูกเข้าถึงได้จากภายนอก
วิธีการลบ Instance
terraform destroy คำสั่งสำหรับลบ infrastructure ที่ถูกสร้างขึ้นทั้งหมดที่ถูกสร้างขึ้นด้วยไฟล์ .tf ใน folder นั้นๆ
terraform destroy
หลังจากใช้คำสั่ง terraform จะถามว่าต้องการ perform action หรือไม่ ถ้าต้องการ ให้พิมพ์ yes ถ้าไม่ต้องการ ให้พิมพ์ no
จะได้ผลลัพธ์ดังรูป

Last updated
Was this helpful?