gpt4 book ai didi

amazon-web-services - 当 ECS 中有多个服务仅命令不同时,如何避免 terraform 重复?

转载 作者:行者123 更新时间:2023-12-05 05:11:56 25 4
gpt4 key购买 nike

我们通过定义一个 template_file 在 Terraform 中创建 ECS 服务,该文件使用所有需要的变量填充任务定义 JSON 模板。然后使用呈现的 template_file 创建一个 aws_ecs_task_definition。通过此任务定义,创建了 aws_ecs_service:

data "template_file" "web" {
template = "${file("${path.module}/tasks/web.json")}"

vars {
...
}
}

resource "aws_ecs_task_definition" "web" {
container_definitions = "${data.template_file.web.rendered}"
requires_compatibilities = ["FARGATE"]
...
}

data "aws_ecs_task_definition" "web" {
task_definition = "${aws_ecs_task_definition.web.family}"
}

resource "aws_ecs_service" "web" {
name = "web"
task_definition = "${aws_ecs_task_definition.web.family}:${max("${aws_ecs_task_definition.web.revision}", "${data.aws_ecs_task_definition.web.revision}")}"
...
}

还有其他服务的任务定义与第一个服务几乎相同,只是像另一个命令一样有细微差别(例如启动 sidekiq 而不是 Web 应用程序)。

除了复制所有内容(JSON 模板、template_file 和所有定义的变量、aws_ecs_task_definitionaws_ecs_service 之外,还有其他方法吗? )?

最佳答案

Modules是在 Terraform 中解决这个问题的主要方法。

如果将现有代码移动到单个文件夹中,则可以定义允许您自定义该模块的变量,例如要传递给 ECS 服务的命令。

所以在你的情况下你可能有这样的东西:

模块/foo-service/main.tf

data "template_file" "web" {
template = "${file("${path.module}/tasks/web.json")}"

vars {
# ...
command = "${var.command}"
}
}

resource "aws_ecs_task_definition" "web" {
container_definitions = "${data.template_file.web.rendered}"
requires_compatibilities = ["FARGATE"]
# ...
}

data "aws_ecs_task_definition" "web" {
task_definition = "${aws_ecs_task_definition.web.family}"
}

resource "aws_ecs_service" "web" {
name = "web"
task_definition = "${aws_ecs_task_definition.web.family}:${max("${aws_ecs_task_definition.web.revision}", "${data.aws_ecs_task_definition.web.revision}")}"
# ...
}

modules/foo-service/variables.tf

variable "command" {}

暂存/main.tf

module "foo_service_web" {
source = "../modules/foo-service"
command = "bundle exec server"
}

module "foo_service_sidekiq" {
source = "../modules/foo-service"
command = "bundle exec sidekiq"
}

关于amazon-web-services - 当 ECS 中有多个服务仅命令不同时,如何避免 terraform 重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com