มีจำหน่ายที่
[EN] https://www.bluebirz.net/en/lets-try-terraform-part-1/
[TH] https://www .bluebirz.net/th/lets-try-terraform-part-1-th/

Terraform เป็นหนึ่งในเครื่องมือ IaaC (Infrastructure as a Code) ที่มีชื่อเสียง เราสามารถใช้เพื่อจัดเตรียม สร้าง จัดระเบียบใหม่ จนกว่าจะมีการรื้อถอนทรัพยากรใดๆ ในแพลตฟอร์มที่รองรับ แน่นอนว่ารวมถึง GCP ด้วย

ทำไมต้องเทอร์ราฟอร์ม?

ผู้ให้บริการระบบคลาวด์ เช่น GCP มีวิธีที่สะดวกมากมายให้ผู้ใช้จัดการทรัพยากร ตัวอย่างเช่น UI ของเว็บ, gcloud, REST API เป็นต้น Terraform เป็นอีกหนึ่งในนั้นและได้รับความนิยมอย่างมากในแวดวง DevOps สำหรับงานนี้

ตามชื่อของมัน “เป็นรหัส” ช่วยให้สามารถจัดการได้เหมือนซอร์สโค้ดจริงๆ การกำหนดเวอร์ชัน CI/CD รวมถึงกระบวนการแบทช์ล้วนเป็นไปได้ ลาก่อนการคลิกทุกครั้งแล้วคัดลอกและวางเพื่อสร้าง VM หรืออย่างอื่นที่เสี่ยงต่อข้อผิดพลาดของมนุษย์

Terraform ได้รับการพัฒนาโดย HashiCorp และเป็นโอเพ่นซอร์ส เราสามารถเยี่ยมชมลิงค์นี้เป็นหน้าแรก



แนวคิด

Terraform ใช้งานได้กับสคริปต์ tf มีข้อเท็จจริงบางอย่างที่เราต้องจำไว้เป็นพื้นฐาน

  1. โดยปกติแล้วคำแนะนำจะบอกว่าสร้าง main.tf แต่ไม่มีข้อกำหนดเกี่ยวกับชื่อไฟล์ ต้องมีไฟล์ tf อย่างน้อย 1 ไฟล์เท่านั้น
  2. จะมีไฟล์ชื่อ terraform.tfstate และ terraform.tfstate.backup เป็นไฟล์ของรัฐ อย่าทำอะไรพวกเขาเลย มิฉะนั้นเราจะสูญเสียประวัติศาสตร์และเส้นทางทั้งหมด ในกรณีนั้นเราจำเป็นต้องนำเข้าการเปลี่ยนแปลงจากทรัพยากรจริง
  3. หนึ่งโฟลเดอร์จะมีไฟล์สถานะเพียงชุดเดียวเท่านั้น หมายความว่าสคริปต์ tf ทั้งหมดจะถูกดำเนินการ และเราไม่สามารถเลือกได้ว่าสคริปต์ใดที่จะไม่ถูกดำเนินการ

การติดตั้ง

ไปที่ลิงก์นี้และค้นหาวิธีการที่เหมาะกับคุณ ฉันเองชอบ brew



ขั้นตอนพื้นฐาน

1. เริ่มต้น

ก่อนอื่น เราต้องการสคริปต์ tf ตัวแรกที่มีคำหลัก provider เช่นนี้

คราวนี้เราตั้งชื่อมันว่า main.tf แต่โปรดทราบว่าเราอาจตั้งชื่อเป็นอย่างอื่นก็ได้ และผู้ให้บริการที่รองรับ Terraform จะแสดงอยู่ใน ลิงก์นี้ ครั้งนี้เราต้องการปรับใช้บน GCP ดังนั้นเราจึงเลือก "google"

ตรวจสอบให้แน่ใจว่าเราอยู่ในโฟลเดอร์แล้วจึงเรียกใช้

terraform init

มันจะเริ่มต้นแบ็กเอนด์และผู้ให้บริการที่เราเลือก ผลลัพธ์ควรเป็นเช่นนี้

เมื่อเสร็จแล้วเราจะเห็นโฟลเดอร์ใหม่ .terraform และไฟล์ใหม่ .terraform.lock.hcl คำสั่งเหล่านี้สร้างขึ้นโดยอัตโนมัติและเราไม่จำเป็นต้องทำการเปลี่ยนแปลงกับคำสั่งเหล่านั้น

