함수 빌드

Cloud Functions용으로 작성된 함수는 Google Cloud의 빌드팩을 사용하여 빌드할 수 있습니다.

이 페이지에서는 Cloud Run에 배포할 함수를 빌드하는 두 가지 방법을 보여줍니다.

  • pack CLI 사용
  • Cloud Build를 원격 빌드 시스템으로 사용

함수 진입점

빌드팩으로 함수를 빌드하려면 다음 단계를 따르세요.

  • 함수 프레임워크 라이브러리를 포함합니다.

  • GOOGLE_FUNCTION_TARGET 환경 변수를 진입점으로 사용하는 함수 이름으로 설정합니다. 소스 코드와 동일한 폴더에 project.toml을 포함하여 이를 실행할 수 있습니다. project.toml 파일은 다음과 같이 구성되어야 합니다.

[[build.env]]
    name = "GOOGLE_FUNCTION_TARGET"
    value =  "ENTRY_POINT"

ENTRY_POINT를 함수 메서드로 바꿉니다.

Cloud Functions에서 환경 변수를 사용하는 방법에 대한 자세한 내용은 Cloud Functions 서비스 구성을 참조하세요.

빌더

함수는 Google Cloud의 빌드팩에 따라 유지되고 게시된 기본 이미지를 기반으로 빌드됩니다.

빌더는 빌드팩과 운영체제 패키지(스택이라고도 함)로 구성된 이미지입니다. 빌더는 함수의 소스 코드를 실행 중인 컨테이너로 변환하는 데 사용됩니다.

지원되는 Google Cloud의 빌드팩 빌더 목록에서 선택할 수 있습니다.

pack으로 빌드

은 빌드팩 사용을 지원하기 위해 CNB 프로젝트에서 유지관리하는 CLI 도구입니다. pack CLI를 사용하여 컨테이너 이미지에 함수를 로컬로 빌드합니다.

시작하기 전에

  1. Docker Community Edition(CE)을 워크스테이션에 설치합니다. Docker는 pack에서 OCI 이미지 빌더로 사용됩니다.
  2. Pack CLI를 설치합니다.
  3. Git 소스 제어 도구를 설치하여 GitHub에서 샘플 애플리케이션을 가져옵니다.

로컬에서 함수 빌드

pack build 명령어를 사용하고 기본 빌더 --builder=gcr.io/buildpacks/builder를 지정하여 컨테이너 이미지를 로컬에서 빌드합니다.

pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME

IMAGE_NAME을 컨테이너 이미지 이름으로 바꿉니다.

빌드 및 실행 이미지를 확장하여 컨테이너 이미지를 맞춤설정할 수도 있습니다.

로컬에서 샘플 함수 빌드

다음 예시는 로컬에서 샘플을 빌드하는 방법을 보여줍니다.

  1. 샘플 저장소를 로컬 머신에 클론합니다.
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. 애플리케이션 샘플 코드가 포함된 디렉터리로 변경합니다.

    Go

    cd buildpack-samples/sample-functions-framework-go

    자바

    cd buildpack-samples/sample-functions-framework-java-mvn

    Node.js

    cd buildpack-samples/sample-functions-framework-node

    Python

    cd buildpack-samples/sample-functions-framework-python

    Ruby

    cd buildpack-samples/sample-functions-framework-ruby
  3. pack을 사용하여 샘플 함수를 빌드합니다.

    Go

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-go

    자바

    pack build --builder gcr.io/buildpacks/builder:v1 sample-functions-java-mvn

    Node.js

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-node

    Python

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-python

    Ruby

    pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-ruby
  4. docker를 사용하여 이미지를 실행합니다.

    Go

    docker run -p8080:8080 sample-functions-framework-go

    자바

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-java-mvn

    Node.js

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-node

    Python

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-python

    Ruby

    docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-ruby
  5. localhost:8080으로 이동하여 실행 중인 함수로 이동합니다.

원격 빌드 시스템으로 빌드

Cloud Build를 사용하여 컨테이너 이미지에 함수를 빌드하고, Artifact Registry를 컨테이너 저장소로 사용하여 각 이미지를 저장하고 배포합니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build and Artifact Registry APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Build and Artifact Registry APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Google Cloud 프로젝트에 컨테이너 이미지 저장소에 대한 액세스 권한이 있는지 확인합니다.

    Artifact Registry의 Docker 저장소에 대한 액세스를 구성하려면 다음 단계를 따르세요.

    1. Google Cloud 프로젝트와 동일한 위치에 새 Docker 저장소를 만듭니다.
      gcloud artifacts repositories create REPO_NAME \
      --repository-format=docker \
      --location=REGION --description="DESCRIPTION"
      
      다음과 같이 바꿉니다.
      • REPO_NAME을 Docker 저장소에 선택한 이름으로 바꿉니다.
      • REGION을 Google Cloud 프로젝트 내 또는 그 위치와 가장 가까운 위치로 바꿉니다.
      • DESCRIPTION을 원하는 설명으로 바꿉니다.

      예를 들어 'Docker 저장소' 설명과 함께 us-west2docker 저장소를 만들려면 다음 명령어를 실행합니다.

      gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \
      --location=us-west2 --description="Docker repository"
      
    2. 저장소가 만들어졌는지 확인합니다.
      gcloud artifacts repositories list
      

      목록에 Docker 저장소에 대해 선택한 이름이 표시됩니다.

