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

การสร้างโพรไวเดอร์แบบกำหนดเอง

ขยาย Terraform ให้ไกลกว่าการผสานรวมที่มีอยู่ ด้วยการทำความเข้าใจการทำงานของโพรไวเดอร์และเขียนโพรไวเดอร์แบบกำหนดเองด้วย Terraform Plugin Framework

บทเรียน 4 จาก 413 ขั้นตอน

การสร้างโพรไวเดอร์แบบกำหนดเอง เป็นบทเรียน Terraform Infrastructure as Code ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Terraform Infrastructure as Code และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Terraform Infrastructure as Code มีบทเรียนทั้งหมด 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
  • การแทนที่สำหรับการพัฒนาเปิดให้ทดสอบในเครื่อง ส่วนการทดสอบการยอมรับจะตรวจสอบพฤติกรรม
  • การเผยแพร่ต้องใช้แท็กและไบนารีที่ลงนามแล้ว
เริ่มต้นได้ฟรี

เรียนรู้ Terraform Infrastructure as Code ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
12
บทเรียน
48

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

บทเรียน “การสร้างโพรไวเดอร์แบบกำหนดเอง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างโพรไวเดอร์แบบกำหนดเอง”

ขยาย Terraform ให้ไกลกว่าการผสานรวมที่มีอยู่ ด้วยการทำความเข้าใจการทำงานของโพรไวเดอร์และเขียนโพรไวเดอร์แบบกำหนดเองด้วย Terraform Plugin Framework คุณปฏิบัติ 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. นโยบาย Sentinel เพื่อการกำกับดูแล
  3. Terraform Cloud และ Enterprise
  4. การสร้างโพรไวเดอร์แบบกำหนดเอง
← กลับไปที่ Terraform Infrastructure as Code