0Pricing
Terraform Infrastructure as Code · レッスン

カスタムプロバイダーの構築

プロバイダーの仕組みを理解し、Terraform Plugin Frameworkでカスタムプロバイダーを作成して、既存の統合以外へTerraformを拡張します。

「カスタムプロバイダーの構築」はCoddyKit上の無料Terraform Infrastructure as Codeレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTerraform Infrastructure as Code学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Terraform Infrastructure as Codeコースには全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チューター)、Terraform Infrastructure as Codeコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Terraform Infrastructure as Codeコースには全4レッスンが含まれています。

「カスタムプロバイダーの構築」で何を学びますか?

プロバイダーの仕組みを理解し、Terraform Plugin Frameworkでカスタムプロバイダーを作成して、既存の統合以外へTerraformを拡張します。 ブラウザで直接実行するハンズオンコードでTerraform Infrastructure as Codeを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Terraform Infrastructure as Codeを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTerraform Infrastructure as Codeは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン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に戻る