本文へスキップ

プロバイダーメタデータ

状況によっては、プロバイダーが、モジュールがモジュール内のリソースとは無関係な情報を渡せるインターフェースを提供することが有益です。ただし、これはモジュールごとにスコープされます。

プロバイダーメタデータにより、プロバイダーは期待するメタデータフィールドを宣言できます。これにより、個々のモジュールは、プロバイダーの設定とは無関係に、メタデータを入力できます。プロバイダーの設定は多くの場合、モジュール間で共有されますが、プロバイダーメタデータは常にモジュール固有です。

プロバイダーメタデータは、主に、プロバイダーを開発したベンダーと同じベンダーが公式モジュールを開発する場合に、ベンダーがプロバイダー経由で各モジュールの使用状況統計を間接的に取得できるようにすることを目的としています。そのため、このドキュメントは、モジュール開発者ではなく、プロバイダー開発者の視点から説明されています。

スキーマの定義

プロバイダーがモジュールから情報を受信するには、まず、受け入れることができるデータを厳密に定義する必要があります。これは、`schema.Provider` 構造体の `ProviderMeta` プロパティを設定することで行えます。その値はプロバイダーの設定と同様に機能します。つまり、文字列のマップで、その文字列が受け入れる値を記述する `schema.Schema` が対応付けられます。

データの使用

OpenTofuがプロバイダーを呼び出す際に、`Create`、`Read`、`Update` 関数ですでに使用している `schema.ResourceData` を使用して、渡されるプロバイダーメタデータにアクセスできます。まず、スキーマに一致する構造体を定義し、その型の変数のポインタを渡して、`schema.ResourceData` の `GetProviderSchema` メソッドを呼び出します。変数にはプロバイダーメタデータが設定され、データの構造体へのパースに問題があった場合はエラーが返されます。

モジュールでのデータの指定

モジュールにデータを含めるには、モジュールの `terraform` ブロックの下に `provider_meta` というネストされたブロックを作成し、情報を受け渡そうとしているプロバイダーの名前を付けます。

コードブロック
terraform {
provider_meta "my-provider" {
hello = "world"
}
}

`provider_meta` ブロックは、プロバイダーが定義したスキーマと一致する必要があります。

モジュールのバージョン管理

この機能を利用するモジュールは、提供されたプロバイダーメタデータがプロバイダーで定義されたスキーマと一致し、実行されているOpenTofuのバージョンがプロバイダーメタデータ機能をサポートしていることを確認する必要があります。したがって、この機能を利用するモジュールは、最低でもOpenTofuバージョン0.13.0以上、およびメタデータが指定されている各プロバイダーの最低バージョン(使用されているスキーマがプロバイダーでサポートされた最初のバージョン)を指定することをお勧めします。