如果在使用Terraform的AWS提供程序中出现“创建EC2元数据会话时发生错误”的情况,可以采取以下措施解决

首先

最近我开始学习使用Terraform,然后在使用过程中想尝试迁移到Terraform Cloud,因此我也想尝试使用AWS提供商的Dynamic Credentials。但在尝试的过程中出现了标题所述的错误,因此我将解决方法记录下来作为备忘。

解决方案 (jiě jué àn)

为了那些想要快速了解的人们,我提前写下了以下的解决步骤,实际上只需要完成以下步骤即可解决。

    AWSプロバイダーバージョンを2系から3系にupgradeした

事情的发生

按照以下步骤将之前在本地运行的Terraform状态管理迁移到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文件如下。
我在组织和工作区中放置了占位符。

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"
}

调查原因 chá)

我认为这个链接所提供的内容与最初的AWS页面非常相似,不过我查看了以下官方页面来调查原因,但并没有找到特定的可能原因。

 

此外,我还从AWS管理控制台中查看了被Terraform Cloud假设的IAM角色的“最后活动”,发现显示为“无”。因此,我开始怀疑是否有配置错误,导致假设本身没有被执行,并对所有配置内容进行了全面确认,但没有发现任何错误。

搞定!

没有特别的原因,只是隐约觉得可能是由于提供程序版本太旧了。于是我将版本修正为3系,并使用”terraform init -upgrade”和”terraform plan”命令执行时没有发生任何错误,指令成功执行。
※由于我是唯一使用此环境的人,所以不需要太过关注版本差异,我升级了版本。

~省略~
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
~省略~

最后

在解决问题后,我试图寻找相应的文件,但没有特别找到,如果您知道的话,能告诉我就很高兴了。无论如何,很高兴问题得到解决。

bannerAds