원격으로 함수 빌드

gcloud builds submit 명령어를 사용하여 컨테이너 이미지를 빌드하고 저장소에 업로드합니다.

명령어 자체에서 컨테이너 이미지를 지정하거나 구성 파일을 사용하는 방식을 선택할 수 있습니다.

명령어로 빌드

구성 파일 없이 빌드하려면 image 플래그를 지정합니다.

gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

다음과 같이 바꿉니다.

  • LOCATION을 컨테이너 저장소의 리전 이름으로 바꿉니다(예: us-west2).
  • PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.
  • REPO_NAME을 Docker 저장소의 이름으로 바꿉니다.
  • IMAGE_NAME을 컨테이너 이미지 이름으로 바꿉니다.

예:

gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo

구성 파일로 빌드

구성 파일을 사용하여 이미지 저장소 구성 세부정보를 정의해서 빌드 명령어를 간소화할 수 있습니다. 구성 파일에는 YAML 파일 형식이 사용되며 pack CLI를 사용하는 빌드 단계가 포함되어야 합니다.

  1. 컨테이너 이미지 저장소의 URI가 포함된 cloudbuild.yaml이라는 YAML 파일을 만듭니다.

    options:
      logging: CLOUD_LOGGING_ONLY
      pool: {}
    projectId: PROJECT_ID
    steps:
    - name: gcr.io/k8s-skaffold/pack
      entrypoint: pack
      args:
      - build
      - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
      - --builder
      - gcr.io/buildpacks/builder:latest
      - --network
      - cloudbuild
    

    다음과 같이 바꿉니다.

    • LOCATION을 컨테이너 저장소의 리전 이름으로 바꿉니다. 예: us-west2
    • PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.
    • REPO_NAME을 Docker 저장소의 이름으로 바꿉니다.
    • IMAGE_NAME을 컨테이너 이미지 이름으로 바꿉니다.
  2. 애플리케이션을 빌드합니다.

    cloudbuild.yaml이라는 구성 파일을 만들었으면 다음 명령어를 실행할 수 있습니다.

    gcloud builds submit .
    

예시: 원격으로 샘플 함수 빌드

다음 예시는 샘플을 원격으로 빌드한 후 Artifact Registry에서 컨테이너 이미지가 저장소에 푸시되었는지 확인하는 방법을 보여줍니다.

  1. 샘플 저장소를 로컬 머신에 클론합니다.
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. 애플리케이션 샘플 코드가 포함된 디렉터리로 변경합니다.

    Go

    cd buildpack-samples/sample-functions-framework-go

    자바

    cd buildpack-samples/sample-functions-framework-java-mvn

    Node.js

    cd buildpack-samples/sample-functions-framework-node

    Python

    cd buildpack-samples/sample-functions-framework-python

    Ruby

    cd buildpack-samples/sample-functions-framework-ruby
  3. gcloud를 사용하여 애플리케이션 소스 코드를 Cloud Build에 제출합니다.

    Go

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-go

    자바

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-gradle

    Node.js

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-node

    Python

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-python

    Ruby

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-ruby

    다음과 같이 바꿉니다.

    • LOCATION을 컨테이너 저장소의 리전 이름으로 바꿉니다. 예를 들면 us-west2-docker.pkg.dev입니다.
    • PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.
    • REPO_NAME을 Docker 저장소의 이름으로 바꿉니다.

  4. 샘플 함수가 성공적으로 REPO_NAME에 게시되었는지 확인합니다.
    gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME

    다음과 같이 바꿉니다.

    • LOCATION을 컨테이너 저장소의 리전 이름으로 바꿉니다(예: us-west2).
    • PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.
    • REPO_NAME을 Docker 저장소의 이름으로 바꿉니다.

다음 단계

  • 컨테이너가 빌드된 후 Cloud Run에 배포하기 전에 로컬에서 테스트할 수 있습니다. 자세한 내용은 Cloud Run 서비스를 로컬에서 테스트를 참조하세요.
  • Cloud Run의 컨테이너 주요 요구사항과 동작을 이해하려면 컨테이너 계약을 참조하세요.
  • 빌드된 컨테이너를 Cloud Run에 배포하려면 서비스 배포를 따르세요.
  • Cloud Build 트리거를 사용하여 Cloud Run 서비스의 빌드 및 배포를 자동화하려면 지속적 배포 설정을 참조하세요.
  • 자바 애플리케이션을 위한 최적의 컨테이너 빌드를 수행하려면 Jib로 자바 컨테이너 빌드를 참조하세요.