Conéctate a una base de datos de Firestore

Usa Firestore a fin de configurar una base de datos en la nube NoSQL escalable para tu servicio de Cloud Run. Firestore es una base de datos NoSQL flexible y escalable para el desarrollo móvil, web y de servidores.

Mediante la integración de Cloud Run que se describe en esta página, puedes conectar el servicio de Cloud Run a una base de datos nueva de Firestore con rapidez.

Antes de comenzar

  • Asegúrate de que el servicio de Cloud Run con el que te integras ya esté implementado.
  • Revisa la página de precios de Firestore. Se te facturan los recursos individuales usados en la integración.

Roles obligatorios

Para usar las integraciones de Cloud Run, tú o tu administrador deben otorgar roles de IAM en dos principales diferentes.

Haz clic para ver los roles necesarios para tu Cuenta de Google

Para obtener los permisos que necesitas para usar las integraciones de Cloud Run, pídele a tu administrador que otorgue a tu Cuenta de Google los siguientes roles de IAM en tu proyecto:

Haz clic para ver los roles necesarios para la cuenta de servicio

Para implementar el servicio de Cloud Run, puedes usar la cuenta de servicio predeterminada de Compute Engine creada automáticamente o especificar una cuenta de servicio administrada por el usuario. Esta cuenta de servicio debe tener los siguientes roles:

Conecta un servicio a una nueva base de datos de Firestore

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

Puedes conectar un servicio de Cloud Run a una base de datos de Firestore mediante la consola o la línea de comandos.

Console

  1. En la consola de Google Cloud, ve a la página Cloud Run.

    Ir a Cloud Run

  2. Haz clic en el servicio de la lista de servicios que deseas usar en esta integración.

  3. Haz clic en la pestaña Integraciones.

  4. Haz clic en Agregar integración.

  5. Haz clic en Base de datos de Firestore.

  6. Usa el nombre predeterminado o cambia el nombre por el valor que quieres usar.

    imagen

  7. Si se te solicita que habilites una lista de APIs, haz clic en Habilitar y espera a que las API se habiliten.

  8. En Recursos, observa los recursos nuevos que se crearán como resultado de esta integración.

  9. Haz clic en Enviar y espera a que se creen la integración y los recursos. Esto puede tardar hasta 15 minutos.

gcloud

  1. Actualiza a la versión más reciente de Google Cloud CLI:

    gcloud components update
    
  2. Crea la integración:

    gcloud beta run integrations create \
    --type=firestore \
    --service=SERVICE \
    --region REGION
    

    Reemplaza lo siguiente:

    • SERVICE por el nombre de servicio de Cloud Run

    De manera opcional, puedes incluir la marca --service-account=SERVICE_ACCOUNT_EMAIL.

    • SERVICE_ACCOUNT_EMAIL por la dirección de correo electrónico de la cuenta de servicio administrada por el usuario (PROJECT_NUMBER-compute@developer.gserviceaccount.com) que se usa para implementar el servicio. Omite esta marca si deseas usar la cuenta de servicio de procesamiento predeterminada (SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com).

      Para seguir usando la cuenta de servicio especificada cuando implementas integraciones de Cloud Run, ejecuta el siguiente comando:

      gcloud config set runapps/deployment-service-account
      
  3. Espera hasta 15 minutos, durante los cuales se crea y se conecta una base de datos de Firestore completamente configurada. Además, se crea una revisión nueva de Cloud Run, incluidas las variables de entorno que identifican la base de datos. Cuando se completa el proceso, se muestra el siguiente mensaje:

    [firestore] integration [firestore-xxx] has been updated successfully.
    
    To connect to the Firestore database, utilize the environment variable
    `FIRESTORE_DB_NAME`. This variable is added to the Cloud Run
    service for you.

    Para verificar el estado, ejecuta gcloud beta run integrations describe.

Visualiza integraciones de bases de datos de Firestore

Para ver el estado actual de las integraciones de la base de datos de Firestore para el servicio de Cloud Run, sigue estos pasos:

Console

  1. En la consola de Google Cloud, ve a la página Cloud Run.

    Ir a Cloud Run

  2. Haz clic en el servicio de la lista de servicios que deseas usar en esta integración.

  3. Haz clic en la pestaña Integraciones.

  4. Ubica la integración de la base de datos de Firestore que te interese y haz clic en Ver detalles.

gcloud

  1. Usa el siguiente comando para obtener una lista de las integraciones disponibles:

    gcloud beta run integrations list
  2. Con un nombre de la lista que se muestra, muestra sus detalles:

    gcloud beta run integrations describe INTEGRATION_NAME

    Reemplaza INTEGRATION_NAME por el nombre de la integración de la base de datos de Firestore.

Borra integraciones de bases de datos de Firestore

Si borras una integración, también se borrarán todos los recursos de Google Cloud asociados a esa integración, pero no se borrará tu servicio de Cloud Run.

Para borrar una integración de base de datos de Firestore del servicio de Cloud Run, sigue estos pasos:

