Cloud Storage 가이드

이 간단한 가이드에서는 Cloud Storage 트리거를 사용하여 백그라운드 Cloud Functions를 작성, 배포, 트리거하는 방법을 설명합니다.

목표

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Cloud Platform 구성요소를 사용합니다.

  • Google Cloud Functions
  • Google Cloud Storage

가격 계산기를 사용하여 예상 사용량을 기준으로 예상 비용을 산출합니다.

새 Cloud Platform 사용자는 무료 평가판을 사용할 수 있습니다.

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Platform 프로젝트를 선택하거나 만듭니다.

    리소스 관리 페이지로 이동

  3. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  4. 필요한 Cloud Functions and Cloud Storage APIs를 사용 설정합니다.

    APIs사용 설정

  5. Cloud SDK 설치 및 초기화.
  6. gcloud 구성요소를 업데이트 및 설치합니다.
    gcloud components update &&
    gcloud components install beta
  7. Node.js 개발을 위한 환경을 준비합니다.

    설정 가이드로 이동

애플리케이션 준비

  1. 테스트 파일을 업로드할 Cloud Storage 버킷을 만듭니다. [YOUR_TRIGGER_BUCKET_NAME]은 전역적으로 고유한 버킷 이름입니다.

    gsutil mb gs://[YOUR_TRIGGER_BUCKET_NAME]
    

  2. 로컬 시스템에 애플리케이션 코드를 저장할 디렉토리를 만듭니다.

    Linux 또는 Mac OS X

    디렉토리를 만듭니다.

    mkdir ~/gcf_gcs

    해당 디렉토리로 이동합니다.

    cd ~/gcf_gcs

    Windows(CMD)

    디렉토리를 만듭니다.

    mkdir %HOMEDRIVE%%HOMEPATH%\gcf_gcs

    해당 디렉토리로 이동합니다.

    cd %HOMEDRIVE%%HOMEPATH%\gcf_gcs

함수 배포 및 트리거

현재 Cloud Storage 함수는 Cloud Storage의 Pub/Sub 알림을 기반으로 하며 다음과 같은 유사한 이벤트 유형을 지원합니다.

다음 섹션에서는 이러한 각 이벤트 유형에 대해 함수를 배포하고 트리거하는 방법을 설명합니다.

객체 완료

Cloud Storage 객체의 '쓰기'가 성공적으로 완료되면 객체 완료 이벤트가 트리거됩니다. 특히 새로운 객체를 만들거나 기존 객체를 덮어쓸 때 해당 이벤트가 트리거됩니다. 보관처리 및 메타데이터 업데이트 작업은 해당 트리거에 의해 무시됩니다.

객체 완료: 함수 배포

함수를 배포하려면 gcf_gcs 디렉토리에 다음 콘텐츠를 포함하는 index.js 파일을 만듭니다.

Node.js

