Artefactos de almacenamiento de Firebase

Aug 25 2020

Estoy tratando de entender lo que eu.artifacts.%PROJECT NAME%.appspot.comes. Actualmente está ocupando 800 MB de almacenamiento de mi límite diario de 5 GB. Solo contiene archivos de tipo aplicación / secuencia de octetos . Este depósito se creó automáticamente y la ruta del archivo es eu.artifacts .... appspot.com/containers/images. Los 2 archivos más pesados ​​pesan hasta 200 MB y 130 MB. Intenté eliminarlo, pero se volvió a crear automáticamente. Los usuarios pueden cargar imágenes en mi sitio web, pero ese depósito actualmente solo toma alrededor de 10 MB que contienen todas las imágenes del usuario.

Entonces mi pregunta es: ¿Para qué es este balde y por qué pesa tanto?

Respuestas

44 FrankvanPuffelen Aug 25 2020 at 13:34

Si usa Cloud Functions, los archivos que ve están relacionados con un cambio reciente en la forma en que se compila el tiempo de ejecución (para el nodo 10 y posteriores).

Cloud Functions ahora usa Cloud Build para crear el tiempo de ejecución (para el nodo 10 en adelante) para tus Cloud Functions. Y Cloud Build, a su vez, usa Container Registry para almacenar esos tiempos de ejecución, que los almacena en un nuevo depósito de Cloud Storage en tu proyecto.

Para obtener más información sobre esto, consulte también esta entrada en las Preguntas frecuentes sobre precios de Firebase sobre ¿Por qué necesitaré una cuenta de facturación para usar Node.js 10 o posterior para Cloud Functions para Firebase?

También vea este hilo en la lista de correo de firebase-talk sobre estos artefactos.

20 yo1995 Sep 30 2020 at 19:15

He consultado el soporte de GCP y aquí hay algunas cosas

  • Cloud Functions provocó el aumento en el uso del almacenamiento
  • Dado que estos artefactos no se almacenan en el depósito predeterminado, le cobrarán incluso si el total de bytes almacenados no alcanza el límite de nivel gratuito
  • Elimine el depósito de artefactos en https://console.cloud.google.com/storage/browser . Según el personal de apoyo

Con respecto al depósito de artefactos, en realidad puede deshacerse de ellos, ya que están almacenando versiones anteriores de la función. Sin embargo, no recomiendo eliminar el (los) depósito (s) "gcf-sources ...", ya que contiene la imagen actual, por lo que eliminar este depósito estropearía su función.

Traté de eliminarlo por completo y hasta ahora no está causando problemas. Actualizaré si rompe las cosas más tarde.


Editar 201118: consulte el comentario a continuación y es posible que deba conservar el depósito mientras elimina todo el contenido que contiene.

8 MikeAltonji Oct 12 2020 at 01:30

Agregando a la respuesta de @ yo1995, puede eliminar el depósito sin necesidad de ingresar a GCP. Al permanecer en Firebase, vaya a Almacenamiento, luego "Agregar un depósito". Desde allí, verá la opción para importar los depósitos gcp y artifact. A continuación, puede eliminar los depósitos en consecuencia.

5 decko Nov 17 2020 at 01:40

Agregando a @ yo1995
, consulté con Firebase Support y me confirmaron que el depósito de artefactos no debería eliminarse. Básicamente, los artefactos se utilizan para ayudar a construir la imagen final que se almacenará en el depósito "gcf-sources".

Para citarlos directamente,
"puede eliminar el contenido de" XX.artifacts ", pero no toque el depósito, se utilizará en los siguientes ciclos de implementación".

Es posible que se produzca algún comportamiento no deseado si elimina el depósito de artefactos por completo.
Además, "el equipo está trabajando para limpiar este depósito automáticamente, pero existen algunas restricciones que deben resolver antes de publicar la solución".

Por el momento, configuro el depósito para que elimine automáticamente los archivos de más de 1 día de antigüedad.

1 Beerswiller Dec 01 2020 at 04:22

Cómo reducir el almacenamiento

Así que hay una gran respuesta al problema, pero la solución de cómo solucionarlo requiere una mayor profundidad.

Para ayudar a los futuros desarrolladores a ir directamente al grano, este es el resultado que debería ver después de agregar las siguientes reglas a su proyecto en GCP

La línea naranja es el us-artifacts.<your-project>.appspot.comcubo.

Pasos para solucionar el problema

  1. Navegue a https://console.cloud.google.com/
  2. Abra el proyecto de GCP que corresponde al proyecto de Firebase
  3. En el menú, elija Almacenamiento -> Navegador
  4. Haga clic en el us-artifacts.<your-project>.appspot.comcubo infractor
  5. Vaya a la pestaña 'Ciclo de vida' y agregue una vida útil de 3 días
  • Agregar una regla
  • Eliminar objeto
  • Edad, 3 días
    Nota: los resultados no aparecerán en el gráfico de uso hasta aproximadamente 24 horas después

Consideración

Firebase usa contenedores que hacen referencia a contenedores anteriores, por lo tanto, si establece un período de 3 días y las funciones de implementación de firebase comienzan a fallar, deberá actualizar el nombre local de su función para incluir el control de versiones y especificar una marca de compilación para eliminar el antiguo versiones, elimínelas de su firebase.json o elimine manualmente las funciones obsoletas.

Uso de funciones de tipo API versionadas

En su punto de entrada, asumiendo index.tsy asumiendo que ha iniciado firebase con

admin.initializeApp(functions.config().firebase)
import * as functions from 'firebase-functions'

// define the app as a cloud function called APIv1 build xxxxxx
export const APIv1b20201202 = functions.https.onRequest(main)

donde mainesta el nombre de tu aplicación

y en tu firebase.json

...
"hosting": {
    "public": "dist",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**", "**/tests/**"],
    "rewrites": [
      {
        "source": "/api/v1/**",
        "function": "APIv1b2021202"
      }
    ]
  },
...

O, para actualizar manualmente

# Deploy new function called APIv11
$ firebase deploy --only functions:APIv11

# Wait until deployment is done; now both APIv11 and APIv10 are running

# Delete APIv10
$ firebase functions:delete APIv10
Ankur Nov 23 2020 at 11:06

Como alternativa, puede crear una regla de ciclo de vida para eliminar los objetos dentro de la carpeta. establezca la edad en 1 día. Por lo tanto, eliminará todos los objetos de la carpeta que tengan más de 1 día de antigüedad. ciclo de vida rulw

SetCondition