Dominio delle funzioni Firebase

Come utilizzare un dominio personalizzato per le funzioni Firebase

Pronti, partenza, fuoco!

Ciao, Tom qui a scrivere! Se sei un avido utente di Firebase, sai quanto può essere semplice gestire il tuo backend senza backend. Grazie a Firebase Functions, scrivo semplicemente la mia logica aziendale come una semplice funzione, distribuisco questa stessa funzione tramite la CLI e posso raggiungerla dal cloud ovunque sul pianeta. La configurazione stessa è così semplice che la sola distribuzione richiede solo un paio di minuti al massimo. Ma c'è un caso speciale con le funzioni Firebase che potrebbe richiedere un po' più di lavoro, utilizzando un dominio personalizzato e non quello fornito da Firebase.

La sfida

Se distribuisci semplicemente le funzioni Firebase come descritto, otterrai l'host in un sottodominio di Google, in particolare in

cloudfunctions.net

Per casi d'uso semplici, questo è principalmente ciò di cui hai bisogno: basta distribuire la cosa e renderla disponibile per il consumo. Ma altri casi d'uso richiedono che il tuo backend sia raggiungibile sotto il tuo dominio. Per questo esempio, userò il mio dominio flaming.codes.

Il set up

Ecco i prerequisiti, giusto per essere sicuri:

  • hai configurato un progetto Firebase
  • sotto Hosting, hai impostato il tuo dominio personalizzato; questo è un processo semplice, in cui devi solo archiviare un record TXT presso il tuo provider di hosting

La configurazione

Per far funzionare effettivamente il tuo dominio personalizzato non solo per la tua app web ospitata ma anche per le tue funzioni, firebase.json deve essere aggiornato (spiegazione dopo l'esempio):

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

L'unico trucco per farlo funzionare è aggiornare la chiave di hosting, non le funzioni, nel tuo firebase.json. Quello che stiamo facendo fondamentalmente è dire a Firebase che dalla nostra app web ospitata, tutte le chiamate a /api/... dovrebbero essere reindirizzate alla funzione chiamata api. La cosa che mi ha richiesto più tempo è stato il secondo elemento, in cui devo dichiarare esplicitamente ogni altro percorso diverso dalle API da gestire come percorso predefinito dell'app Web.

Utilizzando la seguente configurazione, la vecchia funzione cloud

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

quindi diventa

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

Nota che l'ordine è importante qui, le regole di riscrittura vengono elaborate dal primo all'ultimo elemento, quindi in questo caso dall'alto verso il basso, visivamente parlando. L'uso di un carattere jolly per rimappare tutte le tue funzioni non è davvero consigliato per l'uso generale, poiché danneggerebbe la tua app web.

Incartare

E sì, non è davvero una magia, ma può essere di grande aiuto quando si utilizzano le funzioni Firebase in determinati casi d'uso. Abbiamo visto come riscrivere le funzioni cloud come parte del dominio già registrato, eliminando quindi la necessità di un nuovo sottodominio personalizzato, anche se questo è possibile, ma non rientra nell'ambito di questo tutorial.

  • Tom