Dominio de Firebase Functions

Cómo usar un dominio personalizado para Firebase Functions

¡Listo, listo, fuego!

¡Hola, Tom aquí escribiendo! Si eres un ávido usuario de Firebase, sabes lo sencillo que puede ser el manejo de tu backend sin backend. Gracias a Firebase Functions, solo escribo mi lógica empresarial como una función simple, implemento esta misma función a través de la CLI y puedo acceder a ella desde la nube en cualquier parte del planeta. La configuración en sí es tan simple, que la implementación por sí sola solo toma un par de minutos como máximo. Pero hay un caso especial con Firebase Functions que podría necesitar más trabajo: usar un dominio personalizado y no el proporcionado por Firebase.

El reto

Si solo implementa Firebase Functions como se describe, obtendrá el host en un subdominio de Google, específicamente en

cloudfunctions.net

Para casos de uso simples, esto es principalmente lo que necesita: simplemente implemente la cosa y hágala disponible para consumir. Pero otros casos de uso requieren que su backend sea accesible bajo su dominio. Para este ejemplo, usaré mi propio dominio flaming.codes.

La puesta en marcha

Estos son los requisitos previos, solo para asegurarse:

  • has configurado un proyecto de Firebase
  • en Hosting, ha configurado su dominio personalizado; este es un proceso sencillo, en el que solo tiene que almacenar un registro TXT en su proveedor de alojamiento

La configuración

Para que su dominio personalizado no solo funcione para su aplicación web alojada, sino también para sus funciones, firebase.json debe actualizarse (explicación después del ejemplo):

{
  "functions": {
    ...
  },
  "hosting": {
    ...,
    "rewrites": [
      {
        "source": "/api/**",
        "function": "api"
      },
      {
        "source": "!/api/**",
        "destination": "/index.html"
      }
    ]
  },
  ...
}

El único truco para que funcione es actualizar la clave de alojamiento, no las funciones, en su firebase.json. Básicamente, lo que estamos haciendo es decirle a Firebase que desde nuestra aplicación web alojada, todas las llamadas a / api / ... deben redirigirse a la función llamada api. Lo que me llevó más tiempo fue el segundo elemento, donde explícitamente tengo que declarar cualquier otra ruta que no sea api para que se maneje como una ruta de aplicación web predeterminada.

Usando la siguiente configuración, la antigua función de nube

https://uscentral1-flaming-codes.cloudfunctions.net/api

por lo tanto se convierte en

https: //flaming.codes/api / ...

Tenga en cuenta que el orden es importante aquí, las reglas de reescritura se procesan desde el primer hasta el último elemento, por lo que en este caso de arriba a abajo, visualmente hablando. El uso de un comodín para volver a mapear todas sus funciones realmente no se recomienda para el uso general, ya que rompería su aplicación web.

Envolver

Y sí, realmente no es magia, pero puede ser de gran ayuda cuando se usan las funciones de Firebase en ciertos casos de uso. Hemos visto cómo reescribir sus funciones en la nube como parte del dominio ya registrado, eliminando así el requisito de un nuevo subdominio personalizado, aunque eso también es posible, pero está fuera del alcance de este tutorial.

  • Tom