是否可以使用一个 terraform 云工作空间的输出作为另一个工作空间中的变量?

kol*_*man 3 terraform terraform-provider-aws

以下是更多详细信息:

工作空间-A(基础堆栈):此工作空间包含将创建 AWS 的代码:VPC、SG、路由表、子网和相关关联等。

工作区-B(Service-1 堆栈):此工作区包含用于创建 AWS 的代码:ALB、一些使用 Fargate 的 ECS 容器以及与此服务相关的一些其他组件。

现在,在上述情况下,任何服务(Service-1、2、3 等)都将使用 Workspace-A 创建的 VPC/基础堆栈,我们如何使用 Workspace A(VPC、SG、子网等)的输出作为变量工作区 B 以便工作区 B 可以使用这些 VPC 和其余组件。

小智 11

您可以通过使用'remote_state'数据源来实现此目的,为此,您必须配置 Terraform 远程后端以连接到您的 Terraform 工作区。

任何能够共享其状态的工作区都必须配置“输出”。

对于 Workspace-A,您可以将 VPC 配置为输出 -

output "vpc_id" {
  description = "The VPC ID"
  value = aws_vpc.my_vpc.id
}
Run Code Online (Sandbox Code Playgroud)

使用 Workspace-A 运行 terraform apply 后,为 Workspace-B 配置 tf 文件,如下所示 -

data "terraform_remote_state" "vpc" {
  backend = "remote"

  config = {
    organization = "org-****"
    workspaces = {
      name = "workspace-A"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

此 Terraform 配置现在可以访问 Workspace-A 的输出,如下所示:

resource "aws_instance" "foo" {
  # ...
  subnet_id = data.terraform_remote_state.vpc.outputs.subnet_id
}
Run Code Online (Sandbox Code Playgroud)

PS - 我意识到已经晚了,但它可能对其他人有用。