2. เพิ่มทรัพยากร

เริ่มต้นแล้ว และตอนนี้เราสามารถจัดการทรัพยากรของเราได้โดยการแก้ไข main.tf คำสำคัญคือ resource

ไวยากรณ์จะเป็น:

resource "<resource_type>" "<resource_name>" {
  attribute1 = value1
  attribute2 = value2 
}

ประเภททรัพยากรต้องตรงกับรีจิสทรี Terraform สมมติว่าเรากำลังพัฒนาบน GCP เราสามารถตรวจสอบได้ที่ "ลิงก์นี้"

ชื่อทรัพยากรเป็นชื่อภายใน เราจะตั้งชื่ออะไรก็ได้ อย่างไรก็ตาม เราควรใช้หลักการตั้งชื่อ เช่น การมีประเภท โครงการ หรือวัตถุประสงค์แบบสั้น

คุณลักษณะขึ้นอยู่กับประเภททรัพยากร ตรวจสอบรีจิสทรีเพื่อดูรายละเอียด ค่านิยมของพวกเขาด้วย

3. ตรวจสอบ

แนวทางปฏิบัติที่ดีที่สุดคือการตรวจสอบก่อนดำเนินการขั้นตอนถัดไป ใช้คำสั่งนี้

terraform validate

ช่วยปกป้องทุกเหตุการณ์ได้มาก หากมีสิ่งผิดปกติเกิดขึ้นก็จะแจ้งให้ทราบ

อ๋อ ฉันลืมไปว่า location นั่นเป็นแอตทริบิวต์ที่จำเป็น ดังนั้นฉันสามารถแก้ไขได้ในขณะนี้

และยืนยันอีกครั้ง

โอเคเราไปกันต่อ

4. แผน

การตรวจสอบความถูกต้องเสร็จสิ้นแล้ว เราควรวางแผนตรวจสอบการเปลี่ยนแปลง

terraform plan

Terraform จะแสดงการเปลี่ยนแปลงทั้งหมดโดยเปรียบเทียบระหว่างสถานะปัจจุบันกับสคริปต์ tf ของเรา เราสามารถตรวจสอบอีกครั้งว่าจะมีการเปลี่ยนแปลงอะไรบ้างที่นี่ นอกจากนี้เรายังสามารถบันทึกแผนเพื่อใช้ต่อไปได้

5. ใช้

สคริปต์ถูกต้องและเป็นไปตามการเปลี่ยนแปลง เราสามารถดำเนินการนี้ได้อย่างมั่นคงเพื่อใช้การเปลี่ยนแปลง

terraform apply
terraform apply -auto-approve

ด้วยการตั้งค่าสถานะ -auto-approve เราสามารถบังคับให้ใช้การเปลี่ยนแปลงโดยไม่จำเป็นต้องพิมพ์ 'ใช่' เพื่อยืนยัน อย่างไรก็ตาม เราสามารถข้ามการตั้งค่าสถานะเพื่อตรวจสอบได้อีกครั้ง

ตอนนี้ที่ฝากข้อมูลถูกสร้างขึ้นตามรูปนี้

6. รัฐ

ทรัพยากรที่มีอยู่ทั้งหมดสามารถแสดงรายการได้โดยใช้คำสั่ง

terraform state list

จะมีทรัพยากรทั้งหมดที่เรานำไปใช้จนถึงตอนนี้

7. ทำลาย

สุดท้ายนี้ หากเราต้องการล้างทุกสิ่งที่เราทำ ใช่ทุกอย่าง เราควรรันคำสั่งนี้

terraform destroy
terraform destroy -auto-approve

ทรัพยากรที่มีอยู่ทั้งหมดจะถูกลบออก ทรัพยากรบางอย่างได้รับการปกป้องให้ลบออก และเราจำเป็นต้องตรวจสอบรีจิสทรีเพื่อเพิ่มแอตทริบิวต์บางอย่างสำหรับกรณีนั้น หากจำเป็น

ใช่ นี่เป็นเพียงพื้นฐานของ Terraform ฉันจะอัปเดตบทความถัดไปเกี่ยวกับเรื่องนี้

หวังว่าคุณจะพบวิธีที่ดีที่สุดในการจัดการโครงสร้างพื้นฐานของคุณให้ง่ายเหมือนกับการรัน Terraform

แล้วเจอกัน.