2020-10-02
10/2
terraform v0.13へのアップグレード
最近、何度かv0.12からアップグレードする機会があった。
というか、tfenv等でバージョン固定してなかったために、不意にバージョンが上がってしまった。
まずここを読んでから作業すべし:
本来あるべき手順:
- アップグレード前にterraform planで差分がないことを確認
- v0.13へアップグレード
- 適宜HCLを修正する。
required_providers
の追記については後述
- アップグレード後にterraformを実行して問題ないことを確認
事前に差分を確認せずにアップグレードして、その後にterraform plan/applyすると、こういうエラーが出ることがある(あった):
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
Error: Provider configuration not present
To work with google_xxx.yyy its
original provider configuration at provider["registry.terraform.io/-/google"]
is required, but it has been removed. This occurs when a provider
configuration is removed while objects created by that provider still exist in
the state. Re-add the provider configuration to destroy
google_xxx.yyy, after which you can remove the provider configuration again.
ここで google_xxx.yyy
には色んなリソースが入ってくる。
こういうエラーがずらっと並んでいたのを見た。
このエラーについては上のアップグレードガイドにも書いてあるが、tfstateにあるリソースがなくなっているケースが多いようだ。
ありがちなのは、コンソールやCLIでリソースを消して、terraform側に反映してないとか、そういうケース。
対応としては、消していいものであれば、 terraform state rm google_xxx.yyy
でOK.
参考:
terraform.required_providersエントリの追加
必須ではないかもしれないが、利用するプロバイダをterraformブロックの中に記述するようになった。
例:
terraform {
required_version = "~> 0.13.0"
required_providers {
google = {
source = "hashicorp/google"
version = "~> 3.41"
}
google-beta = {
source = "hashicorp/google-beta"
version = "~> 3.41"
}
}
}
最終更新 2022-06-24: [memo] Archive a few memo (0378613f8)