- OpenTofu内部構造
- プロバイダーメタデータ
プロバイダーメタデータ
状況によっては、プロバイダーが、モジュールがモジュール内のリソースとは無関係な情報を渡せるインターフェースを提供することが有益です。ただし、これはモジュールごとにスコープされます。
プロバイダーメタデータにより、プロバイダーは期待するメタデータフィールドを宣言できます。これにより、個々のモジュールは、プロバイダーの設定とは無関係に、メタデータを入力できます。プロバイダーの設定は多くの場合、モジュール間で共有されますが、プロバイダーメタデータは常にモジュール固有です。
プロバイダーメタデータは、主に、プロバイダーを開発したベンダーと同じベンダーが公式モジュールを開発する場合に、ベンダーがプロバイダー経由で各モジュールの使用状況統計を間接的に取得できるようにすることを目的としています。そのため、このドキュメントは、モジュール開発者ではなく、プロバイダー開発者の視点から説明されています。
このページでは、OpenTofuの技術的な詳細について説明します。OpenTofuを効果的に使用するために、これらの詳細を理解する必要はありません。詳細については、高度な機能に取り組むモジュール作成者とプロバイダー開発者のためにここに記載されています。
この機能はまだ実験段階であり、この機能を利用する方は、OpenTofuチームと連携して、機能の使用方法をチームが理解し、機能の開発においてユースケースが考慮されるようにしてください。
スキーマの定義
プロバイダーがモジュールから情報を受信するには、まず、受け入れることができるデータを厳密に定義する必要があります。これは、`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以上、およびメタデータが指定されている各プロバイダーの最低バージョン(使用されているスキーマがプロバイダーでサポートされた最初のバージョン)を指定することをお勧めします。