빌드 프로세스 개요

함수 소스 코드를 Cloud Functions에 배포하면 이 소스가 Cloud Storage 버킷에 저장됩니다. 그러면 Cloud Build가 컨테이너 이미지에 코드를 자동으로 빌드하고 해당 이미지를 이미지 레지스트리에 푸시합니다. Cloud Functions는 함수 실행을 위해 컨테이너를 실행해야 할 때 이 이미지에 액세스합니다.

이미지를 빌드하는 프로세스는 완전 자동으로 진행되며 사용자의 직접 입력이 필요하지 않습니다. 빌드 프로세스에 사용된 모든 리소스는 자체 사용자 프로젝트로 실행됩니다.

프로젝트 내에서 빌드 프로세스를 실행하면 다음과 같은 특징이 있습니다.

  • 모든 빌드 로그에 직접 액세스할 수 있습니다.

  • Cloud Build에 고유 기본 동시 실행 할당량이 있더라도 사전 설정된 빌드 시간 할당량이 없습니다.

  • Artifact Registry에 모두 저장되어 있는 현재 컨테이너 이미지 및 이전에 배포된 컨테이너 이미지를 볼 수 있습니다.

  • Cloud Storage는 프로젝트에서 직접 사용되며 함수의 소스 코드 디렉터리는 프로젝트 내의 버킷에 저장됩니다. 다음에 유의하세요.

    • 기본 암호화를 사용하는 경우 이 버킷의 이름은 gcf-sources-PROJECT_NUMBER-REGION입니다.
    • CMEK로 데이터를 보호하는 경우 버킷의 이름은 gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH입니다.
    • 버킷에는 보관 기간이 없습니다.

빌드 프로세스 특성

빌드 프로세스에는 다음과 같은 특성이 있습니다.

  • 프로젝트에 대해 Cloud Build API를 사용 설정해야 합니다.

    API를 수동으로 사용 설정하려면 위 링크를 클릭하고 드롭다운 메뉴에서 프로젝트를 선택한 후 표시되는 메시지에 따라 UI를 사용 설정합니다.

  • 전체 빌드 프로세스가 프로젝트의 컨텍스트 내에서 실행되기 때문에 포함된 리소스의 가격 책정에 따라 프로젝트에 영향을 줍니다.

    • Cloud Build 가격 책정은 가격 책정 페이지를 참조하세요. 인스턴스가 사전 워밍되고 빠르게 제공되기 때문에 이 프로세스에는 Cloud Build의 기본 인스턴스 크기가 사용됩니다. Cloud Build는 무료 계층을 제공합니다. 자세한 내용은 가격 책정 문서를 참조하세요.

    • Cloud Storage 가격 책정은 가격 책정 페이지를 참조하세요. Cloud Storage는 무료 등급을 제공합니다. 자세한 내용은 가격 책정 문서를 참조하세요.

    • Artifact Registry 가격 책정은 가격 책정 페이지를 참조하세요.

    • Container Registry(지원 중단됨) 가격 책정은 가격 책정 페이지를 참조하세요.

  • 빌드 프로세스가 결제 대상이 되므로 프로젝트에 Cloud Billing 계정이 연결되어 있어야 합니다.

빌드 이미지 로그 보기

사용자 프로젝트에서 빌드 이미지 프로세스가 갖는 주요 이점은 빌드 로그에 액세스할 수 있다는 것입니다. gcloud CLI 또는 Google Cloud Console을 사용하여 Cloud Logging을 통해 제공되는 로그에 연결할 수 있습니다.

gcloud

  1. gcloud functions deploy 명령어를 사용하여 함수를 배포합니다.

  2. 로그 URL은 터미널 창에 응답의 일부로 표시됩니다. 예를 들면 다음과 같습니다.

    Deploying function (may take a while - up to 2 minutes)...⠹
    **For Cloud Build Stackdriver Logs**, visit:
    https://console.cloud.google.com/logs/viewer?project=&advancedFilter=resource.type%
    3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2-
    380d50d4f5e8%0AlogName%3Dprojects%2F%
    2Flogs%2Fcloudbuild
    Deploying function (may take a while - up to 2 minutes)...done.
    

Google Cloud 콘솔

  1. Cloud Functions 개요 창에서 조사 중인 함수의 이름을 클릭합니다.
  2. 세부정보 탭을 클릭합니다.
  3. 일반 정보 창에서 컨테이너 빌드 로그 링크를 클릭하여 로그 탐색기 창을 엽니다.
  4. 행을 클릭하여 빌드 로그 항목의 세부정보를 봅니다. 파일과 연결된 오류 항목인 경우 이러한 세부정보에 파일의 이름, 줄, 열이 포함됩니다.

이미지 레지스트리

Cloud Functions(2세대)는 독점적으로 Artifact Registry를 사용하여 함수 소스 코드에서 빌드된 이미지를 저장합니다. 이미지는 REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts라는 저장소에 저장됩니다.

