Environment variables inconsistency

I have Next.js website endpoints:

  1. Next.js API page routes https://jss-nextjs-hosting.netlify.app
  2. Netlify functions

Both endpoints do the same: output the environment variables.
Netlify function:

export default async (req: Request, context: Context) => {
  return new Response(JSON.stringify(process.env));
};

output:

{
  "AWS_LAMBDA_FUNCTION_VERSION": "$LATEST",
  "AWS_SESSION_TOKEN": "IQoJb3JpZ2luX2VjEIv//////////wEaCXVzLWVhc3QtMiJGMEQCIES3WIYEMe13rFlyF22F335IORnpiVbC55wyRyjwoMs9AiBMSBkEiPu9WH7AAacYmDrjo+W+vv/xFjnRoy/qKThzwyrVAwh0EAEaDDk0ODI3MzI3NjU3MSIMVRSW8E3AWh2WQ3KOKrIDQUHu5I3Saxx+X8KBzY9VrjWwo5K63XEPOar6SmMxXAYPJM0hcFJttkHcL/qyVGnvzMjFZwmBHgML4UWsqOCzkaBRY5ISf4HmXi9bqDgpGBGlzrAhGsT3BeOAFcWjYH5P/JqErG0vU/1bb/Hd2e4hKGcy0qxDG8GZxd/fZXyb6l4dFoeAoBH1snr+Zg6luvRmIH13JuEeNtN7hx9UF/fQlHSe01xsOIwVQHx8t4zo+zoIolyJt+CdKNJrSxFKzqyEW5TsJUmR2nutXiCFm4A5rxrQB1dcyPI698IccA5caGIph6oujHvoaXe7rCzIunYjEuMIPqvSFgRHT4MCqUS2XAbLpnVZnEptTGKiVf9VVYrLyxzyzzdMx8JaKIgR77dFVKvLuAlya3qcxibupQATt3GsLn/qPgKE5a4Zy3LsRuUq8xydtx6mHKBNsRDGl4lFv6PgYrJVcqHwtwD3uqN/oQIroeQrAqi4fock7J5ztv3WerquAIZ4mS8MNcVNzpOwYk9EELkegKAINZPHf7AgMqmv8kTrXHNRVGRK2GREkHWfGqql/9wPD3hVQ72XPasDo94wgPvhrgY6nwEkBIDy7XWXvL+RQN9jlRpmeCJhu4kwo8EIKmYFcO0pCBUMpOLsiU5W3ltJJd7H/tq1k9JWzNB/Gczpycd5sX2CD8acRW8lskPJdtEIBW1B5IvEOfvALWgWOTQiF5bUIBzb2CKe6N7W0fr3gKToQfrKpgIpabN68Gd1GhI0dD79QSl+d3O2I7GqWVMA79nYC/CMpTkW7rg75betNmnH338=",
  "AWS_LAMBDA_LOG_GROUP_NAME": "/aws/lambda/c82a1d63a8b72038b757347b770eb79abaaa8c1ae4ad581a947d424bd2f42d75",
  "LAMBDA_TASK_ROOT": "/var/task",
  "LD_LIBRARY_PATH": "/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib",
  "AWS_LAMBDA_LOG_STREAM_NAME": "2024/02/23/[$LATEST]2052a46f44c044ed80f98e83be5f31ee",
  "AWS_LAMBDA_RUNTIME_API": "127.0.0.1:9001",
  "AWS_EXECUTION_ENV": "AWS_Lambda_nodejs18.x",
  "SITE_ID": "19c948ef-1830-429c-95af-0fde50f897dc",
  "AWS_LAMBDA_FUNCTION_NAME": "c82a1d63a8b72038b757347b770eb79abaaa8c1ae4ad581a947d424bd2f42d75",
  "AWS_XRAY_DAEMON_ADDRESS": "169.254.79.129:2000",
  "PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin",
  "AWS_DEFAULT_REGION": "us-east-2",
  "PWD": "/var/task",
  "AWS_SECRET_ACCESS_KEY": "j2CiTPnvonIaO7056syIT+n/V9JKFKO+YGDSaCA0",
  "LAMBDA_RUNTIME_DIR": "/var/runtime",
  "LANG": "en_US.UTF-8",
  "AWS_LAMBDA_INITIALIZATION_TYPE": "on-demand",
  "NODE_PATH": "/opt/nodejs/node18/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules:/var/runtime:/var/task",
  "TZ": ":UTC",
  "AWS_REGION": "us-east-2",
  "URL": "https://jss-nextjs-hosting.netlify.app",
  "AWS_ACCESS_KEY_ID": "ASIA5ZSL542N26QLV3MM",
  "SHLVL": "0",
  "_AWS_XRAY_DAEMON_ADDRESS": "169.254.79.129",
  "_AWS_XRAY_DAEMON_PORT": "2000",
  "AWS_XRAY_CONTEXT_MISSING": "LOG_ERROR",
  "_HANDLER": "___netlify-entry-point.handler",
  "AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "1024",
  "SITE_NAME": "jss-nextjs-hosting",
  "NODE_EXTRA_CA_CERTS": "/var/runtime/ca-cert.pem",
  "_X_AMZN_TRACE_ID": "Root=1-65d87d80-10325cbf0499d0ed1a54bc28;Parent=19c8c2e2407fd019;Sampled=0;Lineage=bf1de936:0",
  "NETLIFY_BLOBS_CONTEXT": "...",
  "NETLIFY_PURGE_API_TOKEN": "...."
}

