Cloud Functions로 Cloud Storage 확장


업로드, 업데이트 또는 Cloud Storage에서 파일 및 폴더를 삭제하는 중입니다.

이 페이지의 예시는 이미지 파일이 Cloud Storage에 업로드될 때 트리거되는 샘플 함수를 기반으로 합니다. 이 샘플 함수는 이벤트 속성에 액세스하는 방법, 파일을 Cloud Functions에 다운로드하는 방법 Cloud Storage 이벤트 처리의 기타 기본사항을 다룹니다.

사용 사례의 예를 더 보려면 다음을 참조하세요. Cloud Functions(으)로 무엇을 할 수 있나요?

Cloud Storage 변경사항에 대한 함수 트리거

functions.storage 사용 인코더-디코더 아키텍처를 Cloud Storage 이벤트. 광고 항목의 범위를 함수를 특정 Cloud Storage 버킷에 할당하거나 기본값을 사용합니다. 다음 중 하나를 사용하세요.

예를 들어 썸네일 이미지 생성기 샘플 범위는 프로젝트의 기본 버킷으로 지정되어 있습니다.

exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => {
  // ...
});

Cloud Storage는 다음 이벤트를 지원합니다.

  • onArchive: 버킷에서 객체 버전 관리를 사용 설정한 경우에만 전송됩니다. 이 이벤트는 객체를 보관처리했거나 이름이 동일한 객체를 업로드하여 덮어씀으로써 객체의 서비스 중인 버전이 보관처리 버전이 되었음을 나타냅니다.
  • onDelete: 객체가 영구 삭제되면 전송됩니다. 여기에는 덮어썼거나 버킷 수명 주기 구성에 따라 삭제된 객체가 포함됩니다. 객체 버전 관리를 사용 설정한 버킷에서는 객체를 보관처리(onArchive 참조)할 때 storage.objects.delete 메서드를 통해 보관처리했더라도 이 이벤트가 전송되지 않습니다.
  • onFinalize: 버킷에서 새 객체나 기존 객체의 새 세대를 만들면 전송됩니다. 여기에는 기존 객체 복사나 재작성이 포함됩니다. 실패한 업로드는 이 이벤트를 트리거하지 않습니다.
  • onMetadataUpdate: 기존 객체의 메타데이터가 변경되면 전송됩니다.

위의 onFinalize와 같이 on 이벤트 핸들러 내에서 이벤트를 설정합니다.

Cloud Storage 객체 속성에 액세스

Cloud Functions는 다양한 Cloud Storage 객체 속성을 노출합니다. : sizecontentType 확인할 수 있습니다. 이 'metageneration' 속성은 객체의 메타데이터를 설정합니다 새 객체의 경우 metageneration 값이 1입니다.

const fileBucket = object.bucket; // The Storage bucket that contains the file.
const filePath = object.name; // File path in the bucket.
const contentType = object.contentType; // File content type.

썸네일 이미지 생성 샘플에서는 이러한 속성 중 일부를 사용하여 함수가 다음과 같은 값을 반환하는 종료 사례를 감지합니다.

// Exit if this is triggered on a file that is not an image.
if (!contentType.startsWith('image/')) {
  return functions.logger.log('This is not an image.');
}

// Get the file name.
const fileName = path.basename(filePath);
// Exit if the image is already a thumbnail.
if (fileName.startsWith('thumb_')) {
  return functions.logger.log('Already a Thumbnail.');
}

파일 다운로드, 변환, 업로드

경우에 따라 컴퓨터에서 파일을 다운로드할 필요가 없을 수도 있습니다. Cloud Storage 하지만 Cloud Storage에 저장된 파일로 썸네일 이미지를 생성하는 것과 같은 집중적인 작업을 수행하려면 함수 인스턴스(즉, 코드를 실행하는 가상 머신)에 파일을 다운로드해야 합니다.

객체를 간편하게 다운로드하고 Cloud Storage에 다시 업로드하려면 다음을 설치합니다. Google Cloud Storage 패키지를 사용하여 npm install --save @google-cloud/storage로 가져오고 이를 가져옵니다. JavaScript 사용 방법 썸네일 처리 작업과 같은 외부 프로세스를 샘플을 사용하여 child-process-promise도 가져옵니다.

const functions = require('firebase-functions/v1');
const admin = require('firebase-admin');
admin.initializeApp()
const path = require('path');

//library for resizing images
const sharp = require('sharp');

gcs.bucket.file(filePath).download를 사용하여 파일을 임시 Cloud Functions 인스턴스의 디렉터리입니다. 이 위치에서 필요에 따라 파일을 처리한 다음 Cloud Storage에 업로드할 수 있습니다. 비동기 작업을 수행하는 경우 콜백에서 JavaScript 프로미스를 반환해야 합니다.

예: 이미지 변환

Cloud Functionssharp과 같은 이미지 처리 프로그램과 함께 사용하면 그래픽 이미지 파일을 조작할 수 있습니다. 다음은 업로드된 이미지 파일의 썸네일 이미지를 만드는 방법의 예시입니다.

// Download file from bucket.
const bucket = admin.storage().bucket(fileBucket);
const metadata = {
  contentType: contentType,
};
const downloadResponse = await bucket.file(filePath).download();
const imageBuffer = downloadResponse[0];
functions.logger.log("Image downloaded!");

// Generate a thumbnail using sharp.
const thumbnailBuffer = await sharp(imageBuffer).resize({
  width: 200,
  height: 200,
  withoutEnlargement: true,
}).toBuffer();
functions.logger.log("Thumbnail created");

// Upload the thumbnail with a 'thumb_' prefix.
const thumbFileName = `thumb_${fileName}`;
const thumbFilePath = path.join(path.dirname(filePath), thumbFileName);
await bucket.file(thumbFilePath).save(thumbnailBuffer, {
  metadata: metadata,
});
return functions.logger.log("Thumbnail uploaded!");

이 코드는 임시 디렉터리에 저장된 이미지의 200x200 썸네일 이미지 업로드 Cloud Storage(으)로 돌아갑니다.

예시 더보기

이미지 트랜스코딩, 콘텐츠 검토, EXIF 메타데이터 추출 등 일반적인 미디어 변환 함수의 다양한 예시가 마련되어 있습니다. 전체 예시 목록은 GitHub에서 확인할 수 있습니다.