久しぶりのTerraformとバージョンアップ

1年半ぶりくらい。
色々とこまごまかじっては放置を繰り返してるので人生アンラーニングの繰り返しである。

現状確認

0.13.4とか使ってたのでバージョン確認したらout of dateって言われてしまうのだった。

akahige:(git)master:# terraform -version
Terraform v0.13.4
+ provider registry.terraform.io/hashicorp/archive v1.2.2
+ provider registry.terraform.io/hashicorp/aws v2.16.0

Your version of Terraform is out of date! The latest version
is 1.1.9. You can update by downloading from https://www.terraform.io/downloads.html

Terraformのバージョンアップ

tfenvのバージョンアップ

tfenvを使ってたのでこれをまず最新の状態にする。

GitHubからCloneして手動インストールしてあるので

cd ~/.tfenv
git pull

ちなみにググるとlinuxbrewから入れる記事とかヒットするんだけどマジで?
まあパスとか自動で通してくれる分だけ楽とは言えるか。

最新版のTerraformをインストールする

tfenv install 1.1.9
tfenv use 1.1.9

既存のTerraformのディレクトリに.terraform-versionがある場合は書き換える。

echo 1.1.9 > .terraform-version

バージョン確認

akahige:(git)master:# terraform -version
Terraform v1.1.9
on linux_amd64

ヨシ!

Providerのバージョンアップ

main.tfで読み込んでいたものを書き換えなければなと。

awsは2.1.6とか使っていた。

Providerの最新バージョンってどこを見たら分かるのか

Terraform Registryで確認する。

awsは現時点では4.12.1が最新らしい。

AWS Lambda使うのにarchiveとか使ってたのでそれも最新の2.2.0にしておく。

main.tfの書き換え

バージョン書き換えた状態のmain.tf。

terraform {
  required_version = "= 1.1.9"
}

provider "aws" {
  version = "4.12.1"
  profile = "hogehoge-terraform"
  region  = "ap-northeast-1"
}

provider "archive" {
  version = "2.2.0"
}

この状態でterraform planすると

Warning: Version constraints inside provider configuration blocks are deprecated
│
│   on main.tf line 26, in provider "archive":
│   26:   version = "2.2.0"

書き方が古いって言われてしまったので書き換える。

terraform {
  required_version = "= 1.1.9"

  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~> 4.12"
    }
    archive = {
      source = "hashicorp/archive"
      version = "2.2.0"
    }
  }
}

provider "aws" {
  profile = "hogehoge-terraform"
  region  = "ap-northeast-1"
}

terraform initする

main.tfを書き換えて再度terraform plan。

akahige:(git)master:# terraform plan
╷
│ Error: Inconsistent dependency lock file
│
│ The following dependency selections recorded in the lock file are inconsistent with the current configuration:
│   - provider registry.terraform.io/hashicorp/archive: required by this configuration but no version is selected
│   - provider registry.terraform.io/hashicorp/aws: required by this configuration but no version is selected
│
│ To make the initial dependency selections that will initialize the dependency lock file, run:
│   terraform init

terraform initせいと。エラーメッセージが親切でよろしい。

terraform init

ここまででterraform planできるようになった。
でもなんかリソースごとにめちゃめちゃエラーが出るので、AWSプロバイダーのドキュメントを見ながら地道に書き直していく。