はじめに
最近Terraformに入門したのですが、使っていくうちにTerraform Cloudに移行してみたくなり、それならDynamic Credentials with the AWS Providerも使ってみたいなーとやってみたら掲題のエラーが発生したので、備忘がてら解決方法を残しておきます。
解決方法
手っ取り早く知りたい人のために先に書いておきますが、実際に解決のためにやった作業は以下だけです。
- AWSプロバイダーバージョンを2系から3系にupgradeした
事象
以下に記載されている手順を参考にローカルで運用していたTerraformのstate管理をTerraform Cloudに移行し、ローカルでterraform planを実行したところエラーが発生してデプロイができませんでした。
具体的には以下のエラーが発生しました。
Planning failed. Terraform encountered an error while generating this plan.
╷
│ Error: error creating EC2 Metadata session: CredentialRequiresARNError: credential type web_identity_token_file requires role_arn, profile default
│
│   with provider["registry.terraform.io/hashicorp/aws"],
│   on variables.tf line 18, in provider "aws":
│   18: provider "aws" {
│
╵
エラーが発生したときのtfファイルは以下です。
organizationとworkspaceにはダミーを入れてます。
terraform {
  required_version = ">= 0.14"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 2.0"
    }
  }
  backend "remote" {
    organization = "sample_org"
    workspaces {
      name = "sample_workspace"
    }
  }
}
provider "aws" {
  region = "ap-northeast-1"
}
原因調査
最初のAWSのページとほど同じ内容だとは思いますが、以下の公式のページを見たりして原因を調査しましたが、特に原因と思われる箇所については特定できませんでした。
また、AWSのマネジメントコンソールからTerraform CloudからAssumeされるIAM Roleの「最後のアクティビティ」を見ると"なし"になっていたので、設定が何か間違っていてAssume自体が行われていないのではと思い、設定内容を全部再確認してみたのですが設定は何も間違っていませんでした。
解決!
特に理由があるわけではないですが、何となくプロバイダーバージョンが古い可能性があるんじゃないかと思いついて、以下のようにバージョンを3系に修正して「terraform init -upgrade」して「terraform plan」をするとエラーが発生せず、正常にコマンドが成功しました。
※自分しか使っていない環境なのでバージョン差分についてはそこまで気にせずバージョン上げました
~省略~
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
~省略~
おわりに
解決した後もそれらしきドキュメントを探しては見たのですが、特に見つからなかったので、もしご存じの方がいれば教えていただけると嬉しいです。
何はともあれ解決してよかったです。

