メインコンテンツへスキップ

バックエンドタイプ: remote

リモートバックエンドは、状態スナップショットを保存し、TF Automation and Collaboration Software(TACOS)バックエンドのCLI駆動型ランワークフロー操作を実行できるため、他のすべてのOpenTofuバックエンドの中で独特です。以前は「拡張」バックエンドと呼ばれていました。

TACOSプロバイダーが完全なリモート操作を有効にしている場合は、ログ出力がローカルターミナルに直接ストリーミングされ、TACOSランタイム環境内でtofu plantofu applyなどのコマンドを実行できます。リモートプランと適用では、関連付けられたリモートワークスペースの変数値が使用されます。

また、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-devnetworking-prodなど)のいずれかで動作できます。バックエンド設定のworkspacesブロックは、どちらのモードを使用するかを決定します。

  • 単一のリモートワークスペースを使用するには、workspaces.nameをリモートワークスペースのフルネーム(networking-prodなど)に設定します。

  • 複数のリモートワークスペースを使用するには、workspaces.prefixを、目的のリモートワークスペース名すべてで使用されるプレフィックスに設定します。たとえば、prefix = "networking-"を設定すると、networking-devnetworking-prodのような名前のリモートワークスペースを使用できます。これは、単一のOpenTofu設定で使用される複数のOpenTofu CLIワークスペースを複数のリモートワークスペースにマッピングする場合に役立ちます。

バックエンド設定には、nameまたはprefixのいずれかが必要です。両方を省略したり、両方を設定すると、構成エラーが発生します。

tofu initを実行したときに以前の状態が存在し、対応するリモートワークスペースが空であるか存在しない場合、OpenTofuはワークスペースを作成し、それに応じてリモート状態を更新します。ただし、ワークスペースでリモート操作に変数または特定のバージョンのOpenTofuが必要な場合は、リモート操作を実行する前にTACOSでリモートワークスペースを作成することをお勧めします。

ワークスペース名

OpenTofuは、コマンドラインでワークスペースを操作するために、共通プレフィックスのない短縮名を使用します。たとえば、prefix = "networking-"の場合、現在の構成内のOpenTofu CLIワークスペースprodに切り替えるには、tofu workspace select prodを使用します。ただし、そのOpenTofu CLIワークスペースに対するplanapplyなどのリモートOpenTofu操作は、リモートワークスペースnetworking-prodで行われます。

このため、terraform.workspace補間式は、リモートワークスペースがローカルまたはリモートで操作を実行するように構成されているかどうかに応じて、異なる結果を生成します。たとえば、prefix = "networking-"で作成されたnetworking-prodというリモートワークスペースでは、式は次のようになります。

  • ローカル操作の場合、terraform.workspace = prod
  • リモート操作の場合、terraform.workspace = networking-prod

設定例

基本設定

コードブロック
# 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"
}
}
}

設定変数

次の設定オプションがサポートされています。

  • hostname - (必須) 接続先のリモートバックエンドのホスト名。

  • organization - (必須) ターゲットワークスペースが含まれる組織の名前。

  • token - (オプション) リモートバックエンドとの認証に使用されるトークン。設定からトークンを省略し、代わりにtofu loginを使用するか、CLI設定ファイルcredentialsを手動で設定することをお勧めします。

  • workspaces - (必須) 使用するリモートワークスペースを指定するブロック。workspacesブロックは次のキーをサポートします。

    • name - (オプション) 1つのリモートワークスペースのフルネーム。設定すると、デフォルトワークスペースのみを使用できます。このオプションはprefixと競合します。
    • prefix - (オプション) 1つ以上のリモートワークスペースの名前で使用されるプレフィックス。これらのすべてをこの設定で使用できます。フルワークスペース名はTACOSで使用され、短い名前(プレフィックスを除く)はOpenTofu CLIワークスペースのコマンドラインで使用されます。省略した場合、デフォルトワークスペースのみを使用できます。このオプションはnameと競合します。

コマンドライン引数

backend "remote"ブロックを含む設定では、OpenTofuの状態をローカルで変更してからリモートワークスペースにプッシュするコマンドは、その動作を変更するために次のオプションを受け入れます。

  • -ignore-remote-version - ローカルとリモートのOpenTofuのバージョンが一致するかどうかのチェックをオーバーライドし、不一致がある場合でも操作を続行します。

    通常、状態変更操作では、設定の一部としてリモートワークスペース用に選択されたOpenTofuバージョンと互換性のあるOpenTofu CLIのローカルバージョンを使用する必要があります。これは、ローカル操作がワークスペースのリモート実行環境がデコードできない新しい状態スナップショットを作成するのを防ぐためです。

    このチェックをオーバーライドすると、リモートワークスペースがリモート操作を完了できなくなる可能性があるため、このオプションの使用はお勧めしません。

.terraformignoreを使用したアップロードからのファイル除外

CLI駆動の実行でリモートplanまたはapplyを実行する場合、設定ディレクトリのアーカイブがTACOSにアップロードされます。設定ディレクトリのルートにある.terraformignoreファイルを使用して、アップロードから無視するパスを定義できます。このファイルが存在しない場合、アーカイブはデフォルトで以下を除外します。

  • .git/ディレクトリ
  • .terraform/ディレクトリ(.terraform/modulesを除く)

.terraformignoreファイルには、.gitignoreファイルに含めるのと同じルールを含めることができます。

  • コメント (# で始まる) または空白行は無視されます
  • ディレクトリを指定するには、パターンをスラッシュ / で終了します
  • 感嘆符 ! で始めることでパターンを否定します

.gitignoreとは異なり、設定ディレクトリのルートにある.terraformignoreのみが考慮されることに注意してください。