You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform创建配置DNS SRV记录的ECS服务报错问题咨询

问题背景

需要为AWS ECS中每个运行的容器/任务创建DNS条目,经评估SRV记录可满足该需求。使用Terraform 1.2.4版本搭配hashicorp/aws v4.22.0提供商操作时出现如下报错:

│ Error: failed creating ECS service (ecs-service-xxx): InvalidParameterException: When specifying a value for serviceRegistries that is configured to use a type 'SRV' DNS record, you must also enter a value for either 'port' or the 'containerName' and 'containerPort' combination, but not both. Registry: arn:aws:servicediscovery:us-west-1:nnnnnnnnn:service/srv-xxxxxxxxxxx

当前使用的服务发现资源配置如下:

resource "aws_service_discovery_service" "service-discovery-service" {
  name = "service-discovery-service-${var.environmentName}"

  dns_config {
    namespace_id = aws_service_discovery_private_dns_namespace.service-discovery-private-dns-namespace.id

    dns_records {
      ttl  = 10
      type = "SRV"
    }

    routing_policy = "MULTIVALUE"
  }

  health_check_custom_config {
    failure_threshold = 1
  }
}

尝试在dns_records块中添加containerName和containerPort字段时,发现该位置不支持这两个参数,无法完成配置。

解决方案

报错核心原因是参数配置位置错误:SRV记录要求的端口相关参数不属于aws_service_discovery_service资源的配置项,需要配置在关联该服务发现实例的aws_ecs_service资源的service_registries块中。

配置时需要遵守以下规则:

  • 参数二选一:要么仅配置port字段,要么同时配置container_name和container_port字段,两类参数不能同时填写,否则会触发参数校验错误。
  • 如果ECS任务定义中仅包含单容器、且容器只映射了一个端口,直接使用port指定端口值即可,配置更简便。
  • 如果任务包含多个容器、或单个容器映射了多个端口,需要通过container_name和container_port明确指定要注册到SRV记录的容器与对应端口。

正确的ECS服务配置示例如下:

resource "aws_ecs_service" "ecs-service-xxx" {
  name            = "ecs-service-xxx"
  cluster         = aws_ecs_cluster.main.id
  task_definition = aws_ecs_task_definition.app.arn
  desired_count   = 2

  service_registries {
    registry_arn = aws_service_discovery_service.service-discovery-service.arn
    
    # 配置方式1:直接指定端口,适用于单容器单端口场景
    port = 8080

    # 配置方式2:指定容器名+容器端口,适用于多容器/多端口场景,和上面的port二选一即可,不要同时配置
    # container_name = "your-app-container"
    # container_port = 8080
  }

  # 其余ECS服务配置(如网络配置、部署策略、容量提供者等)根据实际业务场景补充
}

原有aws_service_discovery_service资源的配置没有问题,不需要修改,在ECS服务资源中补充上述参数后即可解决报错。

内容的提问来源于stack exchange,提问作者user19512567

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:09:21