terraform planの裏で何が起きているのか
terraform planとは
Terraform開発者にとって、terraform planコマンドは、欠かせない日常ツールと言えます。
このコマンドは、AWSやAzure、GCPなどのクラウドサービスに変更を反映させる前に、どのような変更が行われるのかを事前に確認するために使用されます。
そんなplanコマンドですが、裏でどのように動いているのか気になったことはないでしょうか?
今回はその処理の流れについて大まかに解説していこうと思います。
terraform planの処理の流れ
terraform planを実行したとすると以下の手順で処理します。
-
実際のインフラストラクチャ
とtfstate
の差分検知(ドリフト検知) -
実際のインフラストラクチャ
とterraformコード
の差分検知 - 差分をplan結果として表示
順を追って解説します。
実際のインフラストラクチャとtfstateファイルの差分検知(ドリフト検知)
Terraformのplanを実行すると、まずは実際のインフラストラクチャ
とtfstate
を比較します。ここでの比較では、「Terraform外のGUIやCLIを通じてリソースが更新されていないか?」を確認しています。
この確認プロセスはドリフト検知
と呼ばれます。
通常、tfstate
と実際のインフラストラクチャ
の間に差分はありませんが、Terraform以外の方法(例えばGUIやCLI)でリソースが更新された場合、これらの状態が一致しなくなることがあります。そのため、ドリフト検知
によってこれらの差分を確認することができます。
実際のインフラストラクチャとTerraformコードの差分検知
ドリフト検知を行った後、その結果を考慮して、実際のインフラストラクチャ
とTerraformコード
を比較します。
このステップは、多くの方がterraform planに対して抱くイメージそのものです。ここでは、実際に反映されているインフラストラクチャ
とTerraformコードに記述された最新のインフラストラクチャ
の差分
を求めます。
差分をplan結果として表示
最後に、これらの差分がterraform planの結果として表示されます。これにより、開発者はどのリソースが追加、変更、または削除されるかを事前に確認し、適切な対応を取ることができるようになるのです。
参考
ドリフト検知についてはこちらを参考にしました
The terraform plan command creates an execution plan, which lets you preview the changes that Terraform plans to make to your infrastructure. By default, when Terraform creates a plan it:
Reads the current state of any already-existing remote objects to make sure that the Terraform state is up-to-date.
Compares the current configuration to the prior state and noting any differences.
Proposes a set of change actions that should, if applied, make the remote objects match the configuration.
Hands-on: Try the Terraform: Get Started tutorials. For more in-depth details on the plan command, check out the Create a Terraform Plan tutorial.
引用元リンク https://developer.hashicorp.com/terraform/cli/commands/plan
実際の環境とTerraformコードの差分についてはこちらを参考にしました
Planning
The terraform plan command evaluates a Terraform configuration to determine the desired state of all the resources it declares, then compares that desired state to the real infrastructure objects being managed with the current working directory and workspace. It uses state data to determine which real objects correspond to which declared resources, and checks the current state of each resource using the relevant infrastructure provider's API.
Once it has determined the difference between the current state and the desired state, terraform plan presents a description of the changes necessary to achieve the desired state. It does not perform any actual changes to real world infrastructure objects; it only presents a plan for making changes.
Plans are usually run to validate configuration changes and confirm that the resulting actions are as expected. However, terraform plan can also save its plan as a runnable artifact, which terraform apply can use to carry out those exact changes.
For details, see the terraform plan command.
引用元リンク https://developer.hashicorp.com/terraform/cli/run
Discussion