Terraform S3后端vs terraform_remote_state

pka*_*mol 6 terraform

根据文档,要使用s3而不是本地terraform.tfstate文件来存储状态,应按以下方式或多或少地配置后端:

terraform {

  backend "s3" {
      bucket = "my-bucket-name"
      key = "my-key-name"
      region = "my-region"
  }
}
Run Code Online (Sandbox Code Playgroud)

我曾是

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

...到目前为止,一切都很好...

但是随后出现了这个令人困惑的部分terraform_remote_state...

我为什么需要这个?

现在我的状态不是已经远程保存(在上述s3存储桶中)了吗?

Bra*_*ler 13

terraform_remote_state不是用于存储状态,如果有输出,则可以在另一个地形计划中进行检索。它是一个数据源。例如,如果您以一种状态输出弹性IP地址:

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

output "eip_id" {
  value = "${aws_eip.default.id}"
}
Run Code Online (Sandbox Code Playgroud)

然后想在另一种状态下检索它:

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}"
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您的 terraform > = 0.12 `data.terraform_remote_state.remote.outputs.eip_id`,请确保在引用输出时包含 `outputs` (3认同)