【问题标题】:Terraform init fails for remote backend S3 when creating the state bucket创建状态存储桶时,远程后端 S3 的 Terraform 初始化失败
【发布时间】:2019-02-22 02:26:02
【问题描述】:

我正在尝试为我的 S3 存储桶创建远程后端。

provider "aws" {
  version = "1.36.0"
  profile = "tasdik"
  region  = "ap-south-1"
}

terraform {
  backend "s3" {
    bucket = "ops-bucket"
    key    = "aws/ap-south-1/homelab/s3/terraform.tfstate"
    region = "ap-south-1"
  }
}

resource "aws_s3_bucket" "ops-bucket" {
  bucket = "ops-bucket"
  acl    = "private"

  versioning {
    enabled = true
  }

  lifecycle {
    prevent_destroy = true
  }

  tags {
    Name       = "ops-bucket"
    Environmet = "devel"
  }
}

我还没有应用任何东西,存储桶目前不存在。所以,terraform 要求我做一个init。但是当我尝试这样做时,我得到了一个

$ terraform init       

Initializing the backend...

Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Error loading state: BucketRegionError: incorrect region, the bucket is not in 'ap-south-1' region
    status code: 301, request id: , host id:

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    Terraform 将在任何其他操作(例如计划或应用)之前初始化任何状态配置。因此,您不能在定义状态后端的同时为要存储的状态创建 S3 存储桶。

    Terraform 也不会创建 S3 存储桶供您放入状态,您必须提前创建它。

    您可以在 Terraform 之外执行此操作,例如使用 AWS CLI:

    aws s3api create-bucket --bucket "${BUCKET_NAME}" --region "${BUCKET_REGION}" \
              --create-bucket-configuration LocationConstraint="${BUCKET_REGION}"
    

    或者您可以在尝试这样做时通过 Terraform 创建它,但使用本地状态在第一个 apply 上创建存储桶,然后添加状态配置并重新初始化以使 Terraform 将状态迁移到您的新的 S3 存储桶。

    至于错误消息,S3 存储桶名称在所有区域和所有 AWS 账户中都是全局唯一的。错误消息告诉您它运行了GetBucketLocation 调用,但在ap-south-1 中找不到存储桶。在创建存储桶时,我建议通过将账户 ID 和可能的区域名称连接到存储桶名称等操作来确保它们可能是唯一的。

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 2017-01-05
      • 2020-02-05
      • 2018-05-29
      • 2018-02-26
      • 2022-01-12
      • 2019-05-02
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多