{"record":{"id":"802164c22fe1c4d6","repo":"anomalyco/sst","slug":"cannot-access-nodes-loadbalancer-in-dev-mode-802164","errorCode":null,"errorMessage":"Cannot access `nodes.loadBalancer` in dev mode.","messagePattern":"Cannot access `nodes\\.loadBalancer` in dev mode\\.","errorType":"exception","errorClass":"VisibleError","httpStatus":null,"severity":"error","filePath":"platform/src/components/aws/service.ts","lineNumber":2908,"sourceCode":"       * The Amazon ECS Task Role.\n       */\n      taskRole: this.taskRole,\n      /**\n       * The Amazon ECS Task Definition.\n       */\n      get taskDefinition() {\n        if (self.dev)\n          throw new VisibleError(\n            \"Cannot access `nodes.taskDefinition` in dev mode.\",\n          );\n        return self.taskDefinition!;\n      },\n      /**\n       * The Amazon Elastic Load Balancer.\n       */\n      get loadBalancer() {\n        if (self.dev)\n          throw new VisibleError(\n            \"Cannot access `nodes.loadBalancer` in dev mode.\",\n          );\n        if (!self.loadBalancer)\n          throw new VisibleError(\n            \"Cannot access `nodes.loadBalancer` when no public ports are exposed.\",\n          );\n        return self.loadBalancer;\n      },\n      /**\n       * The Amazon Application Auto Scaling target.\n       */\n      get autoScalingTarget() {\n        if (self.dev)\n          throw new VisibleError(\n            \"Cannot access `nodes.autoScalingTarget` in dev mode.\",\n          );\n        return self.autoScalingTarget!;\n      },","sourceCodeStart":2890,"sourceCodeEnd":2926,"githubUrl":"https://github.com/anomalyco/sst/blob/a0bd20f762883e72a35caccb4896c42ce5b3f707/platform/src/components/aws/service.ts#L2890-L2926","documentation":"`nodes.loadBalancer` returns the Elastic Load Balancer created when the Service exposes public ports. In dev mode the load balancer resource is not created (dev traffic is routed directly to the dev process), so the getter throws this VisibleError before the unrelated no-public-ports check can even run.","triggerScenarios":"Reading `service.nodes.loadBalancer` while `sst dev` is active on a Service component, regardless of whether `loadBalancer`/public ports are configured.","commonSituations":"Adding a listener rule, target group, or custom DNS record that references the service's load balancer; code tested with `sst deploy` then run under `sst dev` for local iteration.","solutions":["Guard the access with `$dev` from `sst/dev` and skip load-balancer wiring in dev mode.","If you actually intended deploy-only work, run `sst deploy` instead of `sst dev`.","Remember dev mode also implies the second check (`no public ports`) never applies; handle both conditions in dev-safe code."],"exampleFix":"// before\nconst lb = service.nodes.loadBalancer;\n\n// after\nimport { $dev } from \"sst/dev\";\nconst lb = $dev ? undefined : service.nodes.loadBalancer;","handlingStrategy":"validation","validationCode":"import { $dev } from \"sst/dev\";\nif (!$dev) {\n  const lb = service.nodes.loadBalancer; // also requires public ports configured\n}","typeGuard":"import { $dev } from \"sst/dev\";\nconst hasLoadBalancer = (): boolean => !$dev;","tryCatchPattern":"try {\n  const lb = service.nodes.loadBalancer;\n} catch (e) {\n  if (String(e).includes(\"nodes.loadBalancer\")) {\n    // fallback: no ALB in dev / no public ports\n  } else throw e;\n}","preventionTips":["Only reference `nodes.loadBalancer` when the Service config sets a load balancer with public ports.","Branch on `$dev` before accessing ALB-related nodes.","Keep load-balancer wiring in deploy-only code paths."],"tags":["dev-mode","load-balancer","nodes","sst"],"backgroundTag":"resource-unavailable-in-dev-mode","analyzedSha":"a0bd20f762883e72a35caccb4896c42ce5b3f707","analyzedAt":"2026-08-30T11:26:00.383Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}