การสร้างโพรไวเดอร์แบบกำหนดเอง
ขยาย Terraform ให้ไกลกว่าการผสานรวมที่มีอยู่ ด้วยการทำความเข้าใจการทำงานของโพรไวเดอร์และเขียนโพรไวเดอร์แบบกำหนดเองด้วย Terraform Plugin Framework
การสร้างโพรไวเดอร์แบบกำหนดเอง เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
เมื่อผู้ให้บริการที่มีอยู่ไม่เพียงพอ
รีจิสทรีรองรับแพลตฟอร์มส่วนใหญ่ แต่โดยทั่วไปองค์กรขนาดใหญ่มักมี API ภายในที่ไม่มีผู้ให้บริการ ผู้ให้บริการแบบกำหนดเองช่วยให้ Terraform จัดการทรัพยากรเหล่านั้นด้วยวงจร plan/apply เดียวกัน
ผู้ให้บริการทำงานอย่างไร
ผู้ให้บริการคือไบนารีปลั๊กอินแยกต่างหากที่ Terraform เปิดใช้งานและสื่อสารด้วยผ่าน gRPC ปลั๊กอินจะแปลการดำเนินการ CRUD ของ Terraform เป็นการเรียก API ไปยังระบบเป้าหมาย
เฟรมเวิร์กปลั๊กอิน
Terraform Plugin Framework สมัยใหม่ของ HashiCorp (Go) เป็นแนวทางที่แนะนำสำหรับสร้างผู้ให้บริการ โดยมาแทน SDKv2 รุ่นเก่า ผู้ให้บริการเขียนด้วย Go
import (
"github.com/hashicorp/terraform-plugin-framework/provider"
)การกำหนดผู้ให้บริการ
ประเภทผู้ให้บริการจะประกาศชื่อ รวมถึงทรัพยากรและแหล่งข้อมูลที่มีให้ใช้งาน
type widgetProvider struct{}
func (p *widgetProvider) Metadata(_ context.Context, _ provider.MetadataRequest, resp *provider.MetadataResponse) {
resp.TypeName = "widget"
}แบบแผนของทรัพยากร
ทรัพยากรแต่ละรายการจะประกาศแบบแผนของแอตทริบิวต์พร้อมชนิดและข้อมูลกำกับ นี่คือสิ่งที่ผู้ใช้กำหนดใน HCL
resp.Schema = schema.Schema{
Attributes: map[string]schema.Attribute{
"name": schema.StringAttribute{Required: true},
"id": schema.StringAttribute{Computed: true},
},
}การใช้งาน CRUD
ทรัพยากรจะใช้งาน Create, Read, Update และ Delete เมธอดแต่ละรายการจะเรียก API ของคุณและเขียนผลลัพธ์กลับลงในสถานะของ Terraform
func (r *widgetResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
// call API, then save state
}Read ทำให้สถานะตรงกับความเป็นจริง
เมธอด Read จะรีเฟรชสถานะจาก API จริง หากไม่พบทรัพยากรระยะไกลแล้ว ให้ลบทรัพยากรนั้นออกจากสถานะ เพื่อให้ Terraform วางแผนสร้างขึ้นใหม่
การทดสอบการยอมรับ
ผู้ให้บริการใช้การทดสอบการยอมรับ ซึ่งเรียกใช้วงจร plan/apply จริงกับสภาพแวดล้อมทดสอบ โดยควบคุมด้วยตัวแปรสภาพแวดล้อมเพื่อไม่ให้ทำงานโดยไม่ตั้งใจ
TF_ACC=1 go test ./... -vการแทนที่สำหรับการพัฒนาในเครื่อง
หากต้องการทดสอบผู้ให้บริการก่อนเผยแพร่ ให้ใช้การแทนที่สำหรับการพัฒนาในไฟล์กำหนดค่า CLI เพื่อให้ Terraform โหลดไบนารีในเครื่องของคุณ แทนการดาวน์โหลดจากรีจิสทรี
provider_installation {
dev_overrides {
"acme/widget" = "/home/dev/go/bin"
}
direct {}
}การเผยแพร่ผู้ให้บริการ
เผยแพร่ไปยังรีจิสทรีด้วยการติดแท็กการเผยแพร่และลงนามไบนารีด้วยคีย์ GPG จากนั้นผู้ใช้จึงประกาศผู้ให้บริการดังกล่าวใน required_providers
terraform {
required_providers {
widget = {
source = "acme/widget"
version = "~> 1.0"
}
}
}ข้อควรพิจารณาด้านการบำรุงรักษา
ผู้ให้บริการเป็นภาระผูกพันระยะยาว: การเปลี่ยนแปลง API ความเข้ากันได้ของรุ่น และเอกสาร ล้วนต้องได้รับการดูแล สำหรับความต้องการเฉพาะครั้ง แหล่งข้อมูล external หรือสคริปต์อาจเหมาะสมกว่าผู้ให้บริการแบบเต็มรูปแบบ
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับผู้ให้บริการแบบกำหนดเองของคุณ
ทบทวน: การขยายความสามารถของ Terraform
คุณได้เรียนรู้การสร้างผู้ให้บริการแบบกำหนดเอง:
- ผู้ให้บริการคือปลั๊กอิน Go ที่สื่อสารกับแกนหลักผ่าน gRPC
- Plugin Framework กำหนดแบบแผนและเมธอด CRUD
- การแทนที่สำหรับการพัฒนาเปิดให้ทดสอบในเครื่อง ส่วนการทดสอบการยอมรับจะตรวจสอบพฤติกรรม
- การเผยแพร่ต้องใช้แท็กและไบนารีที่ลงนามแล้ว
คำถามที่พบบ่อย
บทเรียน “การสร้างโพรไวเดอร์แบบกำหนดเอง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างโพรไวเดอร์แบบกำหนดเอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างโพรไวเดอร์แบบกำหนดเอง”
ขยาย Terraform ให้ไกลกว่าการผสานรวมที่มีอยู่ ด้วยการทำความเข้าใจการทำงานของโพรไวเดอร์และเขียนโพรไวเดอร์แบบกำหนดเองด้วย Terraform Plugin Framework คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างโพรไวเดอร์แบบกำหนดเอง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบมัลติคลาวด์และไฮบริดคลาวด์
- นโยบาย Sentinel เพื่อการกำกับดูแล
- Terraform Cloud และ Enterprise
- การสร้างโพรไวเดอร์แบบกำหนดเอง