【发布时间】: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
...
}
【问题讨论】:
-
您可以使用,
remote_state_data数据源将值从 common-infra 状态获取到 ecs-service 部分。terraform.io/docs/language/state/remote-state-data.html
标签: terraform