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
相关产品推荐
相关产品推荐

