このバージョンには、プロバイダー定義関数とアルファ版からの大幅な改善が含まれています。
アルファ版と同様に、このバージョンも徹底的にテストしましたが、本番環境以外でのテストにコミュニティの皆様のご協力をお願いいたします。GitHubからコピーを入手し、GitHubのissueを使用してご意見をお聞かせください。
本番プロジェクトではこのリリースをテストしないでください!安定版ではありません!
ベータ版のダウンロード
ベータ版は、GitHubリリースページからのみ入手できます。お使いのプラットフォームに適したファイルを選択してください。いくつかのクイックリンクを以下に示します。
プラットフォーム/デバイス | ダウンロードリンク |
---|---|
デスクトップWindowsコンピューター (64ビット) | tofu_1.7.0-beta1_windows_amd64.zip |
MacOS (MacBook M1以降; ARM64) | tofu_1.7.0-beta1_darwin_arm64.tar.gz |
MacOS (MacBook M1以前; AMD64) | tofu_1.7.0-beta1_darwin_amd64.tar.gz |
Intel/AMD Linuxコンピューターまたはサーバー (AMD64) | tofu_1.7.0-beta1_linux_amd64.tar.gz |
ARMベースのLinuxコンピューター または Raspberry Pi 3以降 (ARM64) | tofu_1.7.0-beta1_linux_arm64.tar.gz |
上記のリリースについては、アーカイブを解凍すると、中に`tofu`バイナリがあります。スタンドアロンインストーラーを使用して、署名検証付きでリリースをダウンロードすることもできます。
プロバイダー定義関数
新しいTerraform Plugin SDKは、OpenTofuで直接使用できるプロバイダー定義関数のサポートを追加しました。これは、データソースを使用する場合と比較して大幅な改善であり、プロバイダー定義関数は状態ファイルのサイズを増やさず、記述するコードも少なくて済みます。
プロバイダー定義関数をテストするには、corefuncプロバイダー(Ryan Parman氏作成)を使用できます。
terraform {
required_providers {
corefunc = {
source = "northwood-labs/corefunc"
version = "1.4.0"
}
}
}
provider "corefunc" {
}
output "test" {
value = provider::corefunc::str_snake("Hello world!")
# Prints: hello_world
}
この機能の詳細な説明と、OpenTofuがこの分野にもたらす新しい独自の機能の一部に関心のある方は、4月24日のライブストリームにご参加ください。
ループ可能なインポートブロック
宣言的なインポートブロックにいくつかの改善を加えました。最も顕著なのは、ブロックに`for_each`命令を使用できるようになったことです。この機能に関する完全なドキュメントを用意しました。
以前のOpenTofuバージョンでは、`import`ブロックを使用してリソースを宣言的にインポートできました(例:)
resource "random_id" "test_id" {
byte_length = 8
}
import {
to = random_id.test_id
id = "Y2FpOGV1Mkk"
}
output "id" {
value = random_id.test_id.b64_url
}
この新しいバージョンでは、ループ内でリソースを宣言的にインポートすることもできます。
variable "server_ids" {
type = list(string)
}
resource "random_id" "test_id" {
byte_length = 8
count = 2
}
import {
to = random_id.test_id[tonumber(each.key)]
id = each.value
for_each = {
for idx, item in var.server_ids: idx => item
}
}
output "id" {
value = random_id.test_id.*.b64_url
}
上記の例では、変数からいくつかのランダムなIDを指定し、他のIDは自動的に生成されます。
状態の暗号化
状態の暗号化は、このリリースの主要機能の1つです。この機能に関する完全なドキュメントを用意しました。アルファリリース以降、暗号化されていない状態ファイルから暗号化された状態ファイルへの移行プロセスとロールバックメカニズムを刷新し、構文をより明確にしました。
この機能をテストする前に、状態ファイルの**バックアップを作成してください**。次に、次のブロックを追加して状態の暗号化を有効にすることができます。
terraform {
encryption {
key_provider "pbkdf2" "my_passphrase" {
## Enter a passphrase here:
passphrase = ""
}
method "aes_gcm" "my_method" {
keys = key_provider.pbkdf2.my_passphrase
}
## Remove this after the migration:
method "unencrypted" "migration" {
}
state {
method = method.aes_gcm.my_method
## Remove the fallback block after migration:
fallback{
method = method.unencrypted.migration
}
## Enable this after migration:
#enforced = true
}
}
}
次の構文を使用して移行を元に戻すことができます。
terraform {
encryption {
key_provider "pbkdf2" "my_passphrase" {
## Enter a passphrase here:
passphrase = ""
}
method "aes_gcm" "my_method" {
keys = key_provider.pbkdf2.my_passphrase
}
method "unencrypted" "migration" {
}
state {
method = method.unencrypted.migration
enforced = false
fallback{
method = method.aes_gcm.my_method
}
}
}
}
AWS、GCPアカウント、またはOpenBao/MPLライセンスのHashiCorp Vaultインストールにアクセスできる場合は、これらのキープロバイダーをテストすることもできます。
削除ブロック
削除ブロックを使用すると、状態ファイルからリソースを削除できますが、インフラストラクチャには残ります。この機能に関する完全なドキュメントを用意しました。まずリソースを作成してテストできます。
resource "local_file" "test" {
content = "Hello world!"
filename = "test.txt"
}
適用後、リソースを削除ブロックで置き換えることができます。
removed {
from = local_file.test
}
次の適用後、`local_file.test`リソースが状態ファイルに存在しなくなりますが、`test.txt`ファイルはディスク上に存在するはずです。これで、削除ブロックを安全に削除できます。
組み込み関数の変更
このリリースには、いくつかの新しい関数と既存関数の変更も含まれています。
- 新関数: templatestring
- 新関数: base64gunzip
- 新関数: cidrcontains
- 新関数: urldecode
- 新関数: issensitive
- nonsensitive は、適用された値が機密情報でない場合、エラーを返さなくなりました。
- templatefile は、最大深度1024までの再帰をサポートするようになりました。
CLIの変更
CLIにもいくつかの変更があります。
tofu init
は、JSON 出力を得るために-json
フラグをサポートするようになりました。tofu plan
には、計画出力の短縮を行う-concise
フラグが追加されました。tofu console
は、Solaris と AIX で動作するようになりました。- CLI は、XDG ディレクトリ仕様をサポートするようになりました。
- エイリアスの変更
state list
→state ls
state mv
→state move
state rm
→state remove
テスト機能の変更
- Tofu は、テストフォルダから
.tfvars
ファイルを読み取るようになりました。
フィードバックのご提供
このプレビューリリースのテストにご協力いただきありがとうございます。フィードバックがありましたら、GitHub の issue をご利用いただくか、OpenTofu Slack でご連絡ください。