我在 terraform 的后端配置中遇到了这个问题。我在运行 Terraform 计划时收到此错误。
错误:配置 Terraform AWS Provider 时出错:找不到 Terraform AWS Provider 的有效凭证源。 │ │ 请参阅 https://registry.terraform.io/providers/hashicorp/aws │ 了解有关提供凭据的更多信息。 │ │ 错误:刷新缓存凭证失败,未找到 EC2 IMDS 角色,操作错误 ec2imds:GetMetadata,请求发送失败,获取“http://169.254.169.254/latest/meta-data/iam/security-credentials/”:拨号tcp 169.254.169.254:80:i/o 超时
with provider["registry.terraform.io/hashicorp/aws"].west,
│ 在providers.tf 第 5 行,提供商“aws”中: │ 5: 提供商“aws”{ │ ╵
这是代码,没有谷歌页面可以帮助解决此错误。我将不胜感激任何帮助,我将永远感激不已
terraform {
`enter code here`backend "remote" {
organization = "Gnome2"
workspaces {
name = "terraform-begin"
}
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.8.0"
}
} }
provider "aws" {
region = "us-east-1"
}
provider "aws" {
alias = "west"
region = "us-west-1"
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
providers = {
aws = aws.west
}
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
enable_vpn_gateway = true
tags = {
Terraform = "true"
Environment = "dev"
}
}
您可以使用 AWS CLI 连接到您的 AWS 账户吗?比如列出您的 AWS s3 存储桶?根据错误,我认为您没有通过在 CLI 上执行
aws configure
来配置 AWS。这将要求您拥有用于设置的访问密钥 ID 和秘密。
您必须在
Terraform Cloud
中配置 AWS 的凭证。在Terraform Cloud
平台中,转到Settings -> Variable Sets -> Create Variable Set
,输入一些“名称”,选中“应用到该组织中的所有工作区”,然后单击“添加变量”按钮。选择“环境变量”选项,并告知key=AWS_ACCESS_KEY_ID
和value="Access key ID"
。 “访问密钥 ID”是来自 AWS 凭证 (IAM) 的 ID。选中“敏感”复选框,然后单击“添加变量”按钮。因此,重试此过程以添加新的 Environment variable
和 key/value
对 AWS_SECRET_ACCESS_KEY/Secret access key of AWS credential
。最后,单击“创建变量集”按钮。重试 terraform plan
命令。查看更多信息 https://developer.hashicorp.com/terraform/tutorials/aws-get-started/aws-remote#set-workspace-variables
有一种安全的方法可以通过 AWS 对 Terraform Cloud 进行身份验证,从而完全避免机密:
该角色包括如下所示的信任关系。将
my-tfc-org
替换为您在 Terraform 中的组织名称,并将 <aws-account-id>
替换为您的 aws 帐号。
还将您的 terraform 所需的所有权限附加到角色。
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<aws-account-id>:oidc-provider/app.terraform.io"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"app.terraform.io:aud": "aws.workload.identity"
},
"StringLike": {
"app.terraform.io:sub": "organization:my-tfc-org:project:*:workspace:*:run_phase:*"
}
}
}
]
}
TFC_AWS_RUN_ROLE_ARN 的值指向您上面创建的角色:
这个答案是 AWS 文档的复制品:
我也有类似的问题。
要解决此问题,请首先添加后端配置设置,如下例所示:
backend "remote" {
hostname = "app.terraform.io"
organization = "org-example"
workspaces {
name = "my-aws-app"
}
}
然后在终端中执行:
terraform init -reconfigure
然后转到 Terraform Cloud,选择您的工作区,在我的示例中为 my-aws-app,然后在变量/工作区变量下选择添加变量并添加
AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
确保在顶部选择环境变量时选择环境变量.
然后您可以返回终端并执行
terraform plan
现在应该可以正常工作了。