Back to Supabase

Edge Function 503 Response

apps/docs/content/troubleshooting/edge-function-503-response.mdx

1.26.048.2 KB
Original Source

A 503 HTTP status code from an Edge Function indicates one of three possible events:

  • the function failed to boot due to SyntaxError
  • your own code returned a 503
  • the platform itself is having issues

These require different fixes, so it is useful to decipher the cause before debugging:

Step 1: Figure out which 503 you have

If you received back a BOOT_ERROR message, like the one below, you can jump to the resolution section: Boot Error

json
{
  "code": "BOOT_ERROR",
  "message": "Function failed to start (please check logs)"
}

Otherwise, run the below query in your Log Explorer.

sql
select
  req.pathname as function_name,
  res.status_code,
  case
    when metadata.execution_id is not null
    and metadata.function_id is not null then 'app_level'
    when metadata.execution_id is null
    and metadata.function_id is not null then 'boot_error'
    when metadata.execution_id is null
    and metadata.function_id is null then 'internal_failure'
  end as error_type
from
  function_edge_logs
  cross join UNNEST(metadata) as metadata
  cross join UNNEST(metadata.request) as req
  cross join UNNEST(metadata.response) as res
where status_code = 503
limit 50;

Depending on the output, you can use this table to find the appropriate debugging section:

ValueGo to
app_levelapp level error
boot_errorboot error - function cannot compile
internal_failureplatform issue

Step 2: Addressing the error

App level error

Somewhere in your function logic, you are returning a 503 response yourself:

Example:

js
return new Response(JSON.stringify(data), {
  headers: { ...corsHeaders, 'Content-Type': 'application/json' },
  status: 503, // <-- you set this
})

Check your function logic and any third-party API responses for where the 503 is originating.

  1. Search your function code for 503. Look for explicit status codes on Response objects
  2. Trace the condition that triggered it. If your function calls external APIs, it may be passing along errors returned by those services
  3. Add logging before the return so future occurrences leave a trace:
js
console.error('Returning 503 - reason:', reason)

See: Error handling in Edge Functions

Boot error

A SyntaxError prevented your code from dynamically compiling.

In the Function Dashboard, under the affected function's Log tab, you can filter for the key phrase worker boot error:. the log will tell you syntax error occurred:

Alternatively, instead of using the Function Dashboard, you can programmatically find boot failure error messages in the Log Explorer with the below query:

sql
select
  fl.event_message,
  content.timestamp,
  fel.function_name,
  fel.status_code
from
  function_logs as fl
  left join UNNEST(fl.metadata) as content on true
  left join (
    select
      em.function_id,
      em.version,
      req.pathname as function_name,
      res.status_code
    from
      function_edge_logs
      left join UNNEST(metadata) as em on true
      left join UNNEST(em.request) as req on true
      left join UNNEST(em.response) as res on true
  ) as fel
    on content.function_id = fel.function_id and content.version = fel.version
where content.event_type = 'BootFailure'
order by timestamp, function_name
limit 20;

Example causes

Redefining constant variables

Redefining a constant value can prevent the code from compiling:

js
let some_var
const some_var // SyntaxError — already declared

The log message for these errors should state the cause already declared and the file impacted.

sh
worker boot error: Uncaught SyntaxError:
Identifier 'some_var' has already been declared at file:///var/tmp/sb-compile-edge-runtime/source/index.ts:6:7

Key word violations

Some key words can only be used in specific contexts. For instance, the await key word can only be used inside async functions.

js
(req: Request) => {
  const { name } = await req.json(); // await only works inside async functions
}

The log message for these errors should state the cause Unexpected reserved word and the file impacted.

sh
worker boot error: Uncaught SyntaxError:
Unexpected reserved word at file:///var/tmp/sb-compile-edge-runtime/source/index.ts:6:28

Bad imports: Non-existent modules or named exports

Imports can cause errors if they're not available within the edge function:

js
// importing non-existent module
import supabase from 'does_not_exist'

// or accessing non-existent export
import { doesNotExist } from 'jsr:@supabase/functions-js'

doesNotExist()

The log message for these errors should state the cause requested module... does not provide an export and the file impacted.

sh
worker boot error: Uncaught SyntaxError:
The requested module 'jsr:@supabase/functions-js' does not provide an export named 'doesNotExist' at file:///var/tmp/sb-compile-edge-runtime/source/index.ts:2:10”

To fix, check the module and its imports to make sure they exist and are supported by Supabase Edge Functions.

If the module worked before, check to see if the most recent release had breaking changes and then only import the working version.

Platform issue

The edge function runtime is overwhelmed, or the API Gateway is returning its own 503 due to excessive load.

Open a support ticket and include the relevant log output from Step 1.

Additional resources

Still stuck?