【发布时间】:2017-06-05 22:58:51
【问题描述】:
我正在使用 Terraform 在 AWS 云上使用 ECS 设置容器集群,但在映射负载均衡器以将流量引导到集群上运行的多个容器时遇到了问题。
为简化起见,假设我正在使用两个容器运行服务/任务:webrequester 在 5600 上侦听,restserver 在 5000 上侦听。我需要请求 /api/* 的流量去端口 5000 上的 restserver 和默认流量去到 5600 上的 webrequester。无论我正在运行的容器主机实例的数量如何,这都应该有效。
我最好的理解是我需要创建一个aws_alb_target_group_attachment 来建立这个关联并将它的target_id 设置为Container ID。它是否正确?如果是这样,我如何在 Terraform 中获取容器 ID?我已经创建了一个集群、服务、任务、应用程序负载均衡器以及使它们运行所需的所有实体,但我不知道哪些实体(如果有的话)可以让我访问容器 ID。
以下是我认为 Terraform 脚本的相关部分:
resource "aws_ecs_cluster" "main" {
name = "jsapps-am${var.am_number}${var.cluster_iteration}"
}
resource "aws_alb_target_group" "https_default" {
name = "https-default-tg"
port = 443
protocol = "HTTPS"
vpc_id = "${var.vpc_id}"
}
resource "aws_alb" "main" {
name = "af-${var.am_number}${var.cluster_iteration}-alb"
subnets = ["${var.vpc_subnets}"]
security_groups = ["${aws_security_group.lb_sg.id}"]
}
resource "aws_alb_listener" "front_end" {
load_balancer_arn = "${aws_alb.main.id}"
port = "443"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-2015-05"
certificate_arn = "${var.https_certificate_arn}"
default_action {
target_group_arn = "${aws_alb_target_group.https_default.id}"
type = "forward"
}
}
data "template_file" "task_definition" {
template = "${file("${path.module}/task-definition.json")}"
vars {
image_url = "${var.task_url}"
container_name = "webrequester"
port_num = "${var.webrequester_port}"
}
}
resource "aws_ecs_task_definition" "jsapps" {
family = "jsapps_taskdef"
container_definitions = "${data.template_file.task_definition.rendered}"
}
resource "aws_ecs_service" "jsapps" {
name = "jsapps-svc"
cluster = "${aws_ecs_cluster.main.id}"
task_definition = "${aws_ecs_task_definition.jsapps.arn}"
desired_count = 1
iam_role = "${aws_iam_role.ecs_service.name}"
load_balancer {
target_group_arn = "${aws_alb_target_group.https_default.id}"
container_name = "webrequester"
container_port = "${var.webrequester_port}"
}
depends_on = [
"aws_iam_role_policy.ecs_service",
"aws_alb_listener.front_end",
]
}
【问题讨论】:
-
This answer 应该可以帮到你。
标签: amazon-web-services terraform