我需要 terraform 才能访问我的 S3 存储桶,但它无法在指定区域找到存储桶。
我 main.tf:
provider "aws" {
region = "eu-west-2"
}
terraform {
backend "s3" {
bucket = "xyz-state-blog"
key = "dev/terraform"
region = "eu-west-2"
}
}
locals {
azs = ["eu-west-2a", "eu-west-2b", "eu-west-2c"]
environment = "dev"
kops_state_bucket_name = "${local.environment}-kops-state"
// Needs to be a FQDN
kubernetes_cluster_name = "k8s-dev0.domain.com"
ingress_ips = ["10.0.0.100/32", "10.0.0.101/32"]
vpc_name = "${local.environment}-vpc"
tags = {
environment = "${local.environment}"
terraform = true
}
}
data "aws_region" "current" {}
以下是我在命令terraform init
遇到的错误:
Error inspecting states in the "s3" backend:
BucketRegionError: incorrect region, the bucket is not in 'eu-west-2' region
status code: 301, request id: , host id:
,删除 .terraform 文件夹并再次尝试terraform init
为我解决了与区域相关的问题。
无需删除整个 .terraform 文件夹:
- 找到您的
.terraform/terraform.tfstate
- 删除负责存储桶
S3
JSON 对象 - 删除生成远程后端的节
- 运行
terraform init
和享受
出现错误显然是因为没有创建要与之同步的 S3 存储桶。
无需删除整个 .terraform 文件夹:
首先找到存储桶所在的正确区域,然后您可以使用terraform init -reconfigure
命令重新配置 terraform,它会解决您的问题。
我这边的问题是我没有在我的 aws 提供商块中指定区域。
不知何故,在我将其设置为 us-east-1
并按照@Dhruv Modi 的建议使用terraform init -reconfigure
后,错误不再发生。
如果它对任何人有帮助,以下是我在提供程序块中指定区域的方式:
provider "aws" {
region = "us-east-1"
# ...
}
我遇到了这个问题并浪费了很多时间,我想我会分享我的经验,它可能会帮助其他人。
当您在其他地方定义aws"区域"时,几乎总是发生这种情况,而不是您认为已定义它的位置,并且其他定义会覆盖您认为已定义的值。
就我而言,它在~/.aws/config配置文件中,有些人可能会在~/.aws/profile中找到它。
您可以通过以下两种方法之一确保获得正确的值:
- 从命令行导出 AWS_DEFAULT_REGION=
#。或: - 如果您使用的是 terraform/terragrunt,以下是优先级顺序