2017-03-06 6 views
5

terraformを使用してAWSにかなり大きなインフラストラクチャを導入している間に、リモートのtfstateが壊れて削除されました。terraform refreshは本当に何をしますか?

ドキュメントから、私はterraform refreshは、インフラストラクチャの本当の状態を取得し、accordigly tfstateを更新するためにAWSを問い合わせる必要があることを集めるが、それは起こりません。私のtfstateが手つかずと計画である+ Already existingエラーの多くを与える適用されます。

terraform refreshは本当に何をしますか?

答えて

8

terraform refresh状態ファイルに保持されているリソースを見つけようとし、最後に実行されてからTerraform以外のプロバイダで発生したドリフトを更新しようとします。

たとえば、状態ファイルにi-abc123,i-abc124,i-abc125のIDを持つ3つのEC2インスタンスが含まれていて、次にTerraform以外でi-abc124を削除するとします。 terraform refreshの実行後には、​​は、2番目のインスタンスを作成する必要があることを示していますが、破壊計画では1番目と3番目のインスタンスを破棄する必要があるだけであることが分かります。

Terraformは、Terraformによって管理されていないものに干渉しないように非常に具体的な決定を下します。つまり、リソースが状態ファイルに存在しない場合、絶対にそれに触れることはありません。これにより、他のツールと並行してTerraformを実行できるほか、AWSコンソールで手動で変更することもできます。また、使用する別の状態ファイルを提供するだけで、さまざまなコンテキストでTerraformを実行でき、インフラストラクチャを複数の状態ファイルに分割し、壊滅的な状態ファイルの破損から身を守ることができます。

あなたの現在の穴から自分を取り除くには、terraform importを自由に使って状態ファイルに戻すか、可能であれば手動でTerraform以外のものをすべて破棄して最初から開始することをお勧めします。

今後は、より詳細なコンテキストに適用するために状態ファイルを分割することと、バージョン管理が有効なS3バケットにリモート状態を保存することをお勧めします。 Terragruntのようなツールを使って状態ファイルをロックして破損を避けることができます。また、今後のTerraform 0.9リリースでのネイティブ状態のファイルロックを待つこともできます。

+0

あなたの明確で詳細な回答をありがとう。実際に私たちはS3バケツで私たちのtfstateを持っていました。あなたが提案したように、すべてを手作業で破壊し、s3のバージョン管理を有効にして、数日前に 'terraform apply 'をもう一度実行してください。私はこの質問をして、かなり重大な状況の根底にある原因をよりよく理解するように頼んだ。 – Bruno9779

関連する問題