2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Terraformをv0.13.5 からv0.15.1へアップグレードしたらいくつかエラーが出たので書き残しておきます。

Last updated at Posted at 2021-05-04

簡単なWebサイトのインフラをTerraformで管理しております。

長い間メンテナンスを放っておりましたが、様々なLintが多くのアラームを上げておりましたので対処しました。

TL;DR

  • Terraform v0.13.5 -> v0.15.1にアップグレードしました。
  • 実行手順
    • バージョン確認
    • バージョン変更
    • initの実行
    • planの実行
    • エラー修正
    • applyの実行
  • エラー内容
  • Warning: Version constraints inside provider configuration blocks are deprecated
  • Call to function "list" failed

構成

(特に意味はないですが、簡単な構成図を作って見ました)
スクリーンショット 2021-05-05 1.00.19.png

ディレクトリ構成

ディレクトリ構成
├── component
│   └── AWS_StaticWeb_directory # リソースのディレクトリ
│       ├── functions # ちょっとしたJavascriptファイル(今回の内容には全く関係ない)
│       │   ├── hoge_directory
│       │   │   ├── node_modules
│       │   │   ├── package-lock.json
│       │   │   ├── package.json
│       │   │   └── hoge.js
│       ├── lambda_edge.tf
│       ├── main.tf # リソースのメイン
│       ├── provider.tf
│       └── variables.tf
└── environment_directory # このディレクトリで実行
│   ├── .terraform
│   ├── backend.tfbackend
│   ├── main.tf # メイン
│   ├── variables.tf
│   └── variables.tfvars
└──  .terraform-version # ここでバージョンを管理

実行手順

バージョン確認

バージョン確認
% terraform --version
Terraform v0.13.5
+ provider registry.terraform.io/hashicorp/archive v2.1.0
+ provider registry.terraform.io/hashicorp/aws v2.81.0

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

バージョンの変更

今回、.terraform-versionとmain.tfにて管理していましたので以下の変更をしました。

.terraform-version
- 0.13.5
+ 0.15.1
main.tf
terraform {
-  required_version = "0.13.5"
+  required_version = "0.15.1"
  backend "s3" {}
}

.terraformを削除してinitを実行します。

init
terraform init -backend-config="key={S3ディレクトリ構成}" -backend-config="profile={AWSプロファイル}"

※ backendファイルに書いて指定する方がスマートかもしれません

planを実行します。

plan
terraform plan -var-file=./variables.tfvars -var "色々必要な値"

実行後の主なお叱りが以下です。

非推奨エラー(Warning)
 Warning: Version constraints inside provider configuration blocks are deprecated
│
│   on ../component/AWS_StaticWeb_directory/provider.tf line 31, in provider "aws":
│    2:   version = "~> 2.81"
│
│ Terraform 0.13 and earlier allowed provider version constraints inside the provider configuration block, but that is now deprecated and will be removed in a future version of
│ Terraform. To silence this warning, move the provider version constraint into the required_providers block.

provider.tfでvarsionの指定するのは非推奨??

listの実行エラー(Error)
Error: Error in function call
│
│   on ../component/AWS_StaticWeb_directory/main.tf line 21, in locals:
│   15:   lambda_functions = list(aws_lambda_function.hoge.qualified_arn...)
│     ├────────────────
│     │ aws_lambda_function.hoge.qualified_arn will be known only after apply
│
│ Call to function "list" failed: the "list" function was deprecated in Terraform v0.12 and is no longer available; use tolist([ ... ]) syntax to write a literal list.
╵

list関数が使えない??

エラー修正

Warning: Version constraints inside provider configuration blocks are deprecated

こちらは、0.14以降からlockファイルの導入が推奨されるようです。
planを実行すると.terraform.lock.hclのファイルが生成され、このファイルで管理するようです。
<参考>
Terraform職人再入門2020

main.tfのproviderのversionを削除しました。

provider.tf
provider "aws" {
-  version = "~> 2.81"
  profile = var.profile
  region  = var.region
}

Call to function "list" failed: the "list" function was deprecated ...

エラー内容そのままのとおりですが、list()ではなくtolist([...])を使って下さいとのことです。
<参考>
Updates needed for Terraform 0.15

対象のlist関数を変更しました。

main.tf
- lambda_functions = list(aws_lambda_function.hoge.qualified_arn...)
+ lambda_functions = tolist([aws_lambda_function.hoge.qualified_arn...]) 

Applyの実行

apply
terraform apply -var-file=./variables.tfvars -var "色々必要な値" 
バージョン確認
% terraform --version
Terraform v0.15.1
on darwin_amd64
+ provider registry.terraform.io/hashicorp/archive v2.1.0
+ provider registry.terraform.io/hashicorp/aws v3.38.0

無事成功です。
S3バケットに格納されているtfstateも正常に0.15.1に変更されておりました。
ついでに、.terraform.lock.hclを変更して、AWS providerもあげちゃっております。

最後に

メンテナンスをおろそかにしていましたが、やっと更新することができました:relaxed:
エラー内容も的確に指摘してくれますし、Terraformでの管理の良さを改めて実感しました。

そういえば、terraform fmt -recursiveコマンド実行していなかった。。。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?