Implementa varios entornos a partir de una base de código

Es común tener varios entornos implementados desde la misma base de código, cada uno con una configuración ligeramente diferente. Por ejemplo, es posible que desees asignar menos CPU y RAM a tu entorno de etapa de pruebas, o bien asegurarte de que tu entorno de producción mantenga al menos 1 instancia activa y lista para atender solicitudes. También es posible que desees especificar diferentes variables de entorno y secretos según el entorno y los recursos que desees usar.

En esta guía, se describe cómo implementar un entorno de producción y un entorno de etapa de pruebas, cada uno en un proyecto de Firebase independiente. Siguiendo los mismos principios, puedes realizar implementaciones en otros tipos de entornos. Para obtener más información sobre los entornos, consulta la Descripción general de los entornos y las Prácticas recomendadas generales para configurar proyectos de Firebase.

Requisitos previos

  • El código de tu aplicación ya está almacenado en GitHub.
  • Ya creaste un proyecto distinto para cada uno de tus entornos, por ejemplo, my-production-firebase-project y my-staging-firebase-project. Asegúrate de etiquetar tu proyecto de Firebase de producción con el tipo de entorno"producción".
  • En cada proyecto, creaste un backend de App Hosting, con la rama activa establecida en la rama de GitHub que deseas implementar (como main). Consulta Comienza a usar App Hosting para obtener más información.

Paso 0: Crea una configuración predeterminada en apphosting.yaml

App Hosting admite un archivo de configuración llamado apphosting.yaml para administrar la configuración del tiempo de ejecución (CPU, simultaneidad, límites de memoria, etcétera) y las variables de entorno de tu app. También admite referencias a secretos administrados con Cloud Secret Manager, lo que hace que sea seguro registrarlo en el control de código fuente. Para obtener más información, consulta Configura un backend.

Para comenzar, crea un archivo apphosting.yaml en el directorio raíz de la app. Este es el archivo de configuración de respaldo que se usa cuando no se encuentra un archivo de configuración específico del entorno. Los valores almacenados en apphosting.yaml deben ser valores predeterminados que se puedan usar de forma segura en todos los entornos.

En las siguientes secciones, se explica cómo anular los valores predeterminados en apphosting.yaml para entornos específicos. Este flujo de ejemplo crea un entorno de etapa de pruebas.

Paso 1: Establece el nombre del entorno

Cada backend de App Hosting tiene un parámetro de configuración de Nombre del entorno. Este campo se usa para asignar tu backend a un archivo de configuración específico del entorno y se puede cambiar en cualquier momento. Solo puedes establecer un nombre de entorno por backend.

Para establecer el nombre del entorno de tu backend, haz lo siguiente:

  1. En Firebase console, selecciona tu proyecto de etapa de pruebas (en este ejemplo, my-staging-firebase-project).
  2. Selecciona App Hosting en la barra de navegación izquierda.
  3. Haz clic en Ver panel en el backend que elegiste.
  4. En la pestaña Configuración, selecciona Entorno.
  5. En Nombre del entorno, ingresa el nombre de tu entorno. Puedes nombrar el entorno como desees. En este ejemplo, es staging.
  6. Haz clic en Guardar.

Cuando se activa una implementación de App Hosting para tu backend (ya sea con git push o manualmente a través de la consola), App Hosting buscará un archivo apphosting.ENVIRONMENT_NAME.yaml antes de recurrir a apphosting.yaml.

Paso 2: Crea tu archivo apphosting.yaml específico del entorno

Para la configuración específica de tu entorno, crea un archivo con el nombre apphosting.ENVIRONMENT_NAME.yaml para especificar anulaciones específicas del entorno. Este archivo tiene el mismo formato que el archivo apphosting.yaml predeterminado y debe ubicarse en el directorio raíz de tu app junto con apphosting.yaml.

En el momento de la compilación, App Hosting combina estos dos archivos, y se da prioridad a los valores del archivo YAML específico del entorno por sobre el archivo apphosting.yaml base.

En este ejemplo, crearás un archivo llamado apphosting.staging.yaml en el directorio raíz de la app:


runConfig:
  cpu: 1
  memoryMiB: 512
  concurrency: 5

env:
-   variable: API_URL
    value: api.staging.service.com
    availability:
      -   BUILD

-   variable: DATABASE_URL
    secret: secretStagingDatabaseURL

Supongamos que ya tenías un elemento apphosting.yaml que se veía así:

runConfig:
  cpu: 3
  memoryMiB: 1024
  maxInstances: 4
  minInstances: 0
  concurrency: 100

env:
-   variable: API_URL
    value: api.service.com
    availability:
      -   BUILD
      -   RUNTIME

-   variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    availability:
      -   RUNTIME

-   variable: API_KEY
    secret: secretIDforAPI

El resultado final combinado, que puedes inspeccionar en tus registros de Cloud Build, se vería de la siguiente manera:

runConfig:
  cpu: 1
  memoryMiB: 512
  maxInstances: 4
  minInstances: 0
  concurrency: 5

env:
-   variable: API_URL
    value: api.staging.service.com
    availability:
      -   BUILD

-   variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    availability:
      -   RUNTIME

-   variable: API_KEY
    secret: secretIDforAPI

-   variable: DATABASE_URL
    secret: secretStagingDatabaseURL

Ten en cuenta que ciertos valores de runConfig, como la CPU, también se sobrescribieron, al igual que cualquier variable de entorno superpuesta.

Paso 3: Implementa tu base de código

Cuando termines de editar tu archivo apphosting.ENVIRONMENT_NAME.yaml específico del entorno, envíalo a GitHub:

$ git add apphosting.<ENVIRONMENT_NAME>.yaml
$ git commit -m "Added environment specific yaml file"
$ git push

Cualquier backend etiquetado con este nombre de entorno usará los valores de anulación específicos que hayas especificado en su archivo YAML correspondiente y recurrirá a apphosting.yaml cuando no se encuentre un valor. En el caso de los backends sin un nombre de entorno asociado, puedes seguir usando apphosting.yaml.

Próximos pasos