Firebase 저장소 아티팩트
나는 그것이 무엇인지 이해하려고 노력하고 eu.artifacts.%PROJECT NAME%.appspot.com있습니다. 현재 일일 5GB 한도에서 800MB의 저장 용량을 차지하고 있습니다. 애플리케이션 / 옥텟 스트림 유형의 파일 만 포함 합니다. 이 버킷은 자동으로 생성되었으며 파일 경로는 eu.artifacts .... appspot.com/containers/images입니다. 2 개의 가장 무거운 파일의 무게는 200MB와 130MB입니다. 삭제를 시도했지만 자동으로 다시 생성되었습니다. 사용자는 내 웹 사이트에 사진을 업로드 할 수 있지만 현재 해당 버킷에는 모든 사용자 이미지가 포함 된 약 10MB 만 걸립니다.
그래서 내 질문은 :이 버킷은 무엇을위한 것이고 왜 그렇게 무게가 많은가?
답변
Cloud Functions를 사용하는 경우 표시되는 파일은 런타임 (노드 10 이상) 빌드 방법의 최근 변경과 관련이 있습니다.
이제 Cloud Functions는 Cloud Build 를 사용하여 Cloud Functions 용 런타임 (노드 10 이상)을 만듭니다. 그리고 Cloud Build는 Container Registry 를 사용하여 해당 런타임을 저장하고 프로젝트 아래의 새 Cloud Storage 버킷에 저장합니다.
이에 대한 자세한 내용은 Firebase 용 Cloud Functions에 Node.js 10 이상을 사용하려면 결제 계정이 필요한 이유 에 대한 Firebase 가격 FAQ의이 항목도 참조하세요 .
또한 이러한 아티팩트 에 대한 firebase-talk 메일 링리스트 에서이 스레드를 참조하세요 .
GCP 지원에 문의했으며 여기에 몇 가지 사항이 있습니다.
- Cloud Functions로 인해 스토리지 사용량이 급증했습니다.
- 이러한 아티팩트는 기본 버킷에 저장되지 않으므로 저장된 총 바이트가 프리 티어 한도에 도달하지 않더라도 요금이 부과됩니다.
- https://console.cloud.google.com/storage/browser 에서 아티팩트 버킷을 제거합니다 . 지원 직원에 따르면
아티팩트 버킷과 관련하여 함수의 이전 버전을 저장하고 있으므로 실제로 제거 할 수 있습니다. 그러나 "gcf-sources ..."bucket (s)은 현재 이미지가 포함되어 있으므로 삭제하지 않는 것이 좋습니다. 따라서이 버킷을 삭제하면 함수가 엉망이됩니다.
나는 그것을 전체적으로 제거하려고 노력했지만 지금까지 문제를 일으키지 않습니다. 나중에 문제가 생기면 업데이트하겠습니다.
201118 편집 : 아래 주석을 참조하고 버킷의 모든 콘텐츠를 제거하는 동안 버킷을 유지해야 할 수 있습니다.
@ yo1995의 응답에 추가하면 GCP로 이동할 필요없이 버킷을 삭제할 수 있습니다. Firebase에서 저장소로 이동 한 다음 '버킷 추가'로 이동합니다. 여기에서 gcp 및 아티팩트 버킷을 가져 오는 옵션이 표시됩니다. 다음으로 그에 따라 버킷을 삭제할 수 있습니다.
@ yo1995에 추가하여
Firebase 지원팀에 문의했고 아티팩트 버킷을 삭제해서는 안된다고 확인했습니다. 기본적으로 아티팩트는 "gcf-sources"버킷에 저장할 최종 이미지를 빌드하는 데 사용됩니다.
직접 인용하려면
""XX.artifacts "의 내용은 자유롭게 삭제할 수 있지만 버킷은 그대로 두십시오. 다음 배포주기에 사용됩니다."
아티팩트 버킷을 완전히 삭제하면 의도하지 않은 동작이 발생할 수 있습니다.
또한 "팀은이 버킷을 자동으로 정리하기 위해 노력하고 있지만 솔루션을 게시하기 전에 해결해야하는 몇 가지 제한 사항이 있습니다."
당분간 버킷을 설정하여 1 일이 지난 파일을 자동 삭제했습니다.
저장 용량을 줄이는 방법
따라서 문제에 대한 훌륭한 답변 이 있지만 문제를 해결하는 방법에 대한 해결책은 추가 심층 분석이 필요합니다.
미래의 개발자가 바로 추격 할 수 있도록 GCP의 프로젝트에 다음 규칙을 추가 한 후 확인해야 할 결과는 다음과 같습니다.
주황색 선이 us-artifacts.<your-project>.appspot.com양동이입니다.
문제 해결 단계
- https://console.cloud.google.com/으로 이동합니다.
- Firebase 프로젝트에 해당하는 GCP 프로젝트를 엽니 다.
- 메뉴에서 Storage-> Browser를 선택합니다.
- 문제가되는
us-artifacts.<your-project>.appspot.com버킷을 클릭합니다. - 'Lifecycle'탭으로 이동하여 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