Terraform s3后端 vs terraform_remote_state

19
根据文档,要使用s3而不是本地的terraform.tfstate文件来存储状态,应该配置一个后端,大致如下:
terraform {

  backend "s3" {
      bucket = "my-bucket-name"
      key = "my-key-name"
      region = "my-region"
  }
}

我曾经

  • 使用本地(terraform.tfstate)文件
  • 在我的provided.tf文件中添加上述代码片段
  • 再次运行terraform init
  • 被terraform要求将我的状态迁移到上述存储桶

...到目前为止都很好...

但是接下来是关于terraform_remote_state这个令人困惑的部分...

我为什么需要这个?

难道我的状态现在不是已经被保存在远程(在上面提到的s3存储桶)了吗?


我相当确定你已经在使用 Terraform Remote State,但是使用 S3 作为后端。当你说“S3 后端”时,那就是远程状态的后端。 - Matt Schuchard
这是一个可直接使用的版本,可以为您处理完整的后端设置。https://github.com/getstrake/aws-pricing-sheets-addon - A. R. Younce
2个回答

38

terraform_remote_state 不是用于存储状态,而是用于在另一个 Terraform 计划中检索状态(如果您有输出)。它是一个数据源。例如,如果您在一个状态中输出了您的弹性 IP 地址:

resource "aws_eip" "default" {
  vpc      = true
}

output "eip_id" {
  value = "${aws_eip.default.id}"
}

然后想在另一个状态中检索它:

data "terraform_remote_state" "remote" {
  backend = "s3"
  config {
    bucket = "my-bucket-name"
    key = "my-key-name"
    region = "my-region"
  }
}

resource "aws_instance" "foo" {
  ...
}

resource "aws_eip_association" "eip_assoc" {
  instance_id   = "${aws_instance.foo.id}"
  allocation_id = "${data.terraform_remote_state.remote.eip_id}"
}

编辑:如果您正在检索Terraform > 0.12中的输出,则需要包含outputs

data "terraform_remote_state" "remote" {
  backend = "s3"
  config {
    bucket = "my-bucket-name"
    key = "my-key-name"
    region = "my-region"
  }
}

resource "aws_instance" "foo" {
  ...
}

resource "aws_eip_association" "eip_assoc" {
  instance_id   = "${aws_instance.foo.id}"
  allocation_id = "${data.terraform_remote_state.remote.outputs.eip_id}"
}

1
那么如果我不使用 outputs,就没有必要使用远程状态了吗? - pkaramol
1
正确,除非您要检索输出,否则不需要它。 @pkaramol - Brandon Miller
令人惊讶的是,我发现很多帖子中人们把“后端状态”称为“远程状态”。正如@Brandon所说,它们是不同的。 - woter324
3
如果您的Terraform版本>=0.12,请在引用outputs时确保包括outputsdata.terraform_remote_state.remote.outputs.eip_id - David He
配置块需要一个 = 信号。 config = { ... } - ajkret

0

远程状态允许您与其他团队成员协作,并提供一个中央位置来存储基础设施状态。 此外,通过启用S3版本控制,您可以对状态文件进行版本控制,以跟踪更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接