web-dev-qa-db-ja.com

terraform.tfvarsとvariables.tfの違い

私はこれを調査してきましたが、違いを見つけることができません。 variables.tfファイルは、terraform.tfvarsファイルのように、変数のデフォルト/値を格納できます。

これら2つと、どちらか一方の必要性の違いは何ですか?私の理解は、コマンドラインを介してterraファイルの引数としてvarファイルを渡すかどうかです。

これについてはすでにスレッドがあり、variable.tfファイルで変数を「潜在的に」割り当てることができるため、tfvarsファイルを引数として渡すことが唯一の利点のようです。

これは正しい考えですか?

8
GurdeepS

これらの違いは、宣言代入です。

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 で省略できます。

13
Martin Atkins

variables.tfファイルを使用して変数のタイプを定義し、オプションでデフォルト値を設定を定義します。

terraform.tfvarsファイルは、変数の実際の値を設定に使用されます。

すべての変数にデフォルト値を設定し、tfvarsファイルをまったく使用しないようにすることもできます。

実際には、定義と値を分割する目的は、共通のインフラストラクチャ設計の定義を許可し、環境ごとに特定の値を適用することです。

引数として指定する複数のtfvarsファイルを使用すると、環境ごとに異なる値を設定できます:シークレット、VMサイズ、インスタンス数など)。

9
scrambler