14

terraform のdestroy前に terraform が必要applyですか? そうでない場合、既存のインフラストラクチャを更新するときに従うワークフローは何ですか?また、destroy必要かどうかをどのように判断しますか?

4

11 に答える 11

40

私の意見では、それはかなり標準的ではありません。Terraformdestroyは、インフラストラクチャを完全に消去したい場合にのみ使用されます。terraform の最大の機能の 1 つは、目的のインフラストラクチャと既存のインフラストラクチャのインテリジェントなデルタを実行し、必要な変更のみを行うことができることです。を実行するrefreshplanapplyテラフォームが次のことを確認できます。

  1. refresh- 現在のインフラストラクチャについて最新の知識を持っている。これは、terraform スクリプト以外で何かが手動で変更された場合に重要です。
  2. plan- terraform が何を変更または削除するか (または放っておくか) を検討するためのリストを準備します。
  3. apply- 計画に記載された変更を実行します。

これら 3 つのコマンドを順番に実行することで、terraform は必要な変更のみを必要な順序で実行し、terraform ファイルへの変更に合わせて環境を調整します。

destroy が役立つと私が思うのは、非実稼働環境、または非常に侵襲的な再構築を実行しているため、ゼロから始めるとより安全なビルドが保証される場合です。

*また、terraform が操作の正しい順序を理解できない場合 (セキュリティ グループを最初に変更するか、セキュリティ グループ ルールを変更するか) や、依存関係のサイクルに陥って操作を実行できなくなるエッジ ケースもあります。 . ただし、そのような場合、destroy を実行することは核となる解決策です。一般的に、問題の変更を手動で (コマンドラインまたは AWS の場合は AWS コンソールを介して) 実行して、問題を少しずつ進めてから、、、、シーケンスを実行しrefreshplan軌道applyに戻します。

于 2016-05-26T21:46:32.710 に答える
7

の前にNoterraform destroyは必要ありませんterraform apply

Terraform 構成 (*.tfおよび*.tfvarsファイル) は、インフラストラクチャの望ましい状態を記述します。「これが私のインフラストラクチャのあり方です」と書かれています

このツールを使用してterraform変更を計画および適用し、インフラストラクチャを説明した目的の状態にします。これらの変更は、何も破壊することなく段階的に行うことができます。

一般的なワークフローは次のようになります。

  • ファイル.tfを変更する.tfvars
  • リフレッシュ状態
  • 計画変更
  • 計画された変更を確認する
  • それらの変更を適用します

そのインフラストラクチャを完全に破壊したい場合terraform plan -destroyは、Terraform が破壊しようとしているものを確認するために使用します。それに満足している場合は、それterraform destroyを破壊するために使用します。

通常、destroy一時的な目的 (ビルドなど) でインフラストラクチャをプロビジョニングする場合や、さまざまなパラメーターを使用して白紙の状態からプロビジョニングする能力をテストする場合を除き、めったに使用されません。その場合でも、リソースのcountパラメーターを使用して、カウントを増やし、必要がなくなったら再び減らすことで、リソースを一時的にプロビジョニングできます。

于 2016-09-30T02:03:50.237 に答える
6

@mwielbut の回答の後にさらにコメントがあります。

オプション+の代わりに、オプションapply+destroyで実行する必要がありterraformますtaintapply

通常、実行する必要はまったくありませんterraform destroy。特に本番環境では、これは非常に危険なオプションです。

オプションplanとを使用するとapply、インフラストラクチャをコードで更新するだけで十分です。

ただし、いくつかのリソースを破棄し、既に作成されているものを再構築する必要がある場合はtaint、質問の正しい答えである のオプションを使用できます。これは非常に重要であり、@mwielbut の回答では見逃されています。

terraform taint コマンドは、Terraform で管理されているリソースを手動で汚染済みとしてマークし、強制的に破棄して次回の適用時に再作成します。

このコマンドはインフラストラクチャを変更しませんが、状態ファイルを変更して、リソースを汚染されているとマークします。リソースが汚染されているとマークされると、次のプランでリソースが破棄されて再作成されることが示され、次の適用でこの変更が実装されます。

参照:

コマンド汚染: https://www.terraform.io/docs/commands/taint.html

オプションのサンプルtaint: https://www.terraform.io/docs/modules/usage.html

于 2016-06-09T02:37:58.417 に答える
3

Terraform destroy はすべてのリソースを破棄します。増分変更を適用する場合は必要ありません。Destroyは、インフラストラクチャ全体を破棄する場合にのみ使用してください。

于 2016-10-11T10:26:20.523 に答える
2

まで走る必要はありませんterraform destroy。インフラストラクチャに変更を加えた場合、[リソースを追加/削除] すると、次のterraform plan & terraform apply時点で変更が自動的に反映されます

于 2018-05-26T15:16:38.410 に答える
1

単にいいえ。

terraform apply前 に実行する必要はありませんterraform destroy。テラフォーム (.tf) ファイルには、インフラストラクチャの状態が記述されています。

terraform apply常にインフラストラクチャを更新してください。また、インフラストラクチャの状態を識別して更新します。

terraform destroy唯一の用途は、インフラストラクチャを停止して完全に消去することです。(使用する前によく考える必要があります) terraform planterraform refreshを使用して、インフラストラクチャの状態を確認できます。

于 2019-02-17T09:44:55.273 に答える
0

を実行しただけで、いつでもインスタンスを手動で破棄できますterraform apply。次に、実行terraform applyすると、.xml なしで新しいインスタンスが作成されますterraform destroy

于 2016-06-16T01:46:05.087 に答える