빌드 프로세스 개요

함수 소스 코드를 Cloud Run Functions에 배포하면 이 소스가 Cloud Storage 버킷에 저장됩니다. 그러면 Cloud Build가 컨테이너 이미지에 코드를 자동으로 빌드하고 해당 이미지를 이미지 레지스트리에 푸시합니다. Cloud Run Functions는 함수 실행을 위해 컨테이너를 실행해야 할 때 이 이미지에 액세스합니다. 함수에서 여전히 Container Registry를 사용하는 경우 최대한 빨리 Artifact Registry로 전환해야 합니다.

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

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

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

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

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

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

    • 기본 암호화를 사용하는 경우 이 버킷의 이름은 gcf-v2-sources-PROJECT_NUMBER-REGION입니다.
    • CMEK로 데이터를 보호하는 경우 버킷의 이름은 gcf-v2-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 Run Functions 개요 창에서 조사 중인 함수의 이름을 클릭합니다.
  2. 세부정보 탭을 클릭합니다.
  3. 일반 정보 창에서 컨테이너 빌드 로그 링크를 클릭하여 로그 탐색기 창을 엽니다.
  4. 행을 클릭하여 빌드 로그 항목의 세부정보를 봅니다. 파일과 연결된 오류 항목인 경우 이러한 세부정보에 파일의 이름, 줄, 열이 포함됩니다.

이미지 레지스트리

Cloud Run Functions는 Artifact Registry를 사용하여 함수 소스 코드에서 빌드된 이미지를 저장합니다. 이미지는 함수가 생성된 동일한 프로젝트에 있는 REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts라는 저장소에 저장됩니다.

자체 관리 Artifact Registry 저장소를 지정하려면 다음 명령어를 실행합니다.

gcloud

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

다음을 바꿉니다.

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

다른 프로젝트 또는 리전에 있는 Artifact Registry 저장소를 지정할 때는 추가 구성을 고려해야 할 수 있습니다.

IAM 구성:

  • 빌드 서비스 계정에 REPOSITORY 읽기 및 쓰기 액세스 권한이 승인되었는지 확인합니다.

네트워크 구성:

  • 현재 프로젝트 구성에서 대상 REPOSITORY에 도달할 수 있는지 확인합니다.

VPC 서비스 제어 구성:

  • 빌드 서비스 계정이 VPC-SC 경계 내의 대상 REPOSITORY에 도달할 수 있는지 확인합니다.

데이터 상주 제약조건:

  • 함수가 있는 리전과 다른 리전에서 REPOSITORY를 지정하면 리전 간에 데이터가 전송됩니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔의 Cloud Run 함수 페이지로 이동합니다.
    Cloud Run 함수 페이지로 이동

  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. 배포를 클릭합니다.

Container Registry를 사용하는 함수 식별

Container Registry를 사용하는 함수의 함수 설명에는 buildConfig.dockerRegistry 키가 있습니다. 다음과 같이 함수 설명을 검색할 수 있습니다.

gcloud

gcloud functions describe FUNCTION_NAME

FUNCTION_NAME을 함수의 이름으로 바꿉니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔의 Cloud Run 함수 페이지로 이동합니다.
    Cloud Run 함수 페이지로 이동

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

  3. 세부정보를 클릭합니다.

  4. EQUIVALENT REST를 클릭하여 전체 함수 세부정보를 확인합니다.

Cloud 애셋 인벤토리

Cloud Asset Inventory를 사용하여 전체 조직에서 Container Registry를 사용하는 함수를 쿼리할 수 있습니다.

  1. 애셋 보기에 관한 Cloud 애셋 인벤토리 가이드를 검토하세요.
  2. 다음 gcloud 명령어를 사용하여 CONTAINER_REGISTRY를 사용하는 함수를 쿼리합니다.
gcloud asset list \
  --content-type=resource \
  --asset-types=cloudfunctions.googleapis.com/Function
  --organization=ORGANIZATION_ID \
  --filter "resource.data.buildConfig.dockerRegistry='CONTAINER_REGISTRY'"

ORGANIZATION_ID를 조직의 리소스 ID로 바꿉니다.

