【问题标题】:how to prevent resource creation in terraform when refering output of one project wiith common resources in another project当引用一个项目的输出与另一个项目中的公共资源时,如何防止在 terraform 中创建资源
【发布时间】:2021-07-12 07:48:07
【问题描述】:

在一个解决方案中有 2 个项目。 common-infra 项目用于创建所有其他服务使用的 ecs 集群和常见的 ecs 服务,如 nginx。 ecs-service1 项目包含用于创建 ecs 服务的资源定义。我确实在我的 ecs-service1 项目中引用了在 common-infra 项目中创建的资源 ARN。

我首先去 common-infra 做 terraforma 计划和创建。现在集群和 nginx 服务已启动并运行。接下来我去 ecs-service1 然后去 terraform 计划。在这一点上,它认识到我已经链接到一个模块 common-infra 并表明它将再次创建集群和公共服务,如 nginx。

有没有办法安排/引用项目,当我从 plan ecs-service1 运行 terrafrom plan ecs-service1 时,它知道 common-infra 已经构建并且它知道状态并且它只在 ecs- 中创建资源services1 并且只提取在 common-infra 中创建的 ARN 引用?

.
├── ecs-service1
│   ├── main.tf
│   ├── task-def
│   │   ├── adt-api-staging2-task-definition.json
│   │   └── adt-frontend-staging2-task-definition.json
│   ├── terraform.tfstate
│   ├── terraform.tfstate.backup
│   └── variables.tf
├── common-infra
│   ├── main.tf
│   ├── task-def
│   │   └── my-nginx-staging2-task-definition.json
│   ├── terraform.tfstate
│   ├── user-data.sh
│   └── variables.tf
└── script
    └── get-taskdefinitions.sh

common-infra main.tf

output "splat_lb_listener_http_80_arn"{
  value = aws_lb_listener.http_80.arn
}

output "splat_lb_listener_http_8080_arn"{
  value = aws_lb_listener.http_8080.arn
}

output "splat_ecs_cluster_arn" {
  value = aws_ecs_cluster.ecs_cluster.arn
}

ecs-service1 main.tf

module "splat_common" {
  source = "../common-infa"
}

resource "aws_ecs_service" "frontend_webapp_service" {

    name = var.frontend_services["service_name"]
    cluster = module.splat_common.splat_ecs_cluster_arn 
...
}

【问题讨论】:

标签: terraform


【解决方案1】:

有一些解决方案,但首先我想说的是,您的 ecs-service 应该仅将 common-infra 作为一个模块调用 - 这样所有的资源创建都会立即处理(而不是拆分为你描述的)。

另一种解决方案是使用 terraform import 将当前状态放入现有的 terraform。这不太理想,因为现在您拥有由 2 个状态文件管理的相同基础架构。

如果您包含 common-infra 因为它提供了一些输出,您应该考虑使用 data 查找 (https://www.terraform.io/docs/language/data-sources/index.html)。您甚至可以参考其他 terraform 状态 (https://www.terraform.io/docs/language/state/remote-state-data.html) 的输出(虽然我从未真正尝试过,但它可以做到)。

【讨论】:

    猜你喜欢
    • 2020-12-17
    • 2021-12-11
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2020-10-10
    • 2014-07-16
    • 2022-07-28
    • 2022-10-24
    相关资源
    最近更新 更多