Console

  1. En la consola de Google Cloud, ve a la página Cloud Run.

    Ir a Cloud Run

  2. Haz clic en el servicio del que deseas borrar una integración.

  3. Haz clic en la pestaña Integraciones.

  4. Ubica la integración de la base de datos de Firebase que te interese y haz clic en el ícono de puntos suspensivos a la derecha de la integración. Luego, haz clic en Borrar.

gcloud

  1. Usa el siguiente comando para obtener una lista de las integraciones disponibles:

    gcloud beta run integrations list
  2. Con un nombre de la lista que se muestra, borra la integración:

    gcloud beta run integrations delete INTEGRATION_NAME
    

    Reemplaza lo siguiente:

    • INTEGRATION_NAME por el nombre de la integración de la base de datos de Firestore.

    De manera opcional, puedes usar las siguientes opciones de marcas:

    Opción Descripción
    --service-account La dirección de correo electrónico de la cuenta de servicio administrada por el usuario para realizar la operación de eliminación.

Accede a la base de datos de Firestore en el código

Después de completar la integración, Cloud Run agrega automáticamente la variable de entorno FIRESTORE_DB_NAME para usarla en tu código de servicio de Cloud Run.

Código de muestra para servicios que usan Firestore

Consulta la documentación de Firestore para ver las muestras de código de la biblioteca del servidor de Firestore o la siguiente muestra:

La muestra de Python en las siguientes instrucciones requiere una base de datos de Firestore creada con la integración de Cloud Run, que se ejecute en modo de Firestore nativo. También debes tener un repositorio existente al que enviar el código.

  1. Crea un directorio para los archivos de muestra:

    mkdir SERVICE
    

    Reemplaza SERVICE por el nombre de servicio de Cloud Run.

  2. Configura la autenticación de Docker:

    gcloud auth configure-docker REGION-docker.pkg.dev
    

    Reemplaza REGION por la región de Google Cloud del servicio.

  3. Crea un archivo requirements.txt en el directorio SERVICE y agrega lo siguiente:

    flask
    google-cloud-firestore
    
  4. Crea un archivo Dockerfile en el directorio SERVICE y agrega lo siguiente:

    FROM python:3.9-slim
    
    WORKDIR /app
    
    COPY requirements.txt ./
    RUN pip install -r requirements.txt
    
    COPY . .
    
    EXPOSE 8080
    
    CMD ["python", "app.py"]
    
  5. Crea un archivo app.py en el directorio SERVICE y agrega lo siguiente:

    from flask import Flask, jsonify, request
    import google.cloud.firestore
    import os

    app = Flask(name) dbname = os.environ['FIRESTORE_DB_NAME'] db = google.cloud.firestore.Client(database=dbname) # Initialize Firestore client

    @app.route('/data', methods=['POST']) def add_data(): data = request.get_json() db.collection('city_person').add(data) return jsonify({'message': 'Data added successfully!'}), 201

    @app.route('/data', methods=['GET']) def get_data(): results = db.collection('city_person').stream() data_list = [doc.to_dict() for doc in results] return jsonify(data_list), 200

    if name == 'main': app.run(host='0.0.0.0', port=8080, debug=True)

  6. Navega a tu directorio de SERVICE:

    cd SERVICE
    

Reemplaza SERVICE por el nombre de tu carpeta de servicio de Cloud Run.

  1. Compilar la imagen de Docker:

    docker build -t REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest .
    

    Reemplaza lo siguiente:

    • REGION por la región de Google Cloud del servicio.
    • PROJECT_ID por el ID del proyecto de Google Cloud.
    • REPOSITORY_NAME por el nombre del repositorio de Artifact Registry.
    • IMAGE_NAME por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/job:latest.
  2. Envía la imagen de Docker:

    docker push REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest
    

    Reemplaza lo siguiente:

    • REGION por la región de Google Cloud del servicio.
    • PROJECT_ID por el ID del proyecto de Google Cloud.
    • REPOSITORY_NAME por el nombre del repositorio de Artifact Registry.
    • IMAGE_NAME por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/job:latest.
  3. Implementa el servicio en Cloud Run:

    gcloud run deploy SERVICE_NAME --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest --allow-unauthenticated --region REGION
    

Reemplaza: REGION por la región de Google Cloud del servicio. PROJECT_ID por el ID del proyecto de Google Cloud. REPOSITORY_NAME por el nombre del repositorio de Artifact Registry IMAGE_NAME por una referencia a la imagen de contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/job:latest.

Una vez completada la implementación, la URL del servicio se muestra junto a la URL de texto.

  1. Configura la integración de Firestore para Cloud Run:

    gcloud beta run integrations create \
    --type=firestore \
    --service=SERVICE_NAME \
    --region REGION
    
  2. Una vez completada la implementación, ingresa la URL de tu servicio en los siguientes comandos de lectura y escritura:

    1. Escribe datos:

      curl -X POST SERVICE_URL/data -H "Content-Type: application/json" -d '{"name": "Alice", "city": "New York"}'
      
    2. Lee datos:

      curl https://SERVICE_URL/data
      

Para ver resultados diferentes que se muestran en el comando de lectura de datos, puedes cambiar el nombre y la ciudad en el comando de escritura de datos.

Limitaciones