/**
 * Generic background Cloud Function to be triggered by Cloud Storage.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.helloGCSGeneric = (event, callback) => {
  const file = event.data;
  const context = event.context;

  console.log(`Event ${context.eventId}`);
  console.log(`  Event Type: ${context.eventType}`);
  console.log(`  Bucket: ${file.bucket}`);
  console.log(`  File: ${file.name}`);
  console.log(`  Metageneration: ${file.metageneration}`);
  console.log(`  Created: ${file.timeCreated}`);
  console.log(`  Updated: ${file.updated}`);

  callback();
};

helloGCSGeneric 함수는 모듈에 의해 내보내어지며 새로운 객체가 버킷에서 완료될 때 실행됩니다.

그런 다음 gcf_gcs 디렉토리에서 다음 명령어를 실행합니다.

gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.finalize

[YOUR_TRIGGER_BUCKET_NAME]은 함수를 트리거하는 Cloud Storage 버킷의 이름입니다.

객체 완료: 함수 트리거

함수 트리거 단계는 다음과 같습니다.

  1. gcf_gcs 디렉토리에 빈 gcf-test.txt 파일을 만듭니다.

  2. 함수를 트리거하기 위해 해당 파일을 Cloud Storage에 업로드합니다.

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    [YOUR_TRIGGER_BUCKET_NAME]은 테스트 파일을 업로드할 Cloud Storage 버킷의 이름입니다.

  3. 로그를 통해 실행이 완료되었는지 확인합니다.

    gcloud beta functions logs read --limit 50
    

객체 삭제

객체 삭제 이벤트는 버전 관리 버킷이 아닌 경우에 가장 유용합니다. 해당 이벤트는 이전 버전의 객체가 삭제될 때 트리거됩니다. 또한 객체를 덮어쓸 때 트리거됩니다. 객체 삭제 트리거는 버전 관리 버킷과도 함께 사용 가능하며, 객체의 버전이 영구적으로 삭제될 때 트리거됩니다.

객체 삭제: 함수 배포

함수 배포 단계는 다음과 같습니다.

  1. 완료 예시에서와 같이 동일한 helloGCSGeneric 함수를 사용하여 gcf_gcs 디렉토리에 index.js 파일을 만듭니다. 해당 함수는 객체가 버킷에서 삭제될 때 실행됩니다.

  2. gcf_gcs 디렉토리에서 다음 명령어를 실행합니다.

    gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.delete
    

    [YOUR_TRIGGER_BUCKET_NAME]는 함수를 트리거하는 Cloud Storage 버킷의 이름입니다.

객체 삭제: 함수 트리거

함수 트리거 단계는 다음과 같습니다.

  1. gcf_gcs 디렉토리에 gcf-test.txt라는 빈 파일을 만듭니다.

  2. 버전 관리 버킷이 아님을 확인합니다.

    gsutil versioning set off gs://[YOUR_TRIGGER_BUCKET_NAME]
    
  3. 함수를 트리거하기 위해 해당 파일을 Cloud Storage에 업로드합니다.

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    [YOUR_TRIGGER_BUCKET_NAME]은 테스트 파일을 업로드할 Cloud Storage 버킷의 이름입니다. 이 시점에서 함수는 아직 실행되지 않아야 합니다.

  4. 파일을 삭제합니다.

    gsutil rm gs://[YOUR_TRIGGER_BUCKET_NAME]/gcf-test.txt
    
  5. 로그를 통해 실행이 완료되었는지 확인합니다.

    gcloud beta functions logs read --limit 50
    

함수의 실행을 완료하는 데 다소 시간이 걸릴 수 있습니다.

객체 보관처리

객체 보관처리 이벤트는 버전 관리 버킷에서만 사용할 수 있습니다. 해당 이벤트는 객체의 이전 버전이 보관처리될 때 발생합니다. 특히 보관처리 이벤트는 객체가 덮어쓰여지거나 삭제될 때 트리거됩니다.

객체 보관처리: 함수 배포

함수 배포 단계는 다음과 같습니다.

  1. 완료 예시에서와 같이 동일한 helloGCSGeneric 함수를 사용하여 gcf_gcs 디렉토리에 index.js 파일을 만듭니다. 해당 함수는 객체가 보관처리될 때 실행됩니다.

  2. gcf_gcs 디렉토리에서 다음 명령어를 실행합니다.

    gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.archive
    

    [YOUR_TRIGGER_BUCKET_NAME]는 함수를 트리거하는 Cloud Storage 버킷의 이름입니다.

객체 보관처리: 함수 트리거

함수 트리거 단계는 다음과 같습니다.

  1. gcf_gcs 디렉토리에 빈 gcf-test.txt 파일을 만듭니다.

  2. 버킷에 버전 관리가 사용 설정되어 있는지 확인합니다.

    gsutil versioning set on gs://[YOUR_TRIGGER_BUCKET_NAME]
    
  3. 함수를 트리거하기 위해 해당 파일을 Cloud Storage에 업로드합니다.

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    [YOUR_TRIGGER_BUCKET_NAME]은 테스트 파일을 업로드할 Cloud Storage 버킷의 이름입니다. 이 시점에서 함수는 아직 실행되지 않아야 합니다.

  4. 파일을 보관처리합니다.

    gsutil rm gs://[YOUR_TRIGGER_BUCKET_NAME]/gcf-test.txt
    
  5. 로그를 통해 실행이 완료되었는지 확인합니다.

    gcloud beta functions logs read --limit 50
    

객체 메타데이터 업데이트

메타데이터 업데이트 이벤트는 기존 객체의 메타데이터가 업데이트될 때 트리거됩니다.

객체 메타데이터 업데이트: 함수 배포

함수 배포 단계는 다음과 같습니다.

  1. 완료 예시에서와 같이 동일한 helloGCSGeneric 함수를 사용하여 gcf_gcs 디렉토리에 index.js 파일을 만듭니다. 해당 함수는 객체의 메타데이터가 변경될 때 실행됩니다.

  2. gcf_gcs 디렉토리에서 다음 명령어를 실행합니다.

    gcloud beta functions deploy helloGCSGeneric --trigger-resource [YOUR_TRIGGER_BUCKET_NAME] --trigger-event google.storage.object.metadataUpdate
    

    [YOUR_TRIGGER_BUCKET_NAME]는 함수를 트리거하는 Cloud Storage 버킷의 이름입니다.

객체 메타데이터 업데이트: 함수 트리거

함수 트리거 단계는 다음과 같습니다.

  1. gcf_gcs 디렉토리에 빈 gcf-test.txt 파일을 만듭니다.

  2. 버전 관리 버킷이 아님을 확인합니다.

    gsutil versioning set off gs://[YOUR_TRIGGER_BUCKET_NAME]
    
  3. 함수를 트리거하기 위해 해당 파일을 Cloud Storage에 업로드합니다.

    gsutil cp gcf-test.txt gs://[YOUR_TRIGGER_BUCKET_NAME]
    

    [YOUR_TRIGGER_BUCKET_NAME]은 테스트 파일을 업로드할 Cloud Storage 버킷의 이름입니다. 이 시점에서 함수는 아직 실행되지 않아야 합니다.

  4. 파일의 메타데이터를 업데이트합니다.

    gsutil -m setmeta -h "Content-Type:text/plain" gs://[YOUR_TRIGGER_BUCKET_NAME]/gcf-test.txt
    
  5. 로그를 통해 실행이 완료되었는지 확인합니다.

    gcloud beta functions logs read --limit 50
    

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.

프로젝트 삭제

청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

Cloud Functions 삭제

Cloud Functions를 삭제해도 Cloud Storage에 저장된 리소스는 삭제되지 않습니다.

Cloud Functions를 삭제하려면 다음 명령어를 실행합니다.

gcloud beta functions delete [NAME_OF_FUNCTION]

[NAME_OF_FUNCTION]은 삭제할 함수의 이름입니다.

또한 Google Cloud Platform 콘솔에서 Cloud Functions를 삭제할 수도 있습니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Cloud Functions 문서