カスタムプロバイダーの構築
プロバイダーの仕組みを理解し、Terraform Plugin Frameworkでカスタムプロバイダーを作成して、既存の統合以外へTerraformを拡張します。
「カスタムプロバイダーの構築」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
既存のプロバイダーでは不足する場合
レジストリはほとんどのプラットフォームをカバーしていますが、企業ではプロバイダーのない社内APIを使っていることがよくあります。カスタムプロバイダーを使えば、同じplan/applyのライフサイクルでTerraformからそれらのリソースを管理できます。
プロバイダーの仕組み
プロバイダーは、Terraformが起動し、gRPC経由で通信する独立したプラグインバイナリです。プラグインはTerraformのCRUD操作を、対象システムへのAPI呼び出しに変換します。
Plugin Framework
HashiCorpの最新のTerraform Plugin Framework(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のstateに書き戻します。
func (r *widgetResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
// call API, then save state
}Readでstateを正しい状態に保つ
Readメソッドは、実際のAPIからstateを更新します。リモートのリソースが存在しなくなった場合はstateから削除し、Terraformが再作成するplanを生成できるようにします。
受け入れテスト
プロバイダーでは、テスト環境に対して実際のplan/applyサイクルを実行する受け入れテストを使います。環境変数で制御し、誤って実行されないようにします。
TF_ACC=1 go test ./... -vローカル開発用オーバーライド
公開前にプロバイダーをテストするには、CLI設定でdev overrideを使います。これにより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メソッドを定義する。
- dev overrideでローカルテストを行い、受け入れテストで動作を検証する。
- 公開にはタグと署名済みバイナリが必要。
よくある質問
「カスタムプロバイダーの構築」レッスンは無料ですか?
はい。「カスタムプロバイダーの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「カスタムプロバイダーの構築」で何を学びますか?
プロバイダーの仕組みを理解し、Terraform Plugin Frameworkでカスタムプロバイダーを作成して、既存の統合以外へTerraformを拡張します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「カスタムプロバイダーの構築」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。