Artefatos de armazenamento do Firebase

Aug 25 2020

Estou tentando entender o que eu.artifacts.%PROJECT NAME%.appspot.comé. Atualmente, está ocupando 800 MB de armazenamento do meu limite diário de 5 GB. Ele contém apenas arquivos do tipo aplicativo / fluxo de octeto . Este intervalo foi criado automaticamente e o caminho do arquivo é eu.artifacts .... appspot.com/containers/images. Os 2 arquivos mais pesados ​​pesam até 200 MB e 130 MB. Tentei excluí-lo, mas ele foi criado automaticamente novamente. Os usuários podem fazer upload de fotos no meu site, mas esse balde atualmente leva apenas cerca de 10 MB contendo todas as imagens do usuário.

Portanto, minha pergunta é: para que serve esse balde e por que pesa tanto?

Respostas

44 FrankvanPuffelen Aug 25 2020 at 13:34

Se você estiver usando o Cloud Functions, os arquivos que você está vendo estão relacionados a uma mudança recente em como o tempo de execução (para o Node 10 e superior) é criado.

O Cloud Functions agora usa o Cloud Build para criar o tempo de execução (para o Node 10 e superior) para o seu Cloud Functions. E o Cloud Build, por sua vez, usa o Container Registry para armazenar esses tempos de execução, que os armazena em um novo intervalo do Cloud Storage em seu projeto.

Para saber mais sobre isso, consulte também esta entrada nas Perguntas frequentes sobre preços do Firebase em Por que vou precisar de uma conta de faturamento para usar Node.js 10 ou posterior para Cloud Functions para Firebase?

Veja também este tópico na lista de e-mails firebase-talk sobre esses artefatos.

20 yo1995 Sep 30 2020 at 19:15

Consultei o suporte do GCP e aqui estão algumas coisas

  • Cloud Functions causou o aumento no uso de armazenamento
  • Como esses artefatos não são armazenados no intervalo padrão, eles cobrarão de você mesmo se o total de bytes armazenados não atingir o limite do nível gratuito
  • Remova o balde de artefato em https://console.cloud.google.com/storage/browser . De acordo com a equipe de suporte

Em relação ao depósito de artefatos, você pode realmente se livrar deles, pois eles estão armazenando versões anteriores da função. No entanto, eu não recomendo excluir o (s) intervalo (s) "gcf-sources ...", pois ele contém a imagem atual, portanto, excluir este intervalo atrapalharia sua função.

Tentei retirá-lo por completo e até agora não está causando problemas. Vou atualizar se isso quebrar as coisas mais tarde.


Editar 201118: Veja o comentário abaixo e talvez seja necessário manter o balde enquanto remove todo o conteúdo nele.

8 MikeAltonji Oct 12 2020 at 01:30

Adicionando à resposta de @ yo1995, você pode excluir o intervalo sem precisar entrar no GCP. Permanecendo no Firebase, você vai para Storage e, em seguida, "Add a Bucket". A partir daí, você verá a opção de importar os depósitos gcp e artefato. Em seguida, você pode excluir os baldes de acordo.

5 decko Nov 17 2020 at 01:40

Adicionando a @ yo1995
, consultei o Suporte do Firebase e eles confirmaram que o depósito de artefatos não deve ser excluído. Basicamente, os artefatos são usados ​​para ajudar a construir a imagem final a ser armazenada no depósito "gcf-sources".

Para citá-los diretamente,
"você está livre para excluir o conteúdo em" XX.artifatos ", mas deixe o balde intocado, ele será usado nos seguintes ciclos de implantação."

Pode haver algum comportamento não intencional se você excluir totalmente o depósito de artefatos.
Além disso, "A equipe está trabalhando para limpar este balde automaticamente, mas há algumas restrições que eles precisam resolver antes de publicar a solução."

Por enquanto, configurei o balde para excluir automaticamente os arquivos com mais de 1 dia.

1 Beerswiller Dec 01 2020 at 04:22

Como reduzir o armazenamento

Portanto, há uma ótima resposta para o problema, mas a solução de como consertá-lo requer um mergulho mais profundo.

Para ajudar os futuros desenvolvedores a ir direto ao ponto, aqui está o resultado que você verá depois de adicionar as seguintes regras ao seu projeto no GCP

A linha laranja é o us-artifacts.<your-project>.appspot.combalde.

Etapas para corrigir o problema

  1. Navegue até https://console.cloud.google.com/
  2. Abra o projeto GCP que corresponde ao projeto Firebase
  3. No menu, escolha Armazenamento -> Navegador
  4. Clique no us-artifacts.<your-project>.appspot.combalde ofensivo
  5. Vá para a guia 'Ciclo de vida' e adicione uma vida útil de 3 dias
  • Adicionar uma regra
  • Excluir Objeto
  • Idade, 3 dias
    NB: os resultados não aparecerão no gráfico de uso até cerca de 24 horas depois

Embargo

O Firebase usa contêineres que fazem referência a contêineres anteriores. Portanto, se você definir um período de 3 dias e as funções de implantação do Firebase começarem a falhar, será necessário atualizar o nome local da sua função para incluir o controle de versão e especificar um sinalizador de compilação para excluir o antigo versões, remova-os do firebase.json ou exclua manualmente funções obsoletas.

Usando funções de tipo de API com versão

Em seu ponto de entrada, supondo index.tse supondo que você tenha iniciado o firebase com

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)

onde mainestá o nome do seu aplicativo

e em seu firebase.json

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

Ou, para atualizar 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, você pode criar uma regra de ciclo de vida para excluir os objetos dentro da pasta. defina a idade como 1 dia. Portanto, ele excluirá todos os objetos da pasta que estão envelhecendo há mais de 1 dia. régua do ciclo vital

SetCondition