![](/img/trans.png)
[英]How is an ECS service in Terraform connected to an AWS autoscaling group
[英]Cannot create an ECS Service using Terraform on AWS
我正在尝试使用 Terraform 创建 ECS 服务。我定义了一些模块来创建一些必要的资源(如 alb、vpc、su.net 等)。 所有这些都已成功创建,但未创建aws_ecs_service
。
这是我正在使用的 Terraform 代码:
terraform {
required_version = ">= 0.13"
}
resource "aws_ecs_task_definition" "main" {
family = "task-definition"
execution_role_arn = aws_iam_role.ecs_task_execution_role.arn
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = var.fargate_cpu
memory = var.fargate_memory
container_definitions = jsonencode([
{
name = "container-definition"
image = var.container_image
cpu = var.fargate_cpu
memory = var.fargate_memory
command = ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
port_mappings = [
{
container_port = var.app_port
host_port = var.app_port
}
]
logConfiguration = {
logDriver = "awslogs"
options = {
awslogs-group = "/ecs/task-definition"
awslogs-region = var.aws_region
awslogs-stream-prefix = "ecs"
}
}
}
])
}
module "load_balancer" {
source = "../alb"
vpc_id = var.vpc_id
app_port = var.app_port
public_subnets_ids = var.public_subnets_ids
health_check_path = "/"
}
resource "aws_ecs_service" "main" {
name = "testing-service"
cluster = var.ecs_cluster_id
task_definition = aws_ecs_task_definition.main.arn
desired_count = 1
launch_type = "FARGATE"
network_configuration {
security_groups = [module.load_balancer.sg_id]
subnets = var.private_subnet_ids
assign_public_ip = true
}
load_balancer {
target_group_arn = module.load_balancer.alb_tg_arn
container_name = "container-definition"
container_port = var.app_port
}
depends_on = [
module.load_balancer
]
}
我完全知道代码片段不足以重现问题,但我无法制作一个更小的示例来重现问题。 如果您需要文件的 rest,我可以使用代码的 rest 创建一个公共存储库或类似的东西。
我得到的错误是:
╷
│ Error: error creating testing-service service: error waiting for ECS service (testing-service) creation: InvalidParameterException: The container container-definition did not have a container port 8000 defined.
│
│ with module.service.aws_ecs_service.main,
│ on service/main.tf line 47, in resource "aws_ecs_service" "main":
│ 47: resource "aws_ecs_service" "main"
查看生成的资源,我发现端口映射尚未生成: 即使我在 terraform 代码中指定了它:
这是该代码创建的任务定义的屏幕截图。
您的容器定义中有错字。 而不是这个:
port_mappings = [
{
container_port = var.app_port
host_port = var.app_port
}
]
你应该有:
portMappings = [
{
containerPort = var.app_port
hostPort = var.app_port
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.