การใช้ข้อมูลภายนอกและแม่แบบ
ดึงค่าไดนามิกเข้าสู่ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสืบค้นข้อมูลด้วยแหล่งข้อมูล
- ตัวจัดเตรียม local และ remote exec
- ทรัพยากร Null และทริกเกอร์
- การใช้ข้อมูลภายนอกและแม่แบบ