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
- Check the wrapped AWS error code; ResourceInUse means delete the NLB/listeners first, then re-run deletion
- If the group was already deleted (InvalidNotFound), the error is benign — re-running the delete converges
- Verify IAM elasticloadbalancing:DeleteTargetGroup permission
- 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
- Delete NLBs/listeners before target groups
- Treat NotFound on delete as success for idempotent teardown
- Verify IAM delete permissions
- Retry throttled deletions with backoff
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
- error deleting TargetGroup %q: %v
- error deleting V2 LoadBalancer %q: %v
- failed to detach target groups from autoscaling group: %v
- error deleting ELB LoadBalancer %q: %w
- error deleting load balancer listener with arn=%q: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/c05e9052182d12c1.
Report an issue: GitHub.