1. ホーム
  2. git

[解決済み] .tfstateファイルはGitにコミットすべきですか?

2023-04-17 03:28:36

質問

をコミットするかどうかという質問について、少し迷っています。 .tfstate ファイルを Git にコミットするかどうかという問題について、少し困惑しています。その Terraformのドキュメント にはこう書かれています。

Terraformはまた、いくつかのステートを terraform.tfstate ファイルに格納します。このステートファイルは非常に重要です。様々なリソースのメタデータを実際のリソースIDにマッピングし、Terraformが何を管理しているのかがわかるようにします。このファイルは保存して、Terraformを実行する可能性のある人に配布する必要があります。一般的にあまり大きくないので、単純にバージョンコントロールに入れることをおすすめします。

さて、一方、受け入れられ、upvotedされた回答で Terraformを使用する際のベストプラクティス の状態になります。

Terraformの設定は、異なるインフラストラクチャ上の多くのボックスをプロビジョニングするために使用され、それぞれが異なる状態を持つことができます。複数の人によって実行されることもあるので、この状態は(S3のような)一元管理された場所にあるべきですが ではなく git ではありません。

(強調は原著者であり、私ではありません)

誰が正しいのか、正しいとしたらなぜなのか。

どのように解決するのか?

TL;DRです。

重要! ソースコントロールに保存すると 潜在的な機密データ と、古いバージョンの状態に対してTerraformを実行するリスクがあります。やめておきましょう。

Terraformはもはやソース管理に状態を保存することを推奨していません。良い'選択肢はリモートかローカルです。

リモート状態は、ローカルとソース管理への保存の両方と比較して、大きな利点を与えます。これらの詳細は以下の通りです。


オリジナルの回答です。

Yevgeniyの回答は良いものです。この問題は、Terraformがドキュメントを更新して記述しているため、現在では多少議論が少なくなっています。

Terraformはデフォルトでterraform.tfstateファイルにいくつかの状態を格納します。 ファイルに格納します。この状態ファイルは非常に重要です。 リソースメタデータを実際のリソースIDにマッピングし、Terraformが何を管理しているのかがわかるようにします。 を知ることができます。このファイルは必ず保存して、Terraformを実行する可能性のある人 このファイルは保存して、Terraformを実行する可能性のある人に配布する必要があります。通常、Terraformを使用する際には、リモートステート を設定することが推奨されます。 これは、状態ファイルに保存された潜在的な秘密が、バージョンコントロールにチェックされないことを意味します。 がバージョンコントロールにチェックされないということです。

つまり、確立されたベストプラクティスと公式の推奨事項の間に不一致がなくなったのです。


2019-05-17のアップデート

ドキュメントの最新版 という表現に変更されました。

... この状態は、デフォルトではローカルファイルの という名前のローカルファイルに保存されますが、リモートで保存することもできます。 という名前のファイルに保存されます。...

私は、アドバイスが状態を保存するための好ましい方法であるソースコントロールに戻ることはないと思っています。

上記の docs の引用にもかかわらず

リモート状態は単独の開発者としてはまだ有益です。

リモートステートでは、ソロの開発者は、次のことができます。

  • 複数のデバイスから Terraform コードを実行することができます。
  • 選択したバックエンドに応じて、状態ファイルを簡単にバックアップし、紛失から保護することができる
  • アーキテクチャのセクションを 出力
  • 静止状態のファイルを自動的に暗号化する 選択されたバックエンドに依存します。