- OpenTofu言語
- OpenTofu設定
- バックエンド
- remote
バックエンドタイプ: remote
このバックエンドの代わりに、cloud
組み込み統合を使用することをお勧めします。cloud
オプションには、より優れたユーザーエクスペリエンスとより多くの機能が含まれています。
リモートバックエンドは、状態スナップショットを保存し、TF Automation and Collaboration Software(TACOS)バックエンドのCLI駆動型ランワークフロー操作を実行できるため、他のすべてのOpenTofuバックエンドの中で独特です。以前は「拡張」バックエンドと呼ばれていました。
TACOSプロバイダーが完全なリモート操作を有効にしている場合は、ログ出力がローカルターミナルに直接ストリーミングされ、TACOSランタイム環境内でtofu plan
やtofu apply
などのコマンドを実行できます。リモートプランと適用では、関連付けられたリモートワークスペースの変数値が使用されます。
また、TACOSをローカル操作で使用することもできます。この場合、状態のみがTACOSリモートバックエンドに保存されます。
コマンドサポート
機能の実装は、異なるTACOS間で異なる場合があります。
リモートバックエンドは、次のOpenTofuコマンドをサポートしています。
apply
console
destroy
fmt
get
graph
import
init
output
plan
providers
show
state
(すべてのサブコマンドをサポート: list, mv, pull, push, rm, show)taint
untaint
validate
version
workspace
ワークスペース
リモートバックエンドは、単一のリモートワークスペース、または複数の類似した名前のリモートワークスペース(networking-dev
やnetworking-prod
など)のいずれかで動作できます。バックエンド設定のworkspaces
ブロックは、どちらのモードを使用するかを決定します。
-
単一のリモートワークスペースを使用するには、
workspaces.name
をリモートワークスペースのフルネーム(networking-prod
など)に設定します。 -
複数のリモートワークスペースを使用するには、
workspaces.prefix
を、目的のリモートワークスペース名すべてで使用されるプレフィックスに設定します。たとえば、prefix = "networking-"
を設定すると、networking-dev
やnetworking-prod
のような名前のリモートワークスペースを使用できます。これは、単一のOpenTofu設定で使用される複数のOpenTofu CLIワークスペースを複数のリモートワークスペースにマッピングする場合に役立ちます。
バックエンド設定には、name
またはprefix
のいずれかが必要です。両方を省略したり、両方を設定すると、構成エラーが発生します。
tofu init
を実行したときに以前の状態が存在し、対応するリモートワークスペースが空であるか存在しない場合、OpenTofuはワークスペースを作成し、それに応じてリモート状態を更新します。ただし、ワークスペースでリモート操作に変数または特定のバージョンのOpenTofuが必要な場合は、リモート操作を実行する前にTACOSでリモートワークスペースを作成することをお勧めします。
ワークスペース名
OpenTofuは、コマンドラインでワークスペースを操作するために、共通プレフィックスのない短縮名を使用します。たとえば、prefix = "networking-"
の場合、現在の構成内のOpenTofu CLIワークスペースprod
に切り替えるには、tofu workspace select prod
を使用します。ただし、そのOpenTofu CLIワークスペースに対するplan
やapply
などのリモートOpenTofu操作は、リモートワークスペースnetworking-prod
で行われます。
このため、terraform.workspace
補間式は、リモートワークスペースがローカルまたはリモートで操作を実行するように構成されているかどうかに応じて、異なる結果を生成します。たとえば、prefix = "networking-"
で作成されたnetworking-prod
というリモートワークスペースでは、式は次のようになります。
- ローカル操作の場合、
terraform.workspace
=prod
- リモート操作の場合、
terraform.workspace
=networking-prod
設定例
設定からトークンを省略し、代わりにtofu login
を使用するか、CLI設定ファイルでcredentials
を手動で設定することをお勧めします。
基本設定
# Using a single workspace:
terraform {
backend "remote" {
hostname = "app.example.io"
organization = "company"
workspaces {
name = "my-app-prod"
}
}
}
# Using multiple workspaces:
terraform {
backend "remote" {
hostname = "app.example.io"
organization = "company"
workspaces {
prefix = "my-app-"
}
}
}
CLI入力の使用
# main.tf
terraform {
required_version = "~> 0.12.0"
backend "remote" {}
}
バックエンド設定ファイル
# config.remote.tfbackend
workspaces { name = "workspace" }
hostname = "app.example.io"
organization = "company"
バックエンドファイルを使用してtofu init
を実行
tofu init -backend-config=config.remote.tfbackend
データソース設定
data "terraform_remote_state" "foo" {
backend = "remote"
config = {
organization = "company"
workspaces = {
name = "workspace"
}
}
}
設定変数
クレデンシャルやその他の機密データを提供するには、環境変数を使用することをお勧めします。-backend-config
を使用したり、これらの値を設定に直接ハードコードしたりすると、OpenTofuはこれらの値を.terraform
サブディレクトリとプランファイルの両方に含めます。詳細については、クレデンシャルと機密データを参照してください。
次の設定オプションがサポートされています。
-
hostname
- (必須) 接続先のリモートバックエンドのホスト名。 -
organization
- (必須) ターゲットワークスペースが含まれる組織の名前。 -
token
- (オプション) リモートバックエンドとの認証に使用されるトークン。設定からトークンを省略し、代わりにtofu login
を使用するか、CLI設定ファイルでcredentials
を手動で設定することをお勧めします。 -
workspaces
- (必須) 使用するリモートワークスペースを指定するブロック。workspaces
ブロックは次のキーをサポートします。name
- (オプション) 1つのリモートワークスペースのフルネーム。設定すると、デフォルトワークスペースのみを使用できます。このオプションはprefix
と競合します。prefix
- (オプション) 1つ以上のリモートワークスペースの名前で使用されるプレフィックス。これらのすべてをこの設定で使用できます。フルワークスペース名はTACOSで使用され、短い名前(プレフィックスを除く)はOpenTofu CLIワークスペースのコマンドラインで使用されます。省略した場合、デフォルトワークスペースのみを使用できます。このオプションはname
と競合します。
別のリモートワークスペースから状態を取得するterraform_remote_state
データソースを設定する場合は、name
キーを使用する必要があります。prefix
キーは、リモートバックエンドのインスタンスを設定する場合にのみ使用することを目的としています。
コマンドライン引数
backend "remote"
ブロックを含む設定では、OpenTofuの状態をローカルで変更してからリモートワークスペースにプッシュするコマンドは、その動作を変更するために次のオプションを受け入れます。
-
-ignore-remote-version
- ローカルとリモートのOpenTofuのバージョンが一致するかどうかのチェックをオーバーライドし、不一致がある場合でも操作を続行します。通常、状態変更操作では、設定の一部としてリモートワークスペース用に選択されたOpenTofuバージョンと互換性のあるOpenTofu CLIのローカルバージョンを使用する必要があります。これは、ローカル操作がワークスペースのリモート実行環境がデコードできない新しい状態スナップショットを作成するのを防ぐためです。
このチェックをオーバーライドすると、リモートワークスペースがリモート操作を完了できなくなる可能性があるため、このオプションの使用はお勧めしません。
.terraformignoreを使用したアップロードからのファイル除外
CLI駆動の実行でリモートplan
またはapply
を実行する場合、設定ディレクトリのアーカイブがTACOSにアップロードされます。設定ディレクトリのルートにある.terraformignore
ファイルを使用して、アップロードから無視するパスを定義できます。このファイルが存在しない場合、アーカイブはデフォルトで以下を除外します。
.git/
ディレクトリ.terraform/
ディレクトリ(.terraform/modules
を除く)
.terraformignore
ファイルには、.gitignore
ファイルに含めるのと同じルールを含めることができます。
- コメント (
#
で始まる) または空白行は無視されます - ディレクトリを指定するには、パターンをスラッシュ
/
で終了します - 感嘆符
!
で始めることでパターンを否定します
.gitignore
とは異なり、設定ディレクトリのルートにある.terraformignore
のみが考慮されることに注意してください。