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

Terraform配置Elastic Beanstalk额外ALB监听器遇端口NaN报错

问题

我正尝试为Elastic Beanstalk环境的ALB(应用负载均衡器)配置额外监听器,按照AWS相关文档添加了配置设置及属性,但执行terraform apply时持续报错:InvalidParameterValue: Invalid Listener Port (NaN): listener_port。

我的配置代码如下:

additional_alb_listener_settings_https = [{ 
 description = "HTTPS Listener for ALB" 
 protocol = "HTTPS" 
 ssl_certificate_arn = "xxxxxxxxx" 
 ssl_policy = "xxxxxxxxx" 
}] 

variable "additional_alb_listener_settings" {
  description = "additional listener settings in addition to default port 80"
  type = list(object({
    description         = string
    protocol            = string
    ssl_certificate_arn = string
    ssl_policy          = string
  }))
  default = []

}

dynamic "setting" {
  for_each = var.additional_alb_listener_settings
  content {
    namespace = "aws:elbv2:listener:listener_port"
    name      = "Protocol"
    value     = setting.value.protocol
  }
}
dynamic "setting" {
  for_each = var.additional_alb_listener_settings
  content {
    namespace = "aws:elbv2:listener:listener_port"
    name      = "SSLCertificateArns"
    value     = setting.value.ssl_certificate_arn
  }
}

dynamic "setting" {
  for_each = var.additional_alb_listener_settings
  content {
    namespace = "aws:elbv2:listener:listener_port"
    name      = "SSLPolicy"
    value     = setting.value.ssl_policy
  }
}

但根据AWS文档中关于aws:elbv2:listener:listener_port的说明,并未要求port属性,我遗漏了什么?

解决方案

问题核心在于命名空间的格式和变量定义的缺失:

  • aws:elbv2:listener:listener_port 里的listener_port是占位符,必须替换为实际要配置的监听器端口号(比如HTTPS常用的443)。你直接使用占位符字符串,导致Terraform无法识别有效端口,因此报错端口为NaN(非数字)。
  • 你的变量定义里缺少port字段,Elastic Beanstalk需要明确知道你要创建哪个端口的监听器,否则无法完成配置。

具体修复步骤:

  1. 修改变量定义,新增port字段:
variable "additional_alb_listener_settings" {
  description = "additional listener settings in addition to default port 80"
  type = list(object({
    port                = number
    description         = string
    protocol            = string
    ssl_certificate_arn = string
    ssl_policy          = string
  }))
  default = []
}
  1. 更新输入变量值,添加目标端口(示例为443):
additional_alb_listener_settings_https = [{ 
 port = 443
 description = "HTTPS Listener for ALB" 
 protocol = "HTTPS" 
 ssl_certificate_arn = "xxxxxxxxx" 
 ssl_policy = "xxxxxxxxx" 
}] 
  1. 修改动态setting块的命名空间,用实际端口替换占位符:
dynamic "setting" {
  for_each = var.additional_alb_listener_settings
  content {
    namespace = "aws:elbv2:listener:${setting.value.port}"
    name      = "Protocol"
    value     = setting.value.protocol
  }
}
dynamic "setting" {
  for_each = var.additional_alb_listener_settings
  content {
    namespace = "aws:elbv2:listener:${setting.value.port}"
    name      = "SSLCertificateArns"
    value     = setting.value.ssl_certificate_arn
  }
}

dynamic "setting" {
  for_each = var.additional_alb_listener_settings
  content {
    namespace = "aws:elbv2:listener:${setting.value.port}"
    name      = "SSLPolicy"
    value     = setting.value.ssl_policy
  }
}

完成以上修改后,Terraform就能正确识别要创建的监听器端口,端口NaN的报错会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:48