terraform apply -refresh-onlyで変更内容をterraform.tfstateに反映

Azure,Terraform

Terraformで管理するリソースの構成情報は、状態管理ファイル(terraform.tfstate)で管理されます。
Azure PortalなどTerraform以外の方法でリソースを変更した場合、その変更内容はterraform.tfstateに反映されません。
そのため、実際のAzureリソースの状態とterraform.tfstateで管理されるAzureリソースの状態に差異が発生します。

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を使って仮想マシンのサイズを変更して確認してみたいと思います。
こちらで作成した仮想マシンを使用します。

terraform showコマンドで現在の仮想マシンサイズを確認

terraform showを使って、現在の仮想マシンサイズを確認します。

terraform show
terraform showコマンドでterraform.tfstate情報を確認します。
仮想マシンサイズがStandard_B1msとなっている事が確認出来ます。

Azure Portalで仮想マシンのサイズを変更

Azure Portalで、仮想マシンのサイズをB1msからB2msに変更します。

仮想マシンサイズ変更
仮想マシンのリソースメニューでサイズを選択します。
サイズのリストが表示されますのでB2msを選択します。
サイズ変更後確認するとStandard B2msになっている事が確認出来ます。

terraform apply -refresh-onlyを実行

terraform apply -refresh-onlyを実行します。

terraform apply -refresh-only

実際のAzureリソースとterraform.tfstateの差異が変更内容として表示されます。
Enter a valueでyesを選択するとterraform.tfstateのみが更新されます。

※Terraformの実行結果が0 changedになっている事が確認出来ます。

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)を更新して確認

テンプレートファイル(.tf)の仮想マシンサイズを変更してから、再度確認します。

テンプレートファイル(.tf)を更新
テンプレートファイルの仮想マシンサイズをStandard_B2msに変更します。
terraform applyを実行するとテンプレートファイルとterraform.tfstateに差異が無いため0 changedになります。

—広告—

最後に

terraform apply -refresh-onlyを使った、Terraformの状態管理ファイル(terraform.tfstate)の更新を確認しました。
Azure Portalなど、Terraform以外の方法で変更したリソース情報をTerraformに反映できることが分かりました。

Terraform関連の記事はこちらになります。
色々試していますので併せて見て頂けると大変有難いです。

Terraformの記事一覧

スポンサーリンク