OpenTofu コミュニティの皆様、こんにちは!前回の OpenTofu リリース以降、.tf 言語に待望の改良を加えるべく尽力してきました。具体的には、**バックエンド、モジュールソース、および暗号化設定で変数を使用する機能**(初期変数/ローカル変数の評価)です。これは現在OpenTofu GitHub で最も票数の多い課題であり、OpenTofu の前身から様々な形で長年にわたって要望されてきたものです。
さらに、新しい OpenTofu の機能を使用しながら Terraform との互換性を維持できる機能と、`tofu test` でリソースとデータソースを上書きできる機能も追加しました。このリリースには、OpenTofu の様々な部分に対する多くの小さな改善とバグ修正も含まれており、変更ログに記載されています。
そこで皆様に助けを求めたいと思います。新しいアルファ版が何も壊さないようにあらゆる努力を払ってきましたが、このリリースのテストには皆様の助けが必要です。もし、新しい機能をテストしていただける**本番環境ではない**設定をお持ちでしたら、ぜひお試しいただき、GitHub の issue を使ってフィードバックをお寄せください。すべてがうまくいったという報告だけでも構いません。
このブログ記事では、新しいプレビューリリースのダウンロード方法と、各新機能の使用方法について説明します。
このリリースは本番プロジェクトではテストしないでください!安定版ではありません!
アルファ版のダウンロード
アルファ版はGitHub リリースページからのみ入手できます。お使いのプラットフォームに適したファイルを選択してください。いくつかのクイックリンクを以下に示します。
プラットフォーム/デバイス | ダウンロードリンク |
---|---|
デスクトップWindowsコンピューター (64ビット) | tofu_1.8.0-alpha1_windows_amd64.zip |
macOS (MacBook M1以降; ARM64) | tofu_1.8.0-alpha1_darwin_arm64.tar.gz |
macOS (MacBook M1以前; AMD64) | tofu_1.8.0-alpha1_darwin_amd64.tar.gz |
Intel/AMD Linux コンピューターまたはサーバー (AMD64) | tofu_1.8.0-alpha1_linux_amd64.tar.gz |
ARMベースのLinuxコンピューター または Raspberry Pi 3以降 (ARM64) | tofu_1.8.0-alpha1_linux_arm64.tar.gz |
上記のリリースについては、アーカイブを解凍すると`tofu`バイナリが見つかります。スタンドアロンインストーラーを使用して、署名検証付きでリリースをダウンロードすることもできます。
初期変数/ローカル変数の評価
この機能により、リソース、データソース、またはモジュール出力に依存しない限り、**バックエンド**、**モジュールソース**、**暗号化設定**に、変数とローカル変数を使用できます。ローカル変数が変数を参照する場合でも機能します。これは、.tf コードをより柔軟にするための改善の一環であり、今後のリリースでさらに改善が加えられる予定です。
`tofu init`コマンドは、`.tfvars`ファイルを読み取り、`-var`オプションと`-var-file`オプションを使用して変数を指定できるようになりました。このアルファ版では、不足している変数についてプロンプトが表示されないことに注意してください。これは、後で追加する機能です。`tofu init`は、静的評価に必要な変数が不足している場合、失敗します。
たとえば、S3 バックエンドと AWS プロバイダーに同じ設定を使用したい場合は、次のようにできます。
variable "aws_region" {
default = "us-east-1"
}
terraform {
backend "s3" {
region = var.aws_region
}
}
provider "aws" {
region = var.aws_region
}
これを使用して、レジストリ参照と Git URL の両方でモジュールのバージョンを管理することもできます。
locals {
aws_module_version = "5.6.1"
}
module "webserver" {
source = "terraform-aws-modules/ec2-instance/aws"
version = local.aws_module_version
// Other ec2_instance options
}
module "db" {
source = "https://github.com/terraform-aws-modules/terraform-aws-ec2-instance?ref=v${local.aws_module_version}"
// Other ec2_instance options
}
最後に、変数を使用してパスフレーズで暗号化を設定する方法を次に示します。
variable "passphrase" {
type = string
}
terraform {
encryption {
key_provider "pbkdf2" "my_passphrase" {
passphrase = var.passphrase
}
method "aes_gcm" "my_method" {
keys = key_provider.pbkdf2.my_passphrase
}
state {
method = method.aes_gcm.my_method
}
}
}
OpenTofu の上書きファイル:互換性の維持
Terraform にはない機能を OpenTofu に追加するようになったため、モジュール作成者は、モジュールの 2 つの複製を維持する必要なく、OpenTofu と Terraform の両方のコードを作成できる必要があります。OpenTofu 専用の ` .tofu` という名前のファイルを作成できるようになりました。`foo.tofu`という名前のファイルを作成した場合、OpenTofu は同名の`foo.tf`ファイルを無視します。この機能を使用して、Terraform 特有のコードを ` .tf` ファイルに配置し、` .tofu` ファイルで OpenTofu に対して上書きすることができます。
`tofu test`でのリソースの上書き
このバージョンでは、`tofu test`コマンドも改善されました。テストからリソース、データソース、およびモジュール全体を上書きできるようになり、従来のソフトウェアテストにおけるモックと同様の動作を作成できます。例として、AWS で `m6i.2xlarge` インスタンスを起動する次のコードを考えてみましょう。
provider "aws" {
region = "us-east-1"
}
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-24.04-amd64-server-*"]
}
owners = ["099720109477"]
}
resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id
instance_type = "m6i.2xlarge"
}
AMI ID をクエリしてインスタンスを起動する代わりに、次のようにテストコードを作成できます。
provider "aws" {
access_key = "foo"
secret_key = "bar"
skip_credentials_validation = true
skip_region_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
}
# This block disables refreshing the aws_ami.ubuntu data source
# and lets you manually specify the values:
override_data {
target = data.aws_ami.ubuntu
values = {
id = "ami-12345"
}
}
run "test" {
# This block disables provisioning the aws_instance.web resource:
override_resource {
target = aws_instance.web
values = {
# You can add values here.
}
}
assert {
condition = aws_instance.web.ami == "ami-12345"
error_message = "Incorrect AMI ID passed to aws_instance.web: ${aws_instance.web.ami}"
}
}
これは、プロビジョニング全体を完全にテストするわけではありませんが、実際の AWS アカウントを使用せずに、リソースを誤って接続することによって発生する可能性のあるエラーを強調表示します。同様に、`override_module` を使用してモジュール全体を上書きできます。
フィードバックの提供
このプレビューリリースのテストにご協力いただき、ありがとうございます。フィードバックがありましたら、GitHubのissueをご利用いただくか、OpenTofu Slackでチャットにご参加ください。