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

コマンド: providers lock

tofu providers lock は、プロバイダーの依存関係情報を 依存関係ロックファイル に書き込むために、(デフォルトで) アップストリームのレジストリを参照します。

依存関係ロックファイルを更新する一般的な方法は、tofu init 中の通常のプロバイダーインストールによる副作用として行われますが、その自動化されたアプローチでは不十分な状況がいくつかあります。

  • ファイルシステムやネットワークミラーなどの代替プロバイダーインストール方法を使用する環境で OpenTofu を実行している場合、通常のプロバイダーインストールではプロバイダーのオリジンレジストリにアクセスしないため、OpenTofu は選択されたプロバイダーバージョンに対する可能なすべてのパッケージチェックサムを設定することができません。

    tofu lock を使用してプロバイダーの公式リリースチェックサムを依存関係ロックファイルに書き込むと、今後の tofu init 実行では、選択したミラーで利用可能なパッケージが、以前に記録された公式チェックサムと照合して検証されるため、ミラーが主張するプロバイダーパッケージを提供しているという確信がさらに高まります。

  • チームが Windows と Linux の両方など、複数の異なるプラットフォームで OpenTofu を実行しており、プロバイダーのアップストリームレジストリが最新のハッシュスキームを使用して署名付きチェックサムを提供できない場合、他のプラットフォームでの OpenTofu の後続の実行では、ロックファイルに追加のチェックサムが追加される可能性がありますtofu providers lock コマンドを使用して、使用する予定のすべてのプラットフォームのハッシュを事前に入力することで、それを回避できます。

使用法

使用法: tofu providers lock [オプション] [providers...]

このコマンドは、次の一般的なオプションを受け入れます。

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

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

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

追加のコマンドライン引数がない場合、tofu providers lock は、現在の作業ディレクトリ内の設定を分析して、依存するすべてのプロバイダーを見つけ、それらのプロバイダーに関する必要なデータをオリジンレジストリからフェッチし、依存関係ロックファイルを更新して、各プロバイダーの選択されたバージョンと、プロバイダー開発者の暗号署名でカバーされるすべてのパッケージチェックサムを含めます。

コマンドラインで1つ以上のプロバイダーソースアドレスをリストした場合、tofu providers lock はそれらのプロバイダーのみに処理を制限し、他のプロバイダーのロックエントリ(存在する場合)は変更されません。

次の追加オプションを使用して、デフォルトの動作をカスタマイズできます。

  • -fs-mirror=PATH - アップストリームレジストリではなく、指定されたローカルファイルシステムミラーディレクトリでプロバイダーパッケージを検索するようにOpenTofuに指示します。指定されたディレクトリは、通常のファイルシステムミラーディレクトリレイアウトを使用する必要があります。

  • -net-mirror=URL - アップストリームレジストリではなく、指定されたネットワークミラーサービスでプロバイダーパッケージを検索するようにOpenTofuに指示します。指定されたURLは、OpenTofuプロバイダーネットワークミラープロトコルを実装する必要があります。

  • -platform=OS_ARCH - このOpenTofu構成を使用する予定のプラットフォームを指定します。OpenTofuは、指定されたプラットフォームでプロバイダーがすべて利用可能であることを確認し、指定されたプラットフォームを少なくともサポートするために十分なパッケージチェックサムをロックファイルに保存します。

    複数のターゲットシステムのチェックサムを含めるには、このオプションを複数回使用してください。

    ターゲットプラットフォーム名は、オペレーティングシステムとCPUアーキテクチャで構成されます。たとえば、linux_amd64 は、AMD64またはx86_64 CPUで実行されているLinuxオペレーティングシステムを選択します。

    このオプションの詳細については、次のセクションを参照してください。

ターゲットプラットフォームの指定

たとえば、環境内にWindowsまたはmacOSワークステーションでOpenTofu構成を使用する開発者と、Linuxで実行中に構成を適用する自動化システムの両方が存在することがあります。

その状況では、tofu providers lock を実行して3つのプラットフォームを指定することにより、すべてのプロバイダーがそれらのすべてのプラットフォームをサポートしていることを確認し、必要なチェックサムを事前にロックファイルに入力することを選択できます。

コードブロック
tofu providers lock \
-platform=windows_amd64 \ # 64-bit Windows
-platform=darwin_amd64 \ # 64-bit macOS
-platform=linux_amd64 # 64-bit Linux

(上記の例では、読みやすくするためにUnixスタイルのシェルラッピング構文を使用しています。Windowsでコマンドを実行する場合は、すべての引数を1行にまとめ、バックスラッシュとコメントを削除する必要があります。)

社内プロバイダーのロックエントリ

社内プロバイダーとは、特定の組織内でのみ開発および使用され、ファイルシステムミラーまたはネットワークミラーを介して配布されるため、実際のOpenTofuプロバイダーレジストリに公開されていないプロバイダーのことです。

デフォルトでは、tofu providers lock はすべてのプロバイダーがOpenTofuプロバイダーレジストリで利用可能であると想定し、プロバイダーパッケージに関する最も詳細な情報にアクセスするために、元のレジストリに接続しようとします。

ローカルミラーでのみ利用可能な特定のプロバイダーのロックエントリを作成するには、-fs-mirror または -net-mirror コマンドラインオプションを使用して、プロバイダーの元のレジストリを参照するデフォルトの動作をオーバーライドできます。

コードブロック
tofu providers lock \
-fs-mirror=/usr/local/tofu/providers
-platform=windows_amd64 \
-platform=darwin_amd64 \
-platform=linux_amd64 \
tf.example.com/ourcompany/ourplatform

(上記の例では、読みやすくするためにUnixスタイルのシェルラッピング構文を使用しています。Windowsでコマンドを実行する場合は、すべての引数を1行にまとめ、バックスラッシュを削除する必要があります。)

上記のコマンドにはプロバイダーソースアドレス tf.example.com/ourcompany/ourplatform が含まれているため、tofu providers lock はその特定のプロバイダーへのアクセスのみを試行し、他のプロバイダーのロックエントリは変更しません。さまざまなソースから利用できるさまざまなプロバイダーがある場合は、tofu providers lock を複数回実行し、毎回異なるプロバイダーのサブセットを指定できます。

-fs-mirror および -net-mirror オプションは、プロバイダーインストール方法構成filesystem_mirror および network_mirror ブロックと同じ意味を持ちますが、パッケージチェックサム情報の取得元を明示的にするために、単一の方法のみを指定します。

元の開発者の暗号署名でカバーされた公式チェックサムを提供できるのは、元のレジストリのみであることに注意してください。したがって、ファイルシステムまたはネットワークミラーから作成されたロックエントリは、リクエストした正確なプラットフォームのみをカバーし、記録されたチェックサムは、元のレジストリの公式チェックサムではなく、ミラーによって報告されたチェックサムになります。記録されたチェックサムが元のプロバイダー発行者によって署名されたものであることを確認する場合は、元のレジストリからすべての情報を取得するために、-fs-mirror または -net-mirror オプションを使用せずにこのコマンドを実行します。

必要に応じて、社内プロバイダーを社内プロバイダーレジストリを介して公開できます。これにより、特別なオプションや追加のCLI構成なしで、それらのプロバイダーのロックとインストールが可能になります。詳細については、プロバイダーレジストリプロトコルを参照してください。