Next.js API page route:

export default function handler(req, res) {

  res
    .status(200)
    .json({
      env: JSON.stringify(process.env),
    });
}

output:

{
  "AWS_LAMBDA_FUNCTION_VERSION": "$LATEST",
  "AWS_SESSION_TOKEN": "IQoJb3JpZ2luX2VjEHoaCXVzLWVhc3QtMiJIMEYCIQCJtxGebUFIZgRRVXR5eAwpAcpMAI1cSZzkLB/GRpHndgIhAN9J1x2QSbt6EMFdLmN9ZjidkAiv8OGtE0Ez8gaZoYNDKtUDCGMQAhoMMzg1MjE2ODIyMzkzIgzpo1l60TalP0EpzlYqsgNKxST0A0yVFrhzcXCKi+e8wuG4Ns4Bt96ODWhxeqhVQh53s12/Onup01Ly/yGR/vPPEv6bSHf73MRJepCVm/+2AmIo0s55UtD+k3YF6eG71e9bnB3laP6nOKgakJceanJUqAjxlYtvPxgvGn/2vxs+ijHC5Bo6qs1vr/5mVLcG6jiEMlZIEGQcuUJprpFI6CynLgd3hm+Q7DPKH8ylGMeYienDRvFtlFhMqq0UO74L4Vo6CbcWnjncVOJF59hmIlVZJ1j/LGfxDUHeonqyCNPglW554gPzfLkBpTDbOqCkHHUhriMzvh5FZA6S7F+19YD0xnno9IlUUck+vNudhQ/J+ZxzQvA3Cmsvs5fEYrTNq0gUXbzXXbklbrgZVPQNLHTdoPqZmER1VkZF8ko95V7rx211Agmkv+HrkmAd4Hwu3fLXxUEkaAVE7D2bc4pzHLMNy0L/oggj8TGLY85Gc1qZVoper0tG7lxivyIKrZixHO6mICtbxRpRK6iFA6/swvPa2w+Py1nJ4d3dE+sUVD6T0yfzYVSWJJ+bqaQHvQwI4pJDmumaJVnCjrjJJ/bj8imawzCTmd6uBjqdAcIy2xOZDrfQ205jUiWYrIxOWmP7PeJzaeK+ZR1i1B5y0PQJ6rO7bcAgTWC6m/RiKlym7cdOir2q86x311akYZZRbFeOjZknsIIdqXLJdtVaGhDDORXDUJ9ANnDXQNexJ+XYgQTw1186oVPWWHms5nmLXqfeJ7XfAnH9V9GT+8KEMu98DIN6sw3kZhmSVTHYYnSnlUMW1gTo8rMAC+c=",
  "LD_LIBRARY_PATH": "/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib",
  "LAMBDA_TASK_ROOT": "/var/task",
  "AWS_LAMBDA_LOG_GROUP_NAME": "/aws/lambda/d8b33cea294a7d99410f6782b13a8148dcc31166c053ccc8d289564ad8e9bc2b",
  "AWS_LAMBDA_LOG_STREAM_NAME": "2024/02/22/[$LATEST]d1a7fd63a236444c83d8cc9ed106062e",
  "AWS_LAMBDA_RUNTIME_API": "127.0.0.1:9001",
  "AWS_EXECUTION_ENV": "AWS_Lambda_nodejs18.x",
  "SITE_ID": "19c948ef-1830-429c-95af-0fde50f897dc",
  "AWS_LAMBDA_FUNCTION_NAME": "d8b33cea294a7d99410f6782b13a8148dcc31166c053ccc8d289564ad8e9bc2b",
  "AWS_XRAY_DAEMON_ADDRESS": "169.254.79.129:2000",
  "PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin",
  "AWS_DEFAULT_REGION": "us-east-2",
  "PWD": "/var/task",
  "AWS_SECRET_ACCESS_KEY": "Lrl9onnQsEw23uiottrTmf9V/AyDT5KqcTEV57vH",
  "LANG": "en_US.UTF-8",
  "LAMBDA_RUNTIME_DIR": "/var/runtime",
  "AWS_LAMBDA_INITIALIZATION_TYPE": "on-demand",
  "NODE_PATH": "/opt/nodejs/node18/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules:/var/runtime:/var/task",
  "TZ": ":UTC",
  "AWS_REGION": "us-east-2",
  "URL": "https://jss-nextjs-hosting.netlify.app",
  "AWS_ACCESS_KEY_ID": "ASIAVTMFWHR4Y3B6VRLM",
  "SHLVL": "0",
  "_AWS_XRAY_DAEMON_ADDRESS": "169.254.79.129",
  "_AWS_XRAY_DAEMON_PORT": "2000",
  "AWS_XRAY_CONTEXT_MISSING": "LOG_ERROR",
  "_HANDLER": "___netlify-handler.handler",
  "AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "1024",
  "SITE_NAME": "jss-nextjs-hosting",
  "NODE_EXTRA_CA_CERTS": "/var/runtime/ca-cert.pem",
  "NODE_ENV": "production",
  "PUBLIC_URL": "https://jss-nextjs-hosting.netlify.app",
  "_X_AMZN_TRACE_ID": "Root=1-65d78c93-5c5400673898ab526c80658c;Parent=017ac75363729ae4;Sampled=0;Lineage=dd45a4d6:0",
  "__NEXT_PROCESSED_ENV": "true",
  "JSS_EDITING_SECRET": "...",
  "SITECORE_API_KEY": "",
  "SITECORE_API_HOST": "",
  "GRAPH_QL_ENDPOINT": "",
  "DEFAULT_LANGUAGE": "",
  "FETCH_WITH": "GraphQL",
  "DISABLE_SSG_FETCH": "",
  "__NEXT_OPTIMIZE_FONTS": "true",
  "__NEXT_PRIVATE_PREBUNDLED_REACT": ""
}

