无法从S3下载tfstate文件

首先

在使用Terraform构建资源时,有两个AWS账户,一个用于保存tfstate文件,另一个用于创建资源。由于无法从S3下载tfstate文件,我们将列出其中的原因。
首先,在Terraform中,您可以通过backend指定tfstate文件的保存位置,如以下代码所示。

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "3.50.0"
    }
  }
  # この部分
  backend "s3" {
    bucket = "xxxxxxxxxxxxxx"
    key = "terraform.tfstate"
    region = "xxxxxxxxxxxxxx"
    profile = "xxxxxxxxxxxxx"
  }
}

provider "aws" {
  profile = var.aws_profile
  region = var.aws_region
}

我遭遇的事件

由于没有分割后端S3和提供者AWS的profile属性,导致保存tfstate的帐户和执行Terraform的帐户合并在一起。

将Terraform创建的资源的tfstate文件存储在保存tfstate文件的存储桶的账户中。

总的来说,情况是这样的:
存储了tstate文件的存储桶权限:将要保存tfstate文件的AWS账户
tstate文件(对象)的权限:由Terraform创建资源的账户

预防措施

只需按照上述说明,在backend块和provider块中正确指定配置文件,即可在tfstate保存目标账户上下载tfstate文件。

换句话说,就像下面这样写。

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "3.50.0"
    }
  }
  # この部分
  backend "s3" {
    bucket = "xxxxxxxxxxxxxx"
    key = "terraform.tfstate"
    region = "xxxxxxxxxxxxxx"
    # tfstate保存先アカウントの権限でtfstateファイルを格納する。
    profile = "xxxxxxxxxxxxx"
  }
}

provider "aws" {
  # AWSリソースを作成する環境と権限は、Terraformでリソースを作成するアカウントを指定する。
  profile = var.aws_profile
  region = var.aws_region
}

如果时间已经很晚的话

请在通过Terraform创建资源的帐户中使用AWS CLI等工具下载tfstate文件,并考虑更改对象权限等事项。

广告
将在 10 秒后关闭
bannerAds