私はこれを調査してきましたが、違いを見つけることができません。 variables.tfファイルは、terraform.tfvarsファイルのように、変数のデフォルト/値を格納できます。
これら2つと、どちらか一方の必要性の違いは何ですか?私の理解は、コマンドラインを介してterraファイルの引数としてvarファイルを渡すかどうかです。
これについてはすでにスレッドがあり、variable.tfファイルで変数を「潜在的に」割り当てることができるため、tfvarsファイルを引数として渡すことが唯一の利点のようです。
これは正しい考えですか?
これらの違いは、宣言と代入です。
variable
ブロック(実際には任意の.tf
ファイルに出現する可能性がありますが、慣例的にvariables.tf
にあります)は、変数が存在することを宣言します。
variable "example" {}
これは、このモジュールがexample
という入力変数を受け入れることをTerraformに伝えます。これを述べると、モジュールの別の場所でvar.example
を使用して変数の値にアクセスすることが有効になります。
この入力変数にvalueを割り当てる方法はいくつかあります。
-var
またはterraform plan
コマンドラインにterraform apply
オプションを含めます。-var-file
オプションを含めて、1つ以上の.tfvars
ファイルを選択し、一度に多くの変数の値を設定します。terraform.tfvars
ファイル、または.auto.tfvars
という名前のファイルを作成します。これらのファイルは、-var-file
引数と同じように扱われますが、自動的にロードされます。module
ブロック内の変数に割り当てる式を含めます。変数は、オプションでデフォルト値を使用して宣言できます。変数defaultsは、モジュール/構成のほとんどの用途で適切に機能するデフォルトの動作があり、その動作を可能にする場合に使用されます例外的なケースではオーバーライドされます。
変数値を割り当てるためのさまざまな手段は、differencesを処理するためのものです。つまり、Terraformの使用方法によって異なりますが、たとえば、同じ構成を複数回使用して、同じインフラストラクチャ(環境など)の異なる「コピー」をデプロイする場合は、異なる.tfvars
ファイルを選択することができます。これらのコピーのそれぞれについて。
terraform.tfvars
と.auto.tfvars
は追加オプションなしで自動的にロードされるため、デフォルトと同様に動作しますが、これらの目的は異なります。 オートメーションでTerraformを実行する の場合、一部のユーザーは、オートメーションが実行している環境など、オートメーションが知っている値を渡すために、Terraformを実行する直前にterraform.tfvars
ファイルまたは.auto.tfvars
を自動化します。
自動的にロードされる.tfvars
ファイルと変数のデフォルトの違いは、子モジュールを処理する場合により明確になります。 .tfvars
ファイル(および-var
、-var-file
オプション)は rootモジュール変数 にのみ適用され、変数のデフォルトはそのモジュールが子モジュールとしても使用されます。つまり、デフォルトの変数は module
blocks で省略できます。
variables.tfファイルを使用して変数のタイプを定義し、オプションでデフォルト値を設定を定義します。
terraform.tfvarsファイルは、変数の実際の値を設定に使用されます。
すべての変数にデフォルト値を設定し、tfvarsファイルをまったく使用しないようにすることもできます。
実際には、定義と値を分割する目的は、共通のインフラストラクチャ設計の定義を許可し、環境ごとに特定の値を適用することです。
引数として指定する複数のtfvarsファイルを使用すると、環境ごとに異なる値を設定できます:シークレット、VMサイズ、インスタンス数など)。