I have some issues with Netlify Functions where I have a Express App that serves a few endpoints.
Those endpoints works perfectly fine locally and with ‘netlify dev’.
I have connected the Express App and endpoints with my AWS RDS Aurora Database and locally it works fine. But as soon as I deploy the app to Netlify the endpoint doesn’t work anymore.
Correct, but where do I change this to get the connection to work for my Database?
Maybe I got this all wrong (Probably), but is what I am trying to achieve here not possible with Netlify? I try to achieve the following:
REST Api located on Netlify (Using Netlify Functions) which handles all my Express endpoints with Serverless functions. This REST Api has the connection to my Database.
These endpoints should be accessable from my other App located somewhere else, that sends CRUD requests to my Netlify REST Api ?
If this is not possible with Netlify then that’s probably just the issue.
From what I’ve understood, it seems like it’s possible. I currently have a setup in which I’m using FaunaDB to store the data. From my client-side JS, I send a request to my Netlify Function, which fetches the data from my database and returns it to the client-side JS. Is this something you’re trying to do as well?
About this, I’m not sure as I don’t know how AWS RDS DB works. Every service has a different way to setup. For example, FaunaDB only needs a API token, FirebaseDB needs a few options and so on. So, I think the answer to your question might exist in AWS docs. Maybe you need to configure the URL in Environment Variable, or maybe in your serverless function itself, I have no idea. I’ll make sure to update the thread if I find the answer.
This is exactly what I am looking for. I am just trying to get this to work with RDS.
I am currently looking at AWS RDS docs and Netlify Functions to try and spot the error. Do you know if this could be something about my environment variables?
My current DB connection is setup in .env and required on server.js to make the DB Connection. But does the .env get accessable on the Netlify Functions build?
Having .env file is less secure as you’re just exposing your secret in your repo. You should consider keeping it in .gitignore. Instead, you can add Environment Variables to Netlify UI: Build environment variables | Netlify Docs
The connection with the database works perfectly fine locally and with MySQL Workbench.
There isn’t anything that indicates that my connection to the database shouldn’t work (Atleast what I can see).
It seems I was wrong (Was most likely anyway).
Netlify is looking for the .env file in my repo and since (For obvious reasons) my .env is not public available.
Therefore MySQL connection returns undefined in all my process.env variables which my default will be localhost. That’s why it’s trying to connect to a local database and not my RDS.
Solution
Store your API_KEY in the Netlify build environment variables and build the .env using a script prior to running the build command.
scripts/create-env.js
// Using this to create env file based on Netlify UI Environments
const fs = require('fs')
fs.writeFileSync('./.env', `
DB_HOST=${process.env.DB_HOST}\n
DB_USER=${process.env.DB_USER}\n
DB_PASSWORD=${process.env.DB_PASSWORD}\n
DB_NAME=${process.env.DB_NAME}\n
`)