0Pricing
Terraform Infrastructure as Code · บทเรียน

การใช้ข้อมูลภายนอกและแม่แบบ

ดึงค่าไดนามิกเข้าสู่ Terraform ด้วยแหล่งข้อมูลภายนอก และสร้างไฟล์การตั้งค่าด้วยฟังก์ชัน templatefile

การใช้ข้อมูลภายนอกและแม่แบบ เป็นบทเรียน Terraform Infrastructure as Code ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Terraform Infrastructure as Code และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Terraform Infrastructure as Code มีบทเรียนทั้งหมด 4 บทเรียน

นอกเหนือจากแหล่งข้อมูลในตัว

คุณใช้แหล่งข้อมูลเพื่อสืบค้น AWS มาแล้ว บางครั้งข้อมูลที่ต้องการอยู่นอกผู้ให้บริการใด ๆ เช่น ผลลัพธ์จากสคริปต์เชลล์หรือ API ภายใน แหล่งข้อมูล external และฟังก์ชัน template ช่วยเติมเต็มช่องว่างนี้

แหล่งข้อมูล external

แหล่งข้อมูล external จะเรียกใช้โปรแกรมและอ่าน JSON จากเอาต์พุตมาตรฐานของโปรแกรม เป็นทางออกสำหรับตรรกะที่ Terraform ไม่สามารถแสดงได้โดยตรง

data "external" "git_sha" {
  program = ["bash", "./scripts/git_sha.sh"]
}

ข้อกำหนดของโปรแกรม

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

#!/bin/bash
echo '{"sha": "abc123"}'

การอ่านผลลัพธ์ภายนอก

เข้าถึงค่าที่ส่งคืนผ่านแผนที่ result ค่าทุกค่าจะเป็นสตริง ดังนั้นให้แปลงชนิดหากต้องการชนิดข้อมูลอื่น

resource "aws_instance" "app" {
  ami           = "ami-0abcd1234"
  instance_type = "t3.micro"

  tags = {
    GitSha = data.external.git_sha.result.sha
  }
}

เมื่อใดควรหลีกเลี่ยง external

แหล่งข้อมูล external จะทำงานทุกครั้งที่วางแผน และทำให้การทำซ้ำผลลัพธ์ไม่ได้หากสคริปต์ไม่กำหนดผลลัพธ์ตายตัว ควรใช้แหล่งข้อมูลของผู้ให้บริการจริงเมื่อมีให้ใช้ และสงวน external ไว้สำหรับกรณีที่ไม่มีทางเลือกจริง ๆ

การสร้างไฟล์ด้วย templatefile

ฟังก์ชัน templatefile จะอ่านแม่แบบ แทนที่ตัวแปร และส่งคืนสตริง เหมาะอย่างยิ่งสำหรับข้อมูลผู้ใช้ cloud-init และไฟล์การตั้งค่า

resource "aws_instance" "web" {
  ami           = "ami-0abcd1234"
  instance_type = "t3.micro"
  user_data = templatefile("init.tftpl", {
    hostname = "web-01"
  })
}

ไวยากรณ์แม่แบบ

ภายในไฟล์ .tftpl ให้แทรกค่าด้วยไวยากรณ์ดอลลาร์-วงเล็บปีกกา Terraform จะแทนที่ค่าด้วยตัวแปรที่ส่งเข้าไป

#!/bin/bash
hostnamectl set-hostname ${hostname}
echo 'Provisioned by Terraform'

ลูปในแม่แบบ

แม่แบบรองรับคำสั่งสำหรับการวนซ้ำ คำสั่ง for จะสร้างบรรทัดซ้ำตามจำนวนที่กำหนด ซึ่งมีประโยชน์สำหรับสร้างรายการโฮสต์

%{ for ip in ips ~}
server ${ip}:8080
%{ endfor ~}

แม่แบบในบรรทัดด้วย templatestring

สำหรับส่วนย่อยสั้น ๆ คุณสามารถไม่ใช้ไฟล์และใช้ templatestring (หรือ format รุ่นเก่า) เพื่อสร้างสตริงแบบไดนามิกโดยตรงในการตั้งค่า

locals {
  greeting = templatestring("Hello, $${name}!", { name = "Ops" })
}

การรวมทั้งสองอย่าง

รูปแบบที่ใช้กันทั่วไปคือ แหล่งข้อมูล external ดึงค่าที่เปลี่ยนแปลงได้ จากนั้น templatefile แทรกค่านั้นลงในการตั้งค่าที่สร้างเป็นข้อมูลผู้ใช้

user_data = templatefile("app.tftpl", {
  version = data.external.git_sha.result.sha
})

การรักษาให้การสร้างผลลัพธ์ทำซ้ำได้

เนื่องจากการเปลี่ยนแปลง user_data จะบังคับให้แทนที่อินสแตนซ์ จึงควรรักษาข้อมูลนำเข้าของแม่แบบให้คงที่ การป้อนค่าที่เปลี่ยนแปลงตลอดเวลา เช่น การประทับเวลา จะทำให้อินสแตนซ์ถูกสร้างใหม่ทุกครั้งที่ใช้การตั้งค่า

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับแหล่งข้อมูล external

ทบทวน: ข้อมูลนำเข้าแบบไดนามิกและแม่แบบ

คุณได้เพิ่มขีดความสามารถด้านข้อมูลของ Terraform แล้ว:

  • แหล่งข้อมูล external เรียกใช้สคริปต์ที่ส่งคืน JSON
  • templatefile สร้างการตั้งค่าและไฟล์ข้อมูลผู้ใช้
  • คำสั่งในแม่แบบรองรับลูปและการแทรกค่า
  • รักษาข้อมูลนำเข้าให้คงที่เพื่อหลีกเลี่ยงการแทนที่ที่ไม่ต้องการ

คำถามที่พบบ่อย

บทเรียน “การใช้ข้อมูลภายนอกและแม่แบบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การใช้ข้อมูลภายนอกและแม่แบบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Terraform Infrastructure as Code ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Terraform Infrastructure as Code มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ข้อมูลภายนอกและแม่แบบ”

ดึงค่าไดนามิกเข้าสู่ Terraform ด้วยแหล่งข้อมูลภายนอก และสร้างไฟล์การตั้งค่าด้วยฟังก์ชัน templatefile คุณปฏิบัติ Terraform Infrastructure as Code ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Terraform Infrastructure as Code หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Terraform Infrastructure as Code บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การใช้ข้อมูลภายนอกและแม่แบบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Terraform Infrastructure as Code นี้ได้ไหม

ได้ บทเรียน Terraform Infrastructure as Code ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสืบค้นข้อมูลด้วยแหล่งข้อมูล
  2. ตัวจัดเตรียม local และ remote exec
  3. ทรัพยากร Null และทริกเกอร์
  4. การใช้ข้อมูลภายนอกและแม่แบบ
← กลับไปที่ Terraform Infrastructure as Code