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

Terraform执行plan时ALB ARN无效错误排查求助

问题:Terraform Plan时ALB ARN验证错误

环境信息

  • Terraform AWS Provider版本:v3.75.2
  • 参考课程使用版本:v3.62
  • 前置操作:terraform validate执行正常,terraform plan抛出错误

错误详情

Error: error retrieving ALB (arn:aws:elasticloadbalancing:us-east-1:927589092144:loadbalancer/app/globo-web-alb/e138ebc8e894ac7b): ValidationError: 'arn:aws:elasticloadbalancing:us-east-1:927589092144:loadbalancer/app/globo-web-alb/e138ebc8e894ac7b' is not a valid load balancer ARN
│       status code: 400, request id: cb42dcc0-a0a6-42bf-8206-670162edf3ce
│
│   with aws_lb.nginx,
│   on loadbalancer.tf line 5, in resource "aws_lb" "nginx":
│    5: resource "aws_lb" "nginx" {

负载均衡器配置文件(loadbalancer.tf)

## aws_elb_service_account
data "aws_elb_service_account" "root" {}

## aws_lb
resource "aws_lb" "nginx" {
  name               = "globo-web-alb"
  internal           = false
  load_balancer_type = "application"
  security_groups    = [aws_security_group.alb_sg.id]
  subnets            = [aws_subnet.subnet1.id, aws_subnet.subnet2.id]

  enable_deletion_protection = false

  access_logs {
    bucket  = aws_s3_bucket.web_bucket.bucket
    prefix  = "alb-logs"
    enabled = true
  }

  tags = local.common_tags
}

resource "aws_lb_target_group" "nginx" {
  name     = "nginx-alb-tg"
  port     = 80
  protocol = "HTTP"
  vpc_id   = aws_vpc.vpc.id

  tags = local.common_tags
}

resource "aws_lb_listener" "nginx" {
  load_balancer_arn = aws_lb.nginx.arn
  port              = "80"
  protocol          = "HTTP"

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.nginx.arn
  }

  tags = local.common_tags
}

resource "aws_lb_target_group_attachment" "nginx1" {
  target_group_arn = aws_lb_target_group.nginx.arn
  target_id        = aws_instance.nginx1.id
  port             = 80
}

resource "aws_lb_target_group_attachment" "nginx2" {
  target_group_arn = aws_lb_target_group.nginx.arn
  target_id        = aws_instance.nginx2.id
  port             = 80
}

排查与解决步骤

1. 修复状态文件冲突

这个错误大多是本地Terraform状态文件与AWS实际环境不一致导致:

  • 执行terraform state list,确认aws_lb.nginx存在于状态中
  • 执行terraform state rm aws_lb.nginx,移除状态文件中该资源的记录
  • 重新运行terraform plan,Terraform会重新检测AWS环境,自动匹配现有ALB或创建新资源

2. 锁定Provider版本到课程指定的v3.62

新版本Provider可能对ARN校验逻辑有调整,锁定版本可以消除兼容问题:

  • 在versions.tf中添加以下配置:
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "=3.62.0"
    }
  }
}
  • 执行terraform init -upgrade,更新Provider到指定版本后再运行terraform plan

3. 验证AWS权限

确保Terraform使用的AWS账号拥有elasticloadbalancing:DescribeLoadBalancers权限,虽然validate通过,但plan阶段需要调用AWS API读取资源信息,权限不足也可能引发类似错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:15:36