kubernetes/kops · error

error deleting ELB TargetGroup %q: %w

Error message

error deleting ELB TargetGroup %q: %w

What it means

This wraps any error from the ELBV2 DeleteTargetGroup API during target group deletion (cluster teardown or task deprecation). Common AWS-side causes: target group still referenced by a listener/load balancer, invalid ARN, or throttling.

Source

Thrown at upup/pkg/fi/cloudup/awstasks/targetgroup.go:551

	return d
}

var _ fi.CloudupDeletion = (*deleteTargetGroup)(nil)

func (d *deleteTargetGroup) Delete(t fi.CloudupTarget) error {
	ctx := context.TODO()

	awsTarget, ok := t.(*awsup.AWSAPITarget)
	if !ok {
		return fmt.Errorf("unexpected target type for deletion: %T", t)
	}

	arn := d.obj.ARN
	klog.V(2).Infof("deleting target group %q", arn)
	if _, err := awsTarget.Cloud.ELBV2().DeleteTargetGroup(ctx, &elbv2.DeleteTargetGroupInput{
		TargetGroupArn: &arn,
	}); err != nil {
		return fmt.Errorf("error deleting ELB TargetGroup %q: %w", arn, err)
	}

	return nil
}

// String returns a string representation of the task
func (d *deleteTargetGroup) String() string {
	return d.TaskName() + "-" + d.Item()
}

func (d *deleteTargetGroup) TaskName() string {
	return "target-group"
}

func (d *deleteTargetGroup) Item() string {
	return d.obj.ARN
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check the wrapped AWS error code; ResourceInUse means delete the NLB/listeners first, then re-run deletion
  2. If the group was already deleted (InvalidNotFound), the error is benign — re-running the delete converges
  3. Verify IAM elasticloadbalancing:DeleteTargetGroup permission
  4. Retry after throttling or transient 5xx
Defensive patterns

Strategy: retry

Validate before calling

// before delete, check for listeners referencing the group
lgs, _ := elbv2.DescribeListeners(&elbv2.DescribeListenersInput{LoadBalancerArn: &nlbArn})
for _, l := range lgs.Listeners {
  if l.TargetGroupArn != nil && *l.TargetGroupArn == arn { return errors.New("listener still references target group; delete listener first") }
}

Try / catch

if _, err := elbv2.DeleteTargetGroup(ctx, in); err != nil {
  var nf *types.TargetGroupNotFound
  if errors.As(err, &nf) { return nil } // already gone: treat as success
  return fmt.Errorf("error deleting ELB TargetGroup %q: %w", arn, err)
}

Prevention

When it happens

Trigger: `kops delete cluster` or apply removing a TargetGroup; DeleteTargetGroup fails because the group is in use by an active listener, the ARN is stale (already deleted), IAM lacks elasticloadbalancing:DeleteTargetGroup, or throttling.

Common situations: Deletion order races where the NLB/listener still references the group; orphaned target groups with stale ARNs from a previous failed apply; IAM policy restrictions; ResourceInUse errors during teardown.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/c05e9052182d12c1. Report an issue: GitHub.