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

コマンド: init

tofu initコマンドは、OpenTofu構成ファイルを含む作業ディレクトリを初期化します。これは、新しいOpenTofu構成を記述した後、または既存の構成をバージョン管理からクローンした後、最初に実行する必要があるコマンドです。このコマンドは複数回実行しても安全です。

使用法

使用法: tofu init [オプション]

このコマンドは、現在の作業ディレクトリをOpenTofuで使用するために準備するために、いくつかの異なる初期化ステップを実行します。これらの詳細については、以下のセクションで説明しますが、ほとんどの場合、これらの個々のステップについて心配する必要はありません。

このコマンドは、構成の変更に合わせて作業ディレクトリを最新の状態にするために、複数回実行しても常に安全です。後続の実行でエラーが発生する可能性がありますが、このコマンドが既存の構成や状態を削除することはありません。

このコマンドには、モジュールソースおよびバックエンド構成ブロックで使用される変数の値の割り当てが必要です。詳細については、ルートモジュール変数への値の割り当てを参照してください。

一般的なオプション

次のオプションは、すべての(またはいくつかの)初期化ステップに適用されます。

  • -input=true 必要に応じて入力を求めます。falseの場合、入力が必要な場合はエラーが発生します。

  • -lock=false 状態関連の操作中に状態ファイルのロックを無効にします。

  • -lock-timeout=<期間> OpenTofuが状態ロックの取得を待機する時間を上書きします。デフォルトは0s(ゼロ秒)です。これにより、ロックが別のプロセスによって既に保持されている場合、即座に失敗します。

  • -no-color コマンド出力の色コードを無効にします。

  • -upgrade 各インストールステップの一部としてモジュールとプラグインをアップグレードすることを選択します。詳細については、以下のセクションを参照してください。

  • -json テキストエディターの統合やその他の自動化システムでの使用に適した、機械可読なJSON形式で出力を作成します。常に色を無効にします。

  • -var 'NAME=VALUE' - 構成のルートモジュールで宣言された単一の入力変数の値を設定します。このオプションを複数回使用して、複数の変数を設定します。詳細については、コマンドラインでの入力変数を参照してください。

  • -var-file=FILENAME - "tfvars"ファイルの定義を使用して、構成のルートモジュールで宣言された潜在的に多くの入力変数の値を設定します。このオプションを複数回使用して、複数のファイルから値を含めます。

-varおよび-var-fileオプション以外にも、ルートモジュールの入力変数の値を設定するいくつかの方法があります。詳細については、ルートモジュール変数への値の割り当てを参照してください。

ソースモジュールのコピー

デフォルトでは、tofu initは作業ディレクトリに構成が既に含まれていると想定し、その構成を初期化しようとします。

オプションで、-from-module=MODULE-SOURCEオプションを使用して空のディレクトリに対してinitを実行できます。その場合、他の初期化ステップが実行される前に、指定されたモジュールがターゲットディレクトリにコピーされます。

この特別な操作モードは、2つのユースケースをサポートしています。

  • バージョン管理ソースが指定されている場合、バージョン管理から構成をチェックアウトし、その作業ディレクトリを初期化するための短縮形として機能します。

  • ソースがの構成を参照している場合、新しい構成の基礎として使用するためにローカルディレクトリにコピーできます。

日常的な使用では、バージョン管理システムの独自のコマンドを使用して、バージョン管理から設定を個別にチェックアウトすることを推奨します。これにより、必要に応じてバージョン管理システムに追加のフラグを渡し、tofu initを実行する前に他の準備ステップ(設定の生成やクレデンシャルのアクティベートなど)を実行できます。

バックエンドの初期化

初期化中、ルート設定ディレクトリでバックエンド設定が参照され、指定された設定を使用して選択されたバックエンドが初期化されます。

すでに初期化済みのバックエンドでinitを再実行すると、作業ディレクトリが新しいバックエンド設定を使用するように更新されます。バックエンド設定を更新するには、-reconfigureまたは-migrate-stateのいずれかを指定する必要があります。

-migrate-stateオプションは、既存の状態を新しいバックエンドにコピーしようとし、変更された内容によっては、ワークスペース状態の移行を確認するためのインタラクティブなプロンプトが表示される場合があります。-force-copyオプションは、これらのプロンプトを抑制し、移行に関する質問に「はい」と回答します。-force-copyを有効にすると、-migrate-stateオプションも自動的に有効になります。

-reconfigureオプションは、既存の設定を無視し、既存の状態の移行を防ぎます。