Cloud Functions(1세대)는 기본적으로 Artifact Registry를 사용합니다. Container Registry는 지원 중단됩니다.

Artifact Registry는 함수와 동일한 프로젝트에 있어야 합니다. 다음과 같이 Artifact Registry 기반 함수를 만들거나 업데이트할 수 있습니다.

gcloud

고객 관리 Artifact Registry의 경우 다음 명령어를 실행합니다.

gcloud functions deploy FUNCTION \
--docker-repository=REPOSITORY
[FLAGS...]

다음을 바꿉니다.

  • FUNCTION: 함수 이름입니다.
  • REPOSITORY: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY 형식의 정규화된 Artifact Registry 저장소 이름입니다.

Google 관리 Artifact Registry의 경우 다음을 사용합니다.

gcloud functions deploy FUNCTION \
--docker-registry=artifact-registry
[FLAGS...]

Google Cloud 콘솔

  1. Google Cloud 콘솔의 Cloud Functions 페이지로 이동합니다.
    Cloud Functions 페이지로 이동

  2. Artifact Registry를 사용하려는 함수의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 런타임, 빌드...를 클릭하여 고급 구성 옵션을 펼칩니다.

  5. 메뉴 바에서 보안 및 이미지 저장소를 클릭하여 보안 탭을 엽니다.

  6. 이미지 저장소에서 사용 중인 Artifact Registry 유형에 따라 다음 중 하나를 선택합니다.

    • 고객 관리 Artifact Registry 자체 Docker 저장소를 설정하는 경우 이 옵션을 사용하세요.
    • Google 관리 Artifact Registry. 직접 설정하는 대신 Google 관리 Docker 저장소를 사용하려면 이 옵션을 사용하세요.
  7. 고객 관리 Artifact Registry의 경우 Artifact Registry 드롭다운을 사용하여 원하는 Artifact Registry 저장소를 선택하거나 프롬프트를 따라 새로 만듭니다.

  8. 다음을 클릭합니다.

  9. 배포를 클릭합니다.

자세한 가격 책정 정보는 Cloud Functions 가격 책정을 참조하세요.

비공개 풀로 빌드 보호

npm 패키지와 같은 종속 항목을 함수에서 사용할 수 있도록 Cloud Build는 기본적으로 빌드 프로세스 중에 무제한 인터넷 액세스를 제공합니다. VPC 서비스 제어(VPC SC) 경계를 설정한 경우 경계 내부에 저장된 종속 항목으로만 빌드의 액세스를 제한하려면 Cloud Build 비공개 작업자 풀 기능을 사용하면 됩니다.

일반적으로 비공개 풀을 설정할 때는 다음 단계를 따릅니다.

  1. 비공개 작업자 풀을 만듭니다. 비공개 풀 만들기 및 관리를 참조하세요.
  2. VPC 서비스 제어 경계를 구성합니다. VPC 서비스 제어 사용을 참조하세요.

  3. 비공개 작업자 풀이 함수와 다른 프로젝트에 있는 경우 Cloud Functions 서비스 에이전트 서비스 계정(service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)에 cloudbuild.workerPoolUser 역할을 부여하여 Cloud Build 서비스가 작업자 풀에 액세스할 수 있도록 합니다.

    gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \
        --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
        --role roles/cloudbuild.workerPoolUser
    

    여기서 FUNCTION_PROJECT_NUMBER는 함수가 실행되는 프로젝트의 번호이고 PRIVATE_POOL_PROJECT_ID는 작업자 풀이 있는 프로젝트의 ID입니다. 자세한 내용은 비공개 풀에서 빌드 실행을 참조하세요.

  4. 비공개 풀을 사용하여 빌드할 함수를 배포합니다.

gcloud

gcloud functions deploy FUNCTION_NAME \
  --runtime RUNTIME \
  --build-worker-pool PRIVATE_POOL_NAME
  [FLAGS...]

여기서 FUNCTION_NAME은 함수의 이름이고 RUNTIME은 사용 중인 런타임이며 PRIVATE_POOL_NAME은 풀의 이름입니다.

지정된 비공개 풀의 사용을 중지하고 대신 기본 Cloud Build 풀을 사용하려면 다시 배포할 때 --clear-build-worker-pool 플래그를 사용합니다.

gcloud functions deploy FUNCTION_NAME \
  --runtime RUNTIME \
  --clear-build-worker-pool
  [FLAGS...]

여기서 FUNCTION_NAME은 함수의 이름이고 RUNTIME은 사용 중인 런타임입니다.

Google Cloud 콘솔

  1. Cloud Functions 개요 페이지에서 함수 만들기를 선택합니다.

  2. 런타임, 빌드... 섹션에서빌드 탭을 클릭하고 작업자 풀 빌드 텍스트 상자에 비공개 풀의 전체 리소스 이름을 입력합니다.

자세한 내용은 비공개 풀에서 빌드 실행을 참조하세요.