Closed5

Terraform provider更新とstateのschema更新

mikutasmikutas

発端

  • Renovateがterraform-provider-awsを更新するMerge Requestを作った
    • 5.12.0 -> 5.14.0
  • CIでそのMRに対するterraform planが実行されて成功した
  • その他のMerge Requestでterraform planが成功しなくなった
    • Error: Resource instance managed by newer provider version
    • The current state of xxx was created by a newer provider version than is currently selected. Upgrade the aws provider to work with this state.
      • xxxの部分はaws_batch_job_queue resourceだった

問題のエラー

https://github.com/hashicorp/terraform/blob/2a49d4b7844d464404b27b43e23c3ee3cb6eef74/internal/terraform/upgrade_resource_state.go#L59

upgradeResourceState内にて出る

https://github.com/hashicorp/terraform/blob/2a49d4b7844d464404b27b43e23c3ee3cb6eef74/internal/terraform/upgrade_resource_state.go#L26

mikutasmikutas

https://github.com/hashicorp/terraform-plugin-framework/blob/c5f89cd3c14a841b96adc35c3a5877cbfafea93e/resource/resource.go#L141-L154

ResourceWithUpgradeStateの説明

UpgradeResourceState RPC に対するプロバイダーの制御を可能にするリソース上のオプションのインターフェイス。 この RPC は、現在の Schema 型の Version フィールドが保存されたstateよりも大きい場合に、Terraform によって自動的に呼び出されます。
Terraform は以前の Schema 情報を保存しないため、stateデータ型に対する重大な変更はプロバイダーによって処理される必要があります。


「Terraform によって自動的に呼び出されます」

https://github.com/hashicorp/terraform/blob/2a49d4b7844d464404b27b43e23c3ee3cb6eef74/internal/terraform/upgrade_resource_state.go#L93

mikutasmikutas

5.14.0のaws providerでplanした時点でstateのschemaに不可逆な更新が入ったため、他のMRではstateのschamaより手元の方が古いことになりエラーになった

このスクラップは2023/08/28にクローズされました