繁体   English   中英

无法在 AWS 上使用 Terraform 创建 ECS 服务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM