标签: terraform-remote-state

无法使用“terraform init -reconfigure”将 S3 后端中的 Terraform 远程状态转换为本地状态

我正在使用 Terraform v1.0.0 并使用 AWS S3 和 AWS DynamoDB 创建远程后端,如Yevgeniy Brikman 的Terraform Up & Running中所述:

\n
    \n
  1. 我为 S3 存储桶和 DynamoDB 表编写了代码,并通过以下方式创建了资源terraform apply
  2. \n
  3. 我添加terraform { backend "S3" {} }到我的代码中
  4. \n
  5. 我创建了一个backend.hcl包含所有相关参数的文件
  6. \n
  7. 我通过调用将本地状态移至 S3terraform init -backend-config=backend.hcl
  8. \n
\n

现在我想将远程状态转换回本地状态,以便我可以安全地删除远程后端。Brikman 解释说,要做到这一点,必须删除backend配置并调用terraform init. 当我尝试这个时,我看到这个:

\n
$ terraform init\nInitializing modules...\n\nInitializing the backend...\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Backend configuration changed\n\xe2\x94\x82 \n\xe2\x94\x82 A change in the backend configuration has been detected, which may require migrating …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-remote-state

9
推荐指数
1
解决办法
4627
查看次数

在 Terraform 远程后端使用变量

# Using a single workspace:
terraform {
  backend "remote" {
    hostname = "app.terraform.io"
    organization = "company"

    workspaces {
      name = "my-app-prod"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

对于 Terraform 远程后端,是否有一种方法可以使用变量来指定组织/工作区名称而不是那里的硬编码值?

Terraform 文档似乎 也没有提及任何相关内容。

terraform terraform-provider-azure terraform-remote-state

6
推荐指数
1
解决办法
2695
查看次数

使用另一个项目的 Terraform 状态输出

我最近将 Terraform 从 11.11 升级到 12.24,运行 0.12upgrade 后,访问远程 terraform_state 输出不再有效。

我得到的错误是:该对象没有名为“subnet_id”的属性

这是我的配置:

Repo 1(创建网络、子网等)

network 
| main.tf 
| output.tf
Run Code Online (Sandbox Code Playgroud)

output.tf 的内容(来自上面):

output "subnet_ids" {
  value = openstack_networking_subnet_v2.openstack-subnet.*.id
}

output "network_ids" {
  value = openstack_networking_network_v2.openstack-networks.*.id
}
Run Code Online (Sandbox Code Playgroud)

在上面的存储库中运行 Terraform 输出,给出以下输出(修改后的 id):

network_ids = [
  "08adfe73-dfg5-404d-958e-e8db73121531",
  "c0b561e5-320c-46b3-b328-98723f54ef82",
  "200eb570-b734-4b18-9250-6ckae90ea0e1",
  "84c43fc5-771c-4c79-8670-3d858788661e",
]
subnet_ids = [
  "f5df394f-d542-492a-a224-eefb998536ac",
  "f0f5d2fe-e83c-4041-971a-bba34870d5de",
  "89e966b1-826e-483d-b312-bb7aa9893a02",
  "76d6dfda-8161-4961-89a6-39aeeb82db3c",
]
Run Code Online (Sandbox Code Playgroud)

Repo 2(创建计算平台)

infrastructure
| main.tf
  | modules 
    | compute
      | main.tf
Run Code Online (Sandbox Code Playgroud)

计算的 main.tf 的内容:

...
data "terraform_remote_state" "base_networking_a" {
  backend = "s3" …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-remote-state

5
推荐指数
1
解决办法
8092
查看次数

如何让 Terraform 中的 Docker 提供程序在尝试连接之前等待地址可用?

我在 Terraform 中有以下资源:

provider "docker" {
    host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
}
Run Code Online (Sandbox Code Playgroud)

这依赖于在ipv4_address连接到 docker 机器之前要知道的值。在供应另一个资源之前,该值是未知的:

provider "docker" {
    host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
}
Run Code Online (Sandbox Code Playgroud)

当我运行时terraform plan,出现以下错误:

错误:初始化 Docker 客户端时出错:无法解析 docker 主机``

在 docker.tf 第 1 行,在提供者“docker”中:1:提供者“docker”{

它似乎ipv4_address是空的,因为 docker 插件在配置之前尝试连接到 docker 机器。我如何告诉它在尝试连接之前等待机器配置?


我尝试过的一件事:

provider "docker" {
    host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
    depends_on = [
        digitalocean_droplet.docker_server.ipv4_address,
    ]
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到此错误:

错误:提供程序块中的保留参数名称

在 docker.tf 第 4 行,在提供者“docker”中:4:depends_on = [

提供程序参数名称“depends_on”保留供 Terraform 在未来版本中使用。

但是阅读更多内容depends_on,我认为无论如何这都不是解决方案。

terraform terraform-remote-state terraform-provider-docker

4
推荐指数
1
解决办法
774
查看次数

Terraform 设置 - 远程状态 s3 - InvalidParameter 验证错误

环境

Terraform v0.12.24 + provider.aws v2.61.0

在高山容器中运行。

背景

我有一个基本的 terraform 脚本运行正常,但现在我正在扩展它并尝试配置远程(S3)状态。

地形.tf:

terraform {
  backend "s3" {
    bucket         = "labs"
    key            = "com/company/labs"
    region         = "eu-west-2"
    dynamodb_table = "labs-tf-locks"
    encrypt        = true
  }
}
Run Code Online (Sandbox Code Playgroud)

桶存在,表也存在。我已经用 terraform 创建了它们,并通过控制台进行了确认。

问题

当我运行时,terraform init我得到:

Error refreshing state: InvalidParameter: 2 validation error(s) found.
- minimum field size of 1, GetObjectInput.Bucket.
- minimum field size of 1, GetObjectInput.Key.
Run Code Online (Sandbox Code Playgroud)

我试过的

terraform fmt没有错误报告并愉快地重新格式化我的terraform.tf文件。我也尝试将节移动到我的中main.tf,以防万一该terraform.tf文件因某种原因被忽略。我得到了完全相同的结果。

我也尝试在没有 alpine 容器的情况下从 aws 中的 ubuntu …

terraform terraform-remote-state

4
推荐指数
1
解决办法
4456
查看次数

Terraform_Remote_State 错误:此对象没有参数、嵌套块或名为“vpc_id”的导出属性

在 AWS 中使用 Terraform (TF),在尝试使用 terraform_remote_state 调用 vpc_id 时遇到错误。我们分割了网络的不同部分,以减轻状态滑移。然而,它还需要与基础设施每个单独部分的状态文件(即 vpc、sgs、角色等的状态文件)进行交互。当我尝试从 S3 存储桶中保存的状态文件中获取 vpc_id 时,出现以下错误:


  on main.tf line 78, in module "vpc_sg":
  78:   vpc_id = data.terraform_remote_state.vpc.vpc_id

This object has no argument, nested block, or exported attribute named
"vpc_id".
Run Code Online (Sandbox Code Playgroud)

这是我在 main.tf 文件中的 terraform_remote_state 调用:

  backend = "s3"
  workspace = var.workspace
  config = {
    bucket = "terraform-east"
    key = "terraform-vpc.tfstate"
    region ="us-east-1" 
  }
}
Run Code Online (Sandbox Code Playgroud)

这是同一个 main.tf 中的调用

  // output "sg_id"
  source = "git::https://url_to_sg.git/reference?
  vpc_cidr = data.terraform_remote_state.vpc.vpc_cidr -- This line also doesn't work.. but …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services terraform terraform-remote-state

3
推荐指数
1
解决办法
9932
查看次数