{"record":{"id":"c58fedcfa95b2c6d","repo":"kubernetes/kops","slug":"error-deleting-internetgateway-q-v","errorCode":null,"errorMessage":"error deleting InternetGateway %q: %v","messagePattern":"error deleting InternetGateway %q: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/resources/aws/aws.go","lineNumber":1055,"sourceCode":"\t\t\treturn fmt.Errorf(\"error detaching InternetGateway %q: %v\", id, err)\n\t\t}\n\t}\n\n\t{\n\t\tklog.V(2).Infof(\"Deleting EC2 InternetGateway %q\", id)\n\t\trequest := &ec2.DeleteInternetGatewayInput{\n\t\t\tInternetGatewayId: &id,\n\t\t}\n\t\t_, err := c.EC2().DeleteInternetGateway(ctx, request)\n\t\tif err != nil {\n\t\t\tif IsDependencyViolation(err) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif awsup.AWSErrorCode(err) == \"InvalidInternetGatewayID.NotFound\" {\n\t\t\t\tklog.Infof(\"Internet gateway %q not found; assuming already deleted\", id)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"error deleting InternetGateway %q: %v\", id, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc DumpInternetGateway(op *resources.DumpOperation, r *resources.Resource) error {\n\tdata := make(map[string]interface{})\n\tdata[\"id\"] = r.ID\n\tdata[\"type\"] = r.Type\n\tdata[\"raw\"] = r.Obj\n\top.Dump.Resources = append(op.Dump.Resources, data)\n\treturn nil\n}\n\nfunc ListInternetGateways(cloud fi.Cloud, vpcID, clusterName string) ([]*resources.Resource, error) {\n\tgateways, err := DescribeInternetGateways(cloud)\n\tif err != nil {","sourceCodeStart":1037,"sourceCodeEnd":1073,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/resources/aws/aws.go#L1037-L1073","documentation":"kOps wraps failures from the EC2 DeleteInternetGateway call, the final step after detaching all attachments. NotFound is treated as already-deleted; dependency violations are returned bare for the caller's retry loop; everything else is wrapped with the gateway ID.","triggerScenarios":"EC2 DeleteInternetGateway fails with an error other than InvalidInternetGatewayID.NotFound or a dependency violation: throttling, unauthorized operation, or wrong region/ID.","commonSituations":"Concurrent deletion by another operator or pipeline; IAM policy missing ec2:DeleteInternetGateway; EC2 rate limiting during large-scale teardown; deleting a cluster whose region was changed in config.","solutions":["Confirm the IGW still exists: `aws ec2 describe-internet-gateways --internet-gateway-ids <id>`; if gone, re-run kOps delete and it will skip","If UnauthorizedOperation, add ec2:DeleteInternetGateway to the IAM identity","Wait and retry on throttling errors — kOps delete is idempotent","Ensure the kOps cluster region matches where the IGW actually lives"],"exampleFix":"// before\nreturn fmt.Errorf(\"error deleting InternetGateway %q: %v\", id, err)\n// after (caller)\nif strings.Contains(err.Error(), \"Throttling\") {\n\ttime.Sleep(backoff)\n\treturn retry()\n}","handlingStrategy":"retry","validationCode":"// verify the IGW exists and is detached before deleting\nout, err := c.EC2().DescribeInternetGateways(ctx, &ec2.DescribeInternetGatewaysInput{\n\tInternetGatewayIds: []string{id},\n})\nif err != nil { return err }\nif len(out.InternetGateways) == 0 { return nil }\nif len(out.InternetGateways[0].Attachments) > 0 {\n\treturn fmt.Errorf(\"IGW %s still attached; detach first\", id)\n}","typeGuard":"func deletableIGW(igw *ec2types.InternetGateway) bool {\n\treturn igw != nil && len(igw.Attachments) == 0\n}","tryCatchPattern":"_, err := c.EC2().DeleteInternetGateway(ctx, request)\nif err != nil {\n\tswitch {\n\tcase awsup.AWSErrorCode(err) == \"InvalidInternetGatewayID.NotFound\":\n\t\treturn nil\n\tcase awserrors.IsDependencyViolation(err):\n\t\treturn err // caller retries with backoff\n\tcase strings.Contains(err.Error(), \"Throttling\"):\n\t\treturn retryAfterBackoff()\n\tdefault:\n\t\treturn fmt.Errorf(\"error deleting InternetGateway %q: %v\", id, err)\n\t}\n}","preventionTips":["Run kops delete to completion; re-run after throttling — it is idempotent","Ensure the IAM identity has ec2:DeleteInternetGateway","Keep the cluster region unchanged until deletion completes","Avoid two operators deleting the same cluster simultaneously"],"tags":["aws","ec2","internet-gateway","delete"],"backgroundTag":"aws-api-request-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}