バックエンド設定をスキップするには、-backend=falseを使用します。他の初期化ステップには初期化されたバックエンドが必要なため、このフラグは、作業ディレクトリが特定のバックエンドに対してすでに以前に初期化されている場合にのみ使用することを推奨します。

-backend-config=...オプションは、バックエンド設定が動的または機密であり、設定ファイルで静的に指定できない場合に、部分的なバックエンド設定に使用できます。

子モジュールのインストール

初期化中、設定でmoduleブロックが検索され、参照されているモジュールのソースコードが、source引数に指定された場所から取得されます。

すでにインストールされているモジュールでinitを再実行すると、最後のinit以降に設定に追加されたモジュールのソースがインストールされますが、すでにインストールされているモジュールは変更されません。この動作をオーバーライドして、すべてのモジュールを利用可能な最新のソースコードに更新するには、-upgradeを使用します。

子モジュールのインストールをスキップするには、-get=falseを使用します。他の初期化ステップは、モジュールツリーが完了した場合にのみ完了できるため、このフラグは、作業ディレクトリが子モジュールですでに以前に初期化されている場合にのみ使用することを推奨します。

プラグインのインストール

ほとんどのOpenTofuプロバイダーは、OpenTofuとは別にプラグインとして公開されています。初期化中、OpenTofuは設定でプロバイダーへの直接および間接的な参照を検索し、それらのプロバイダーのプラグインをインストールしようとします。

パブリックOpenTofuレジストリまたはサードパーティのプロバイダーレジストリで公開されているプロバイダーの場合、tofu initは必要なプロバイダープラグインを自動的に検索、ダウンロード、インストールします。プロバイダーを元のレジストリからインストールできない、またはインストールしたくない場合は、CLI設定のプロバイダーインストール設定を使用して、OpenTofuがプロバイダーをインストールする方法をカスタマイズできます。

各モジュールに必要なプロバイダーの指定方法の詳細については、プロバイダー要件を参照してください。

インストールが成功すると、OpenTofuは選択したプロバイダーに関する情報を依存関係ロックファイルに書き込みます。このファイルをバージョン管理システムにコミットして、将来OpenTofuでtofu initを再度実行する際に、OpenTofuがまったく同じプロバイダーバージョンを選択するようにする必要があります。OpenTofuに依存関係ロックファイルを無視して、より新しいバージョンのインストールを検討させたい場合は、-upgradeオプションを使用します。

次のオプションを使用して、tofu initのプラグインの動作を変更できます

  • -upgrade:以前に選択したすべてのプラグインを、設定のバージョン制約に準拠する最新バージョンにアップグレードします。これにより、OpenTofuは依存関係ロックファイルに記録された選択を無視し、構成されたバージョン制約に一致する利用可能な最新バージョンを採用します。
  • -plugin-dir=PATH:CLI設定でfilesystem_mirrorとして構成されているかのように、指定されたディレクトリからのみプラグインを読み取るようにプラグインのインストールを強制します。特定のファイルシステムミラーを日常的に使用する場合は、OpenTofuのインストール方法をグローバルに構成することを推奨します。-plugin-dirは、プロバイダープラグインのローカルビルドをテストしている場合など、例外的な状況での一時的なオーバーライドとして使用できます。
  • -lockfile=MODE:依存関係ロックファイルモードを設定します。

ロックファイルモードの有効な値は次のとおりです

  • readonly:ロックファイルの変更を抑制しますが、すでに記録されている情報に対してチェックサムを検証します。これは-upgradeフラグと競合します。サードパーティの依存関係管理ツールでロックファイルを更新する場合は、明示的に変更するタイミングを制御すると便利です。

自動化でのtofu initの実行

OpenTofuを構成管理およびデプロイメントパイプラインの主要な部分として使用するチームの場合、実行間の整合性を確保し、バージョン管理フックとの統合などの他の興味深い機能を提供するために、自動化でOpenTofuの実行を調整することが望ましい場合があります。

このような環境でinitを実行する際には、必要に応じてプラグインをローカルで利用できるようにして、繰り返し再インストールを回避するなど、いくつかの特別な考慮事項があります。

異なる設定ディレクトリの渡し方

ワークフローがルートモジュールディレクトリのオーバーライドに依存している場合は、-chdirグローバルオプションを代わりに使用します。これはすべてのコマンドで機能し、OpenTofuが現在の作業ディレクトリで通常読み書きするすべてのファイルを、指定されたディレクトリで一貫して検索するようにします。