无法从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文件,并考虑更改对象权限等事项。