コマンド: 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
を実行する前に他の準備ステップ(設定の生成やクレデンシャルのアクティベートなど)を実行できます。
バックエンドの初期化
初期化中、ルート設定ディレクトリでバックエンド設定が参照され、指定された設定を使用して選択されたバックエンドが初期化されます。
バックエンド設定ブロックで変数を使用するには、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が現在の作業ディレクトリで通常読み書きするすべてのファイルを、指定されたディレクトリで一貫して検索するようにします。