Артефакты хранилища Firebase
Я пытаюсь понять, что это eu.artifacts.%PROJECT NAME%.appspot.comтакое. В настоящее время он занимает 800 МБ дискового пространства из моего дневного лимита в 5 ГБ. Он содержит файлы только типа приложения / октетного потока . Эта корзина была создана автоматически, а путь к файлу - eu.artifacts .... appspot.com/containers/images. Там 2 самых тяжелых файла весят аж 200мб и 130мб. Я попытался удалить его, но он был автоматически создан снова. Пользователи могут загружать изображения на мой веб-сайт, но в настоящее время это ведро занимает всего около 10 МБ, содержащее все пользовательские изображения.
Поэтому у меня вопрос: для чего это ведро и почему оно так много весит?
Ответы
Если вы используете облачные функции, файлы, которые вы видите, связаны с недавним изменением способа построения среды выполнения (для Node 10 и выше).
Cloud Functions теперь использует Cloud Build для создания среды выполнения (для Node 10 и выше) для ваших Cloud Functions. А Cloud Build, в свою очередь, использует реестр контейнеров для хранения этих сред выполнения, который сохраняет их в новом сегменте облачного хранилища в рамках вашего проекта.
Для получения дополнительной информации см. Также эту запись в разделе часто задаваемых вопросов о ценах на Firebase о том, зачем мне нужна учетная запись для выставления счетов, чтобы использовать Node.js 10 или более поздней версии для облачных функций для Firebase?
Также посмотрите эту ветку в списке рассылки firebase-talk об этих артефактах.
Я проконсультировался со службой поддержки GCP, и вот несколько вещей
- Облачные функции вызвали всплеск использования хранилища
- Поскольку эти артефакты не хранятся в корзине по умолчанию, они будут взимать плату, даже если общее количество хранимых байтов не достигает предела бесплатного уровня.
- Удалите корзину артефактов на странице https://console.cloud.google.com/storage/browser . По словам обслуживающего персонала
Что касается корзины артефактов, вы можете фактически избавиться от них, поскольку они хранят предыдущие версии функции. Однако я не рекомендую удалять сегменты "gcf-sources ...", поскольку они содержат текущее изображение, поэтому удаление этого сегмента приведет к нарушению вашей функции.
Пытался удалить полностью, пока не доставляет хлопот. Я обновлю, если он сломается позже.
Изменить 201118: см. Комментарий ниже, и вам может потребоваться сохранить ведро, удаляя все содержимое в нем.
Добавив к ответу @ yo1995, вы можете удалить корзину, не заходя в GCP. Оставаясь в Firebase, вы переходите в Хранилище, затем «Добавить корзину». Оттуда вы увидите возможность импортировать корзины gcp и артефактов. Затем вы можете соответственно удалить корзины.
Добавив к @ yo1995,
я проконсультировался со службой поддержки Firebase, и они подтвердили, что корзину артефактов не следует удалять. В основном артефакты используются для создания окончательного образа, который будет храниться в корзине "gcf-sources".
Процитируем их напрямую:
«вы можете удалить содержимое в« XX.artifacts », но, пожалуйста, не трогайте корзину, она будет использоваться в следующих циклах развертывания».
Если вы полностью удалите корзину артефактов, может возникнуть непредвиденное поведение.
Также «Группа работает над автоматической очисткой этого ведра, но есть некоторые ограничения, которые им необходимо устранить перед публикацией решения».
На данный момент я установил ведро для автоматического удаления файлов старше 1 дня.
Как уменьшить объем хранилища
Так что есть отличный ответ на этот вопрос, но решение о том, как его исправить, требует дальнейшего глубокого погружения.
Чтобы помочь будущим разработчикам сразу перейти к делу, вот результат, который вы должны увидеть после добавления следующих правил в свой проект в GCP.
Оранжевая линия - это us-artifacts.<your-project>.appspot.comведро.
Действия по устранению проблемы
- Перейдите на https://console.cloud.google.com/
- Откройте проект GCP, соответствующий проекту Firebase.
- В меню выберите Storage -> Browser.
- Нажмите на проблемное
us-artifacts.<your-project>.appspot.comведро - Перейдите на вкладку "Жизненный цикл" и добавьте срок службы в 3 дня.
- Добавить правило
- Удалить объект
- Возраст, 3 дня
NB: Результаты не будут отображаться на графике использования до около 24 часов позже
Предостережение
Firebase использует контейнеры, которые ссылаются на предыдущие контейнеры, поэтому, если вы установите период в 3 дня и ваши функции развертывания firebase начинают давать сбой, вам нужно будет обновить локальное имя вашей функции, чтобы включить управление версиями, и либо указать флаг сборки, чтобы удалить старые версий, удалите их из firebase.json или вручную удалите устаревшие функции.
Использование версионных функций типа API
В вашей точке входа, предполагая index.tsи предполагая, что вы инициализировали firebase с помощью
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)
где mainимя вашего приложения
и в твоем firebase.json
...
"hosting": {
"public": "dist",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**", "**/tests/**"],
"rewrites": [
{
"source": "/api/v1/**",
"function": "APIv1b2021202"
}
]
},
...
Или, чтобы обновить вручную
# 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
В качестве альтернативы вы можете создать правило жизненного цикла для удаления объектов внутри папки. установите возраст 1 день. Таким образом, он удалит все объекты в папке, срок хранения которых превышает 1 день. lifeCycle rulw