terraform apply -refresh-onlyで変更内容をterraform.tfstateに反映
terraform apply -refresh-onlyを使ったterraform.tfstateの更新手順です。
Terraformで管理するリソースの構成情報は、状態管理ファイル(terraform.tfstate)で管理されます。
Azure Portalなど、Terraform以外の方法でリソースを変更した場合、その変更内容はterraform.tfstateには反映されません。
そのため、実際のAzureリソースの状態とterraform.tfstateで管理される状態との間に差異が発生します。
terraform apply -refresh-onlyを使用すると、最新のAzureリソースの状態をterraform.tfstateに反映させることができます。
今回は、Azure仮想マシンのサイズ変更を例に、terraform apply -refresh-onlyを使ったterraform.tfstateの更新手順について確認します。
Azureのリソース情報をterraform.tfstateに反映させる方法
terraform importとterraform apply -refresh-onlyの違い
既存のAzureリソース情報をTerraformに取り込む方法として、terraform import や terraform apply -refresh-only などがあります。
terraform import は、Terraformでまだ管理されていないAzureリソースをTerraformに新たに認識させる際に使用します。
このコマンドは、対象リソースが terraform.tfstate に存在しない場合に利用します。
Terraform Importについては、こちらで確認しています。
terraform apply -refresh-only は、すでにTerraformで管理されているAzureリソースの状態を更新する場合に使用します。
このコマンドは、すでにTerraformの状態管理ファイル(terraform.tfstate)に存在しているリソースのみを更新します。
Command: apply(Plan Options)(HasgiCorp)
terraform apply -refresh-onlyは状態管理ファイル(terraform.tfstate)だけを更新する
terraform apply -refresh-only を実行すると、terraform.tfstate が更新されます。
しかし、テンプレートファイル(.tf)は更新されません。
そのため、テンプレートファイルを別途修正する必要があります。
まとめ
terraform import と terraform apply -refresh-only の違いについて簡単にまとめると、次のようになります。
コマンド | terraform.tfstateにリソースが存在するか | terraform.tfstateの更新 | テンプレートファイルの作成、更新 |
terraform import | × | 〇 | × |
terraform apply -refresh-only | 〇 | 〇 | × |
—広告—
terraform apply -refresh-onlyを使ってTerraformの状態管理ファイル(terraform.tfstate)を更新
今回は、Azure Portalを使って仮想マシンのサイズを変更し、その結果を確認します。
仮想マシンのサイズは、Standard_B1msからStandard_B2msに変更しています。
あらかじめ作成した仮想マシンを使用しています。
terraform showでterraform.tfstateに記録されている仮想マシンサイズを確認
terraform showを使って、terraform.tfstateに記録されている仮想マシンのサイズを確認します。
terraform showで仮想マシンサイズを確認 | |
terraform showでterraform.tfstateの情報を確認します。 仮想マシンのサイズが Standard_B1ms となっていることが確認できます。 |
![]() |
Azure Portalで仮想マシンのサイズを変更
Azure Portalで、仮想マシンのサイズを Standard_B1msからStandard_B2msに変更します。
仮想マシンのサイズを変更 | |
仮想マシンのリソースメニューでサイズを選択します。 サイズのリストから B2msを選択します。 サイズ変更後に確認すると、Standard_B2msになっていることが確認できます。 |
![]() |
![]() |
terraform apply -refresh-onlyでterraform.tfstateを更新
terraform apply -refresh-onlyを実行して、仮想マシンのサイズ変更をterraform.tfstateに反映します。
terraform showでterraform.tfstateの更新確認
再度、terraform showを使って、terraform.tfstateに記録されている仮想マシンのサイズを確認します。
terraform showコマンドで仮想マシンサイズを確認 | |
仮想マシンのサイズを確認します。 Standard_B2msに更新されていることを確認できます。 |
![]() |
terraform applyを実行して確認
terraform.tfstateは更新されていますが、テンプレートファイル(.tf)は更新されておらず、差異がある状態になっています。
この状態で terraform applyを実行すると、仮想マシンのサイズを変更しようとします。
terraform applyを実行 | |
テンプレートファイル(.tf)で設定しているサイズ(Standard_B1ms)に変更しようとします。 | ![]() |
テンプレートファイル(.tf)修正後に、terraform applyを実行
テンプレートファイル(.tf)の仮想マシンのサイズを直接修正します。変更後に、terraform apply を実行して確認します。
テンプレートファイル(.tf)を更新 | |
テンプレートファイル(.tf)の仮想マシンのサイズをStandard_B2msに変更します。 変更後に、terraform apply を実行すると、テンプレートファイルと terraform.tfstate に差異がないため、0 changed となります。 |
![]() |
![]() |
—広告—
最後に
terraform apply -refresh-only を使用した、Terraformの状態管理ファイル(terraform.tfstate)の更新について確認しました。
Azure Portalなど、Terraform以外の方法で変更したリソース情報も、Terraformに反映できることが分かりました。
引き続き、Terraformについていろいろ試していみたいと思います。