Artifact Registry로 전환

저장소 설정을 변경하여 함수가 Artifact Registry에 이미지를 게시하도록 할 수 있습니다.

gcloud

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

Google Cloud 콘솔

  1. Google Cloud 콘솔의 Cloud Run 함수 페이지로 이동합니다.
    Cloud Run 함수 페이지로 이동

  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 Run Functions 가격 책정을 참조하세요.

비공개 풀로 빌드 보호

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

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

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

  3. 비공개 작업자 풀이 함수와 다른 프로젝트에 있는 경우 Cloud Run 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 Run Functions 개요 페이지에서 함수 만들기를 선택합니다.

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

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

커스텀 서비스 계정으로 빌드 보호

Cloud Run Functions는 소스 코드를 가져와 컨테이너화하기 위해 Cloud Build로 전송합니다. 컨테이너화된 함수는 Artifact Registry에 저장되고 서비스 형태로 Cloud Run에 배포됩니다. 기본적으로 Cloud Build는 빌드를 실행할 때 주 구성원 역할을 하는 서비스 계정을 할당합니다. 2024년 7월부터 조직의 새 프로젝트는 Compute Engine 기본 서비스 계정을 사용하여 빌드를 실행하는 주 구성원 역할을 합니다. 자세한 내용은 Cloud Build 기본 서비스 계정 변경을 참조하세요. 보안상의 이유로 Compute Engine 기본 서비스 계정에는 빌드를 실행하기에 충분한 권한이 없습니다.

2024년 7월 이전에 생성된 Google Cloud 프로젝트의 경우 Cloud Build에서 기존 Cloud Build 서비스 계정을 사용합니다. 이 서비스 계정은 사용자가 광범위한 사용 사례를 실행할 수 있도록 설계되어 프로젝트의 요구사항에 비해 지나치게 권한이 클 수 있습니다. 기존 프로젝트를 이 서비스 계정에서 옮기려면 다음 단계에 따라 함수 빌드 환경을 더욱 안전하게 보호할 수 있습니다.

  1. 기존 Cloud Build 서비스 계정이 빌드에 사용되지 않도록 차단합니다.
  2. 기본 Compute 서비스 계정이 빌드에 사용되지 않도록 합니다.
  3. 빌드에 사용할 적절한 범위의 권한으로 새 서비스 계정을 구성합니다.
  4. 빌드에 구성된 서비스 계정을 사용합니다.

기존 Cloud Build 서비스 계정이 빌드에 사용되지 않도록 차단

함수 빌드의 세부정보를 검사하여 프로젝트에서 기존 Cloud Build 서비스 계정을 사용하고 있는지 확인할 수 있습니다. 기본 빌드 서비스 계정의 형식은 다음과 같습니다.

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

조직 정책 제약조건 cloudbuild.useBuildServiceAccountNot Enforced로 설정하여 이 서비스 계정의 사용을 강제로 사용 중지할 수 있습니다. 또는 모든 역할 부여를 제거하면 Google Cloud 리소스에 액세스할 수 있는 기능이 제한됩니다.

기본 Compute 서비스 계정이 빌드에 사용되지 않도록 방지

기본 컴퓨팅 서비스 계정의 형식은 PROJECT_NUMBER-compute@developer.gserviceaccount.com입니다. 조직 정책 cloudbuild.useComputeServiceAccountNot Enforced로 설정하여 빌드에 사용되는 기본값으로 사용되지 않도록 할 수 있습니다. 또는 이 서비스 계정을 사용 중지하면 Google Cloud 리소스에 액세스하는 데 이 계정이 사용되지 않습니다.

함수 빌드용 서비스 계정 제공

함수를 배포할 때 함수 구성의 일부로 빌드 서비스 계정을 지정할 수 있습니다. 기존 Cloud Build 서비스 계정과 기본 Compute 서비스 계정이 빌드에 사용되지 않도록 차단된 경우 함수를 배포하려면 빌드 서비스 계정을 지정해야 합니다.

함수의 빌드 서비스 계정을 구성하고 사용하는 방법은 Cloud Build용 커스텀 서비스 계정을 참조하세요.