I expect that I should be able to use the same env variables in both cases. But this list is different.
e.g. I need access to blobs in Next.js API route, but NETLIFY_BLOBS_CONTEXT is absent there.
Or do I want to access SITECORE_API_HOST inside the Netlify function? I can’t, it is absent there.

Is it documented somewhere, what will be the difference in the variables depending on where you use them?

Are Next.js API routes transformed to Netlify functions?
If yes, why do they have different environment variables list?

I’m able to see the Sitecore environment variables on your Netlify Function endpoint. Has something changed?

As for missing blobs stuff in Next.js API routes, that’s expected with Next Runtime v4 as that uses Netlify Functions v1. Blobs are only available directly in Functions v2 and need extra config in v1.

I deployed using CLI, and nothing changed.

As far as I understand my Sitecore environment variables were not present because they are in the .env file and they are not available to "Available to Functions, Edge Functions, and On-demand Builders " according to Environment variables overview | Netlify Docs.
But if they are not available to Netlify Functions, they should not be available to Next Runtime as well? Because it is based on Netlify functions.

About Netlify Functions v1 and Blobs:
Can you point me out, what config I need?

The Next.js Runtime copies your .env file to the Next.js-generated functions so that’s why they work in Next.js API routes.

Functions v1 + Blobs is here: netlify/blobs: A TypeScript client for Netlify Blobs (github.com)

export const handler = async (event) => {
  connectLambda(event)

That is an example of Netlify functions.
I have Next.js API Route that is converted to Netlify Function V1 using Netlify Next.js Plugin.
(I don’t have direct access to Funtion V1 code)

I have a different interface

export default function handler(
  req: NextApiRequest,
  res: NextApiResponse<ResponseData>
)
...

for Next.js API Route. Where can I take an event in this context to use it in connectLambda?

Right, forgot that Next.js code would have that stipped out. In that case, you’'d have to stick to API access: blobs/README.md at main · netlify/blobs (github.com).