Aiven Terraform Provider v4：新機能

<font color="Grey">*[Aiven Terraform Provider v4: What's new](https://aiven.io/blog/aiven-terraform-provider-v4)の翻訳です。*</font>

2023年4月6日

# Aiven Terraform Provider v4: What's new

Aiven Terraform Provider 4.xは新しいTerraformプラグインフレームワークへの移行における重要なステップであり、より良いタイプチェックを提供します。詳細はこちらをご覧ください。

Terraformは、開発者や運用者がインフラをソフトウェアのように管理することを可能にする、強力なInfrastructure as Code (IaC)ツールです。Terraformの重要性は、組織がインフラストラクチャを大規模に自動化・管理し、ヒューマンエラーのリスクを減らし、環境間の一貫性を確保することを支援する能力にある。最近、Aivenは[Aiven Terraform Provider](https://registry.terraform.io/providers/aiven/aiven/latest/docs)のバージョン4.0.0をリリースし、Terraformを使ったデータインフラの管理をこれまで以上に簡単にする重要な変更がいくつかあります。このブログポストでは、Aiven Terraform Providerバージョン4.Xの新機能を詳しく見ていきます。


## Terraform SDKv2 から Terraform Plugin Framework へのパス


Terraformは古い[Terraform Plugin SDKv2](https://developer.hashicorp.com/terraform/plugin/sdkv2)の代替として新しい[Terraform Plugin Framework](https://developer.hashicorp.com/terraform/plugin/framework)をリリースしました。


Aiven Terraform Provider 4.Xでは、SDKv2から新しいフレームワークへの移行を開始しました。この移行を促進するために、Terraform Plugin SDKv2のポータビリティラッパーを利用して、Terraform Plugin Frameworkのサポートを追加しています。


## 文字列の代わりに厳密な型を使う


今回のリリースで最も大きな変更点は、スキーマフィールドで**文字列**の代わりに**厳密型**を使うようになったことです。Aiven Terraform Providerの以前のバージョンでは、フィールドの実際の型が何であれ、文字列インターフェースを提供していました。


例えば、`public_access.prometheus` は以前は `1` (string) でしたが、現在は `true` (boolean) です。リソース（またはデータソース）の型に関する最新情報は、[Aiven Terraform Provider docs](https://registry.terraform.io/providers/aiven/aiven/latest/docs)をご確認ください。


## 既存のTerraform状態の自動アップグレード


今回のリリースでは、リソースをv3.xからv4.0.0にアップグレードするための機能（Aiven `stateupgrader`パッケージ）を追加しました。Aiven Terraform Provider v3.5.0から、新しい値のフィールドやドキュメントなどを含むユーザー設定タイプを生成しています。これらのユーザー設定には、お気に入りのコードエディターでの自動補完サポートが付属しています。


しかし、以前のバージョンのプロバイダを使用して生成された状態ファイルの既存の値はどうなるのでしょうか？バージョン3.Xでは、この変更を導入することはできませんでした。


これらの値はすべて文字列でしたが、バージョン4.0.0からAiven Terraform Providerはすべてのフィールド値が実際のAPI型を持つことを期待しています。stateupgrader`パッケージはTerraformプログラムの状態をシームレスにアップグレードし、文字列型をこれらの型に変換します。


## `ip_filter`、`namespaces` (M3DB 用) およびその他の廃止予定事項


Terraformはあらゆるリソースを段階的に非推奨にしていく。リソースを非推奨にするには、次のメジャーリリースで **deprecated** としてマークする必要があります。例えば、`aiven_database`リソースはバージョン3.Xで**deprecated**とマークされ、バージョン4.Xで廃止されました。


スキーマフィールドを使用して厳格な型を使用する一環として、v4.X では `ip_filter` と `namespaces` (M3DB 用) を **deprecated** とマークし、それぞれ `ip_filter_string` と `namespaces_string` というエイリアスを作成した。v5.X では `ip_filter` と `namespaces` フィールドを完全に削除する予定である。


この変更は、これらのフィールドが長い間我々のAPIで複数の型を受け入れていたにもかかわらず、Terraformが厳格な型を強制するため、我々の側ではまだサポートしていなかったためである。代わりに `ip_filter_object` と `namespaces_object` が使えるようになり、リソースをより細かくカスタマイズできるようになりました。古いフィールドは非推奨としてマークされていますが、まだ存在しており、Aiven Terraform Providerのバージョン5.Xでのみ完全に置き換えられます。非推奨とマークされたリソースを使用しようとすると、ユーザーに警告が表示されます。


以下のデータソースとリソースはバージョン3.Xで非推奨とマークされ、現在は削除されています：


* aiven_database`、`aiven_service_user`、`aiven_vpc_peering_connection`。
* aiven_flink_table` および `aiven_flink_job` 。


## これは顧客にとって何を意味するのか？


Aiven Terraform Providerは最新のプロトコルバージョンである[Protocol Version 6](https://developer.hashicorp.com/terraform/plugin/terraform-plugin-protocol#protocol-version-6)に対応しました。この変更はお客様には透過的ですが、長期的な安定性を提供し、より迅速なバグ修正サイクルを可能にします。




| Aiven Terraform Providerのバージョン｜Terraform Protocolのバージョン互換性｜Terraform SDKv2またはTerraform Plugin Framework｜で検出されたタイプエラー
| --- | --- | --- | --- |
| 3.X｜4｜Terraform SDKv2｜Aiven バックエンド
| 4.X | 6 | Terraform SDKv2とプラグインフレームワークのように動作するラッパー | Aivenバックエンド
| 5.X｜6｜Terraformプラグインフレームワーク｜Terraformクライアント


次の例を見てみましょう。Aiven Terraform Provider 3.Xでは、整数のUSER CONFIGオプションフィールドに`"foo"`（文字列）を代入することができました。そのマニフェストを適用した結果、Aiven Terraform Providerバックエンドからエラーが発生すると、TerraformクライアントはAivenプラットフォームにAPIコールを行う必要があります。5.Xになれば、Terraformクライアント自身がエラーを出せるようになります。


これらの変更に伴い、Aiven Terraform Providerのバージョンを最新に保つことが重要です; 少なくともメジャーリリースについては。例えば、Aiven Terraform Provider v3.Xからv5.Xへの直接アップグレードを待っていた場合、移行がスムーズにいかなかったり、最悪の場合、全く動作しなかったりするかもしれません。Aiven Terraform Providerは常に[最新版](https://registry.terraform.io/providers/aiven/aiven/latest/)にアップデートしておくことをお忘れなく。）


## What's next?


現在、私たちのエンジニアはAiven Terraform Providerの次のバージョンに向けて、新しいTerraformプラグインフレームワークを利用できるようにリソースを更新しています。これにより、Terraform Plugin SDKからの移行が完了します。Terraform Plugin SDKの世界では、リソースは `null` 値を持つことができません - リソースが値を持っているか、空であるかのどちらかです - つまり、リソースの正しい状態を判断するために多くのカスタムチェックを行う必要があります。将来的に、Terraform Plugin Frameworkを使用してAiven Terraform Providerを構築する際には、リソースのパラメータにnull値を定義できるようになります。



Aiven Terraform Providerを使ったデータインフラの構築と管理が待ち遠しいです。まずは[Terraform public registry](https://registry.terraform.io/providers/aiven/aiven)にアクセスし、よく使われるソリューションについては[Aiven Terraform Cookbook](https://docs.aiven.io/docs/tools/terraform/reference/cookbook)をご覧ください。質問やフィードバックがあれば、遠慮なく[連絡](https://twitter.com/aiven_io)してください。