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

Azure,Terraform

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

terraform apply -refresh-onlyを使うとAzureリソース状態をterraform.tfstateに反映させる事が出来ます。
今回はAzure仮想マシンのサイズ変更を例にterraform apply -refresh-onlyを使ったterraform.tfstateの更新について確認してみました。

※Terraformの構成管理ファイル(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で仮想マシンのサイズを変更します。

仮想マシンサイズ変更
仮想マシンのリソースメニューでサイズを選択します。
サイズのリストが表示されますので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に反映できることが分かりました。

Azure Terrafyを使った既存AzureリソースのTerraformインポートはこちらでやっています。併せて見て頂けると大変有難いです。

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

Terraformの記事一覧

スポンサーリンク