700개 이상의 실습 및 과정 이용하기

Cloud Run Functions: Qwik Start

실습 1시간 universal_currency_alt 크레딧 1개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
700개 이상의 실습 및 과정 이용하기

GSP1089

Google Cloud 사용자 주도형 실습 로고

개요

Cloud Run Functions는 Google Cloud에서 제공하는 Functions as a Service 제품입니다. 고급 기능 세트와 함께 제공되며 Cloud RunEventarc로 지원되므로 성능 및 확장성에 대한 고급 제어, 함수 런타임 및 90개 이상의 이벤트 소스 트리거에 대한 추가 제어를 사용할 수 있습니다.

이 실습에서는 HTTP 호출에 응답하고 Cloud Storage 이벤트 및 Cloud 감사 로그에 의해 트리거되는 Cloud Run Functions를 만듭니다. Cloud Run 함수의 여러 버전을 배포하고 새로운 설정도 살펴봅니다.

새로운 기능

이 새로운 Cloud Run Functions 버전은 Cloud Run, Cloud Build, Artifact Registry, Eventarc로 지원되는 향상된 FaaS 환경을 제공합니다.

향상된 인프라

  • 더 긴 요청 처리: Cloud Run Functions를 기본값인 5분보다 더 길게 실행하여 Cloud Storage 또는 BigQuery에서 대용량 데이터 스트림 처리와 같은 더 긴 요청 워크로드를 쉽게 실행할 수 있게 합니다. HTTP 함수의 경우 최대 60분입니다. 이벤트 기반 함수의 경우 현재 최대 10분입니다.
  • 대용량 인스턴스: Cloud Run Functions에서 최대 16GB의 RAM과 4개의 vCPU를 활용하여 대용량 인메모리, 컴퓨팅 집약적 워크로드, 병렬 워크로드를 지원할 수 있습니다.
  • 동시 실행: 단일 함수 인스턴스로 최대 1,000개의 동시 요청을 처리하여 콜드 스타트를 최소화하고 확장 시 지연 시간을 개선합니다.
  • 최소 인스턴스: 예열된 인스턴스를 제공하여 콜드 스타트를 줄이고 애플리케이션의 부트스트랩 시간이 애플리케이션 성능에 영향을 주지 않도록 합니다.
  • 트래픽 분할: 함수의 여러 버전을 지원하고, 여러 버전 간에 트래픽을 분할하며, 함수를 이전 버전으로 롤백합니다.

포괄적인 이벤트 지원 범위와 CloudEvents 지원

  • Eventarc 통합: 이제 Cloud Run Functions는 BigQuery, Cloud SQL, Cloud Storage 등의 Cloud 감사 로그를 사용하여 125개 이상의 이벤트 소스를 제공하는 Eventarc를 기본적으로 지원합니다. 물론 Cloud Run Functions는 Cloud Pub/Sub에 직접 게시하는 방법을 이용해 커스텀 소스의 이벤트를 계속 지원합니다.
  • CloudEvent 형식: 모든 이벤트 기반 함수는 소스와 관계없이 업계 표준 CloudEvents(cloudevents.io)를 준수하여 일관된 개발자 환경을 보장합니다. 페이로드는 cloudevent.data 페이로드로 구성된 구조화된 CloudEvent를 통해 전송되며 CloudEvent 표준을 구현합니다.

목표

이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.

  • HTTP 호출에 응답하는 함수를 작성합니다.
  • Cloud Storage 이벤트에 응답하는 함수를 작성합니다.
  • Cloud 감사 로그에 응답하는 함수를 작성합니다.
  • Cloud Run 함수의 여러 버전을 배포합니다.
  • 최소 인스턴스로 콜드 스타트를 제거합니다.
  • 동시 실행을 설정합니다.

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 창이 있습니다.

    • Google Cloud 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.

    {{{user_0.username | "Username"}}}

    실습 세부정보 창에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 세부정보 창에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

    중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  7. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의합니다.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
    • 무료 체험판을 신청하지 않습니다.

잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.

참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다. 탐색 메뉴 아이콘 및 검색창

Cloud Shell 활성화

Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.

  1. Google Cloud 콘솔 상단에서 Cloud Shell 활성화 Cloud Shell 활성화 아이콘를 클릭합니다.

  2. 다음 창을 클릭합니다.

    • Cloud Shell 정보 창을 통해 계속 진행합니다.
    • 사용자 인증 정보를 사용하여 Google Cloud API를 호출할 수 있도록 Cloud Shell을 승인합니다.

연결되면 사용자 인증이 이미 처리된 것이며 프로젝트가 학습자의 PROJECT_ID, (으)로 설정됩니다. 출력에 이 세션의 PROJECT_ID를 선언하는 줄이 포함됩니다.

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.

  1. (선택사항) 다음 명령어를 사용하여 활성 계정 이름 목록을 표시할 수 있습니다.
gcloud auth list
  1. 승인을 클릭합니다.

출력:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (선택사항) 다음 명령어를 사용하여 프로젝트 ID 목록을 표시할 수 있습니다.
gcloud config list project

출력:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 참고: gcloud 전체 문서는 Google Cloud에서 gcloud CLI 개요 가이드를 참고하세요.

작업 1. API 사용 설정

Cloud Run Functions를 만들기 전에 관련 API를 사용 설정해야 합니다.

  • 다음 명령어를 실행하여 필요한 모든 서비스를 사용 설정합니다.
gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ pubsub.googleapis.com

Cloud Shell IDE에서 Gemini Code Assist 사용 설정

Cloud Shell과 같은 통합 개발 환경(IDE)에서 Gemini Code Assist를 사용하여 코드에 대한 안내를 받거나 코드 문제를 해결할 수 있습니다. Gemini Code Assist를 사용하려면 먼저 사용 설정해야 합니다.

  1. Cloud Shell에서 다음 명령어를 사용하여 Gemini for Google Cloud API를 사용 설정합니다.
gcloud services enable cloudaicompanion.googleapis.com
  1. Cloud Shell 툴바에서 편집기 열기를 클릭합니다.
참고: Cloud Shell 편집기를 열려면 Cloud Shell 툴바에서 편집기 열기를 클릭합니다. 필요에 따라 편집기 열기 또는 터미널 열기를 클릭하여 Cloud Shell과 코드 편집기 간에 전환할 수 있습니다.
  1. 왼쪽 창에서 설정 아이콘을 클릭한 다음 설정 뷰에서 Gemini Code Assist를 검색합니다.

  2. Geminicodeassist: 사용 체크박스가 선택되어 있는지 확인하고 설정을 닫습니다.

  3. 화면 하단의 상태 표시줄에서 Cloud Code - 프로젝트 없음을 클릭합니다.

  4. 안내에 따라 플러그인을 승인합니다. 프로젝트가 자동으로 선택되지 않으면 Google Cloud 프로젝트 선택을 클릭하고 을(를) 선택합니다.

  5. 상태 표시줄의 Cloud Code 상태 메시지에 Google Cloud 프로젝트()가 표시되는지 확인합니다.

작업 2. HTTP 함수 만들기

첫 번째 함수에서는 HTTP 요청에 응답하는 인증된 Node.js 함수를 만들고, 10분 제한 시간을 사용하여 함수가 HTTP 요청에 응답하는 시간을 늘리는 방법을 보여줍니다.

생성

  1. Cloud Shell 터미널에서 다음 명령어를 실행하여 앱의 폴더와 파일을 만들고 폴더로 이동합니다.
mkdir ~/hello-http && cd $_ touch index.js && touch package.json
  1. Cloud Shell의 툴바에서 편집기 열기 버튼을 클릭합니다.

  2. HTTP 요청에 간단히 응답하는 hello-http/index.js 파일에 다음 코드를 추가합니다.

const functions = require('@google-cloud/functions-framework'); functions.http('helloWorld', (req, res) => { res.status(200).send('HTTP with Node.js in GCF 2nd gen!'); });
  1. hello-http/package.json 파일에 다음 콘텐츠를 추가하여 종속 항목을 지정합니다.
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
  1. 파일 탐색기에서 index.js 파일을 엽니다. 이 작업을 통해 Gemini Code Assist가 사용 설정되며, 편집기 오른쪽 상단에 Gemini Code Assist: 스마트 작업 아이콘이 표시됩니다.

  2. Gemini Code Assist: 스마트 작업 Gemini Code Assist: 스마트 작업 아이콘을 클릭하고 이 항목에 대한 설명을 선택합니다.

  3. Gemini Code Assist가 Explain this라는 프롬프트가 미리 채워진 채팅 창을 엽니다. Code Assist 채팅의 인라인 텍스트 상자에서 미리 채워진 프롬프트를 다음으로 바꾸고 보내기를 클릭합니다.

You are an expert Cloud Developer at Cymbal AI. A new team member is unfamiliar with this Cloud Function implementation. Explain the "index.js" and "package.json" files within the "hello-http" folder in detail, breaking down their key components used in the application code. For the suggested improvements, don't update these files.

index.jspackage.json 코드에 대한 자세한 설명이 Gemini Code Assist 채팅에 표시됩니다.

배포

  1. Cloud Shell 터미널에서 다음 명령어를 실행하여 함수를 배포하고 인증되지 않은 호출 팝업에 y를 입력합니다.
gcloud functions deploy nodejs-http-function \ --gen2 \ --runtime nodejs22 \ --entry-point helloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --timeout 600s \ --max-instances 1 참고: permissions error가 표시되는 경우 몇 분 정도 기다린 후 배포를 다시 시도하세요. API가 사용 설정되는 데 몇 분 정도 걸립니다.

이 단계에서 엄격하게 요구되는 사항은 아니지만 제한 시간 600초가 설정되어 있습니다. 이렇게 하면 함수가 HTTP 요청에 응답할 수 있는 시간이 늘어납니다.

  1. 함수가 배포되면 검색창에 Cloud Run Functions를 입력하고 결과를 클릭합니다. 그러면 Cloud Run 콘솔로 리디렉션됩니다. 함수가 배포되었는지 확인합니다.

함수가 배포되었는지 확인

테스트

  • 다음 명령어를 사용하여 함수를 테스트합니다.
gcloud functions call nodejs-http-function \ --gen2 --region {{{project_0.default_region|Region}}}

다음과 같은 메시지가 응답으로 표시됩니다.

HTTP with Node.js in GCF 2nd gen!

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. HTTP 함수 만들기

작업 3. Cloud Storage 함수 만들기

이 섹션에서는 Cloud Storage 버킷의 이벤트에 응답하는 Node.js 함수를 만듭니다.

설정

  • Cloud Storage 함수를 사용하려면 먼저 다음 코드를 실행하여 Cloud Storage 서비스 계정에 pubsub.publisher IAM 역할을 부여해야 합니다.
PROJECT_NUMBER=$(gcloud projects list --filter="project_id:{{{ project_0.project_id | PROJECT_ID }}}" --format='value(project_number)') SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER) gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/pubsub.publisher

생성

  1. 다음 명령어를 실행하여 앱의 폴더와 파일을 만들고 폴더로 이동합니다.
mkdir ~/hello-storage && cd $_ touch index.js && touch package.json
  1. Cloud Shell의 툴바에서 편집기 열기 버튼을 클릭합니다.

  2. Cloud Storage 이벤트에 간단히 응답하는 다음 코드를 hello-storage/index.js 파일에 추가합니다.

const functions = require('@google-cloud/functions-framework'); functions.cloudEvent('helloStorage', (cloudevent) => { console.log('Cloud Storage event with Node.js in GCF 2nd gen!'); console.log(cloudevent); });
  1. hello-storage/package.json 파일에 다음 내용을 추가하여 종속 항목을 지정합니다.
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
  1. 파일 탐색기에서 'hello-storage' 폴더에 있는 index.js 파일을 엽니다. 이 작업을 통해 Gemini Code Assist가 사용 설정되며, 편집기 오른쪽 상단에 Gemini Code Assist: 스마트 작업 아이콘이 표시됩니다.

  2. Gemini Code Assist: 스마트 작업 Gemini Code Assist: 스마트 작업 아이콘을 클릭하고 이 항목에 대한 설명을 선택합니다.

  3. Gemini Code Assist가 Explain this라는 프롬프트가 미리 채워진 채팅 창을 엽니다. Code Assist 채팅의 인라인 텍스트 상자에서 미리 채워진 프롬프트를 다음으로 바꾸고 보내기를 클릭합니다.

You are an expert Cloud Developer at Cymbal AI. A new team member is unfamiliar with this Cloud Function implementation. Explain the "index.js" and "package.json" files within the "hello-storage" folder in detail, breaking down their key components used in the application code. For the suggested improvements, don't update these files.

index.jspackage.json 코드에 대한 자세한 설명이 Gemini Code Assist 채팅에 표시됩니다.

배포

  1. 먼저 다음 명령어를 실행하여 이벤트 생성에 사용할 Cloud Storage 버킷을 만듭니다.
BUCKET="gs://gcf-gen2-storage-{{{ project_0.project_id | PROJECT_ID }}}" gsutil mb -l {{{project_0.default_region|Region}}} $BUCKET
  1. 다음 명령어를 실행하여 함수를 배포합니다.
gcloud functions deploy nodejs-storage-function \ --gen2 \ --runtime nodejs22 \ --entry-point helloStorage \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-bucket $BUCKET \ --trigger-location {{{project_0.default_region|Region}}} \ --max-instances 1 참고: 앞에서 했던 것처럼 permissions error가 표시되는 경우 몇 분 정도 기다린 후 배포를 다시 시도하세요. API가 사용 설정되는 데 몇 분 정도 걸릴 수 있습니다.
  1. 함수가 배포되면 Cloud Run 콘솔에 함수가 표시되는지 확인합니다.

두 함수

테스트

  1. 다음 명령어를 실행하여 버킷에 파일을 업로드해 함수를 테스트합니다.
echo "Hello World" > random.txt gsutil cp random.txt $BUCKET/random.txt
  1. 다음 명령어를 실행합니다. 수신된 CloudEvent가 로그에 표시되어야 합니다.
gcloud functions logs read nodejs-storage-function \ --region {{{project_0.default_region|Region}}} --gen2 --limit=100 --format "value(log)" 참고: 로그가 생성되는 데 1분 정도 걸릴 수 있습니다.

다음과 비슷한 출력이 표시됩니다.

출력:

} traceparent: '00-c74cb472d1e78f7225b6f617a31d9c08-96f0380bb62be2c1-01' }, etag: 'CKOx1L3wofoCEAE=' crc32c: 'R1jUOQ==', mediaLink: 'https://storage.googleapis.com/download/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt?generation=1663625646643363&alt=media', md5Hash: '5Z/5eUEET4XfUpfhwwLSYA==', size: '12', timeStorageClassUpdated: '2022-09-19T22:14:06.657Z', storageClass: 'STANDARD', updated: '2022-09-19T22:14:06.657Z', timeCreated: '2022-09-19T22:14:06.657Z', contentType: 'text/plain', metageneration: '1', generation: '1663625646643363', bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', name: 'random.txt', selfLink: 'https://www.googleapis.com/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt', id: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/random.txt/1663625646643363', kind: 'storage#object', data: { bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', time: '2022-09-19T22:14:06.657124Z', subject: 'objects/random.txt', type: 'google.cloud.storage.object.v1.finalized', specversion: '1.0', source: '//storage.googleapis.com/projects/_/buckets/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', id: '5693030851428996', { Cloud Storage event with Node.js in GCF 2nd gen!

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Cloud Storage 함수 만들기

작업 4. Cloud 감사 로그 함수 만들기

이 섹션에서는 Compute Engine VM 인스턴스가 생성될 때 Cloud 감사 로그 이벤트를 수신하는 Node.js 함수를 만듭니다. 이렇게 하면 새로 생성된 VM에 VM 생성자를 지정하는 라벨이 추가됩니다.

새로 생성된 Compute Engine VM 확인

VM이 생성되면 Compute Engine은 감사 로그 2개를 내보냅니다.

첫 번째 감사 로그는 VM 생성을 시작할 때 내보내며 다음과 같이 표시됩니다.

감사 로그 1

두 번째 감사 로그는 VM 생성 후에 내보내며 다음과 같이 표시됩니다.

감사 로그 2

first: truelast: true 값이 있는 operation 필드를 확인하세요. 두 번째 감사 로그에는 인스턴스에 라벨을 지정하는 데 필요한 모든 정보가 포함되어 있습니다. 따라서 last: true 플래그를 사용하여 Cloud Run Functions에서 감지해야 합니다.

설정

Cloud 감사 로그 함수를 사용하려면 Eventarc 감사 로그를 사용 설정해야 합니다. eventarc.eventReceiver 역할이 있는 서비스 계정도 사용해야 합니다.

  1. 탐색 메뉴에서 IAM 및 관리자 > 감사 로그로 이동합니다.
참고: resourcemanager.folders.getIamPolicy 권한 누락 경고는 무시해도 됩니다.
  1. Compute Engine API를 찾아 옆에 있는 체크박스를 클릭합니다. API를 찾을 수 없는 경우 다음 페이지에서 검색하세요.

  2. 오른쪽의 정보 창에서 관리자 읽기, 데이터 읽기, 데이터 쓰기 로그 유형의 체크박스를 선택한 다음 저장을 클릭합니다.

관리자 읽기, 데이터 읽기, 데이터 쓰기 확인

  1. 기본 Compute Engine 서비스 계정에 eventarc.eventReceiver IAM 역할을 부여합니다.
gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver

코드 가져오기

  1. 다음 코드를 실행하여 애플리케이션이 포함된 저장소를 클론합니다.
cd ~ git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
  1. Cloud Shell의 툴바에서 편집기 열기 버튼을 클릭합니다.

  2. 파일 탐색기에서 eventarc-samples > gce-vm-labeler > gcf > nodejs > index.js로 이동합니다.

  3. index.js 파일을 엽니다. 이 작업을 통해 Gemini Code Assist가 사용 설정되며, 편집기 오른쪽 상단에 Gemini Code Assist: 스마트 작업 아이콘이 표시됩니다.

  4. Gemini Code Assist: 스마트 작업 Gemini Code Assist: 스마트 작업 아이콘을 클릭하고 이 항목에 대한 설명을 선택합니다.

  5. Gemini Code Assist가 Explain this라는 프롬프트가 미리 채워진 채팅 창을 엽니다. Code Assist 채팅의 인라인 텍스트 상자에서 미리 채워진 프롬프트를 다음으로 바꾸고 보내기를 클릭합니다.

You are an expert Cloud Developer at Cymbal AI. A new team member is unfamiliar with this Cloud Function implementation. Explain the "index.js" file in detail, breaking down its key components used in the application code. For the suggested improvements, don't update the file.

index.js 파일에는 CloudEvent에 래핑된 감사 로그를 수신하는 애플리케이션 코드가 포함되어 있습니다. 이 코드는 Compute Engine VM 인스턴스 세부정보를 추출하고 VM 인스턴스에 라벨을 설정합니다. index.js를 직접 자세히 살펴보세요.

index.js 코드에 대한 자세한 설명이 Gemini Code Assist 채팅에 표시됩니다.

배포

  1. Cloud Shell 터미널에서 다음 명령어를 실행하여 앱 디렉터리로 이동합니다.
cd ~/eventarc-samples/gce-vm-labeler/gcf/nodejs
  1. 앞에서 했던 것처럼 다음 명령어를 실행하여 gcloud로 함수를 배포합니다. 함수가 --trigger-event-filters 플래그를 사용하여 Compute Engine 삽입 항목의 감사 로그를 필터링하는 방식을 확인해 보세요.
gcloud functions deploy gce-vm-labeler \ --gen2 \ --runtime nodejs22 \ --entry-point labelVmCreation \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-event-filters="type=google.cloud.audit.log.v1.written,serviceName=compute.googleapis.com,methodName=beta.compute.instances.insert" \ --trigger-location {{{project_0.default_region|Region}}} \ --max-instances 1 참고: 감사 로그 함수 트리거는 즉시 생성되지만 트리거가 완전히 작동하는 데 최대 10분이 걸릴 수 있습니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Cloud 감사 로그 함수 만들기

테스트

감사 로그 함수를 테스트하려면 Cloud 콘솔에서 Compute Engine VM을 만들어야 합니다. (gcloud로 VM을 만들 수도 있지만 감사 로그가 생성되지 않습니다.)

  1. 탐색 메뉴에서 Compute Engine > VM 인스턴스로 이동합니다.

  2. 인스턴스 만들기를 클릭하고 인스턴스 이름instance-1로, 영역(으)로 설정합니다.

  3. 나머지 모든 입력란은 기본값으로 두고 만들기를 클릭합니다.

VM 생성이 완료되면 Cloud 콘솔의 VM에 추가된 creator 라벨이 기본 정보 섹션에 표시됩니다.

생성자 라벨

  1. 다음 명령어를 사용하여 확인합니다.
gcloud compute instances describe instance-1 --zone {{{project_0.default_zone | "Zone"}}}

다음 예시와 비슷한 출력에 라벨이 표시됩니다.

출력 예시:

... labelFingerprint: ULU6pAy2C7s= labels: creator: student-02-19b599a0f901 ...

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. VM 인스턴스 만들기

  1. 다음 명령어를 실행하여 VM을 삭제합니다. 메시지가 표시되면 Y를 입력하여 확인합니다.
gcloud compute instances delete instance-1 --zone {{{project_0.default_zone | "Zone"}}}

작업 5. 여러 버전 배포

Cloud Run Functions는 다양한 함수 버전과 여러 버전 간 트래픽 분할 및 이전 버전으로의 함수 롤백을 지원합니다. 이 섹션에서는 Cloud Run 함수의 두 가지 버전을 배포합니다.

생성

  1. 다음 명령어를 실행하여 앱의 폴더와 파일을 만들고 폴더로 이동합니다.
mkdir ~/hello-world-colored && cd $_ touch main.py touch requirements.txt
  1. 색상 환경 변수를 읽고 해당 배경색으로 Hello World를 응답하는 Python 함수를 사용하여 hello-world-colored/main.py 파일에 다음 코드를 추가합니다.
import os color = os.environ.get('COLOR') def hello_world(request): return f'<body style="background-color:{color}"><h1>Hello World!</h1></body>'

배포

  1. 다음 명령어를 실행하여 주황색 배경으로 표시되는 첫 번째 함수 버전을 배포합니다.
COLOR=orange gcloud functions deploy hello-world-colored \ --gen2 \ --runtime python39 \ --entry-point hello_world \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR \ --max-instances 1

이때 브라우저에서 HTTP 트리거(이전에 실행한 배포 명령어의 URI 출력)를 확인하여 함수를 테스트하면 주황색 배경의 Hello World가 표시됩니다.

주황색 hello world

  1. Cloud Run Functions 페이지로 이동하면 Cloud Run 콘솔로 리디렉션됩니다. hello-world-colored 함수를 클릭합니다.

  2. 새 버전 수정 및 배포를 클릭합니다.

  3. 모든 항목을 기본값으로 두고 아래로 스크롤하여 변수 및 보안 비밀 탭을 선택합니다. 환경 변수 섹션에서 COLOR 환경 변수를 yellow로 업데이트합니다.

함수 버전

  1. 배포를 클릭합니다.

최신 버전이므로 함수를 테스트하면 노란색 배경의 Hello World가 표시됩니다.

노란색 hello world

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 여러 버전 배포

작업 6. 최소 인스턴스 설정

Cloud Run Functions에서는 요청 처리를 위해 웜 상태 및 준비 상태로 유지할 최소 함수 인스턴스 수를 지정할 수 있습니다. 콜드 스타트 수를 제한하는 데 유용한 기능입니다. 이 섹션에서는 초기화가 느린 함수를 배포합니다. 콜드 스타트 문제가 나타납니다. 문제가 확인되면 최소 인스턴스값을 1로 설정하여 콜드 스타트를 없애고 함수를 배포합니다.

생성

  1. 다음 명령어를 실행하여 앱의 폴더와 파일을 만들고 폴더로 이동합니다.
mkdir ~/min-instances && cd $_ touch main.go touch go.mod
  1. min-instances/main.go 파일에 다음 코드를 추가합니다. 이 Go 서비스에는 긴 초기화를 시뮬레이션하기 위해 10초 동안 절전 모드로 전환되는 init 함수가 있습니다. HTTP 호출에 응답하는 HelloWorld 함수도 있습니다.
package p import ( "fmt" "net/http" "time" ) func init() { time.Sleep(10 * time.Second) } func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Slow HTTP Go in GCF 2nd gen!") }
  1. 다음 코드를 min-instances/go.mod 파일에 추가합니다. 이렇게 하면 모듈 경로와 Go 언어 버전이 지정됩니다.
module example.com/mod go 1.23

배포

  1. 다음 명령어를 실행하여 최소 인스턴스의 기본값이 0인 첫 번째 함수 버전을 배포합니다.
gcloud functions deploy slow-function \ --gen2 \ --runtime go123 \ --entry-point HelloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --max-instances 4
  1. 다음 명령어를 사용하여 함수를 테스트합니다.
gcloud functions call slow-function \ --gen2 --region {{{project_0.default_region|Region}}}

첫 번째 호출에서 10초 지연(콜드 스타트)이 발생한 후 메시지가 표시됩니다. 후속 호출은 즉시 반환되어야 합니다.

Slow HTTP Go in GCF 2nd gen!

최소 인스턴스 설정

첫 번째 요청에서 콜드 스타트를 제거하기 위해 다음과 같이 --min-instances 플래그를 1로 설정하여 함수를 재배포합니다.

  1. 콘솔에서 Cloud Run 페이지로 이동하여 slow-function 서비스를 클릭합니다.

  2. 새 버전 수정 및 배포를 클릭합니다.

  3. 버전 확장 섹션에서 인스턴스 최소 개수1로, 인스턴스 최대 개수4로 설정합니다.

  4. 나머지 입력란은 기본값으로 두고 배포를 클릭합니다.

테스트

  • 다음 명령어를 실행하여 함수를 다시 테스트합니다.
gcloud functions call slow-function \ --gen2 --region {{{project_0.default_region|Region}}}

이제 첫 번째 요청에서 10초 지연이 발생하지 않을 것입니다. 최소 인스턴스 덕분에 오랜 시간 사용하지 않은 후 첫 번째 호출에서 발생하는 콜드 스타트 문제가 해결되었습니다. 자세한 내용은 최소 인스턴스 사용 문서를 참고하세요.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 최소 인스턴스 설정

작업 7. 동시 실행으로 함수 만들기

Cloud Run Functions에서 함수 인스턴스는 기본적으로 동시 요청 한 개를 처리하지만, 인스턴스에서 동시에 처리할 수 있는 동시 요청 수를 지정할 수도 있습니다. 병렬 요청마다 새 함수 인스턴스를 만들 필요가 없어 콜드 스타트를 방지하는 데도 도움이 됩니다.

이 섹션에서는 이전 단계에서 사용한 초기화가 느린 함수를 사용합니다. 요청 10개를 보내면 콜드 스타트 문제가 다시 발생합니다. 요청을 처리하기 위해 새 함수 인스턴스를 만들어야 하기 때문입니다.

콜드 스타트 문제를 해결하기 위해 동시 실행값이 100인 다른 함수를 배포합니다. 이제 요청 10개를 보내도 콜드 스타트 문제가 발생하지 않으며 단일 함수 인스턴스로 모든 요청을 처리할 수 있습니다.

동시 실행 없이 테스트

  1. 다음 설치 명령어를 사용하여 Cloud Shell에 hey를 설치합니다.
sudo apt install hey
  1. 다음 명령어를 실행하여 함수의 URL을 가져와 환경 변수로 저장합니다.
SLOW_URL=$(gcloud functions describe slow-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
  1. hey라는 오픈소스 벤치마킹 도구를 사용하여 느린 함수에 동시 요청 10개를 보냅니다.
hey -n 10 -c 10 $SLOW_URL

hey의 출력에서 일부 요청에 소요되는 시간이 길다는 점을 확인할 수 있습니다.

출력:

Summary: Total: 10.9053 secs Slowest: 10.9048 secs Fastest: 0.4439 secs Average: 9.7930 secs Requests/sec: 0.9170 Total data: 310 bytes Size/request: 31 bytes Response time histogram: 0.444 [1] |■■■■ 1.490 [0] | 2.536 [0] | 3.582 [0] | 4.628 [0] | 5.674 [0] | 6.720 [0] | 7.767 [0] | 8.813 [0] | 9.859 [0] | 10.905 [9] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

요청을 처리하기 위해 더 많은 함수 인스턴스가 생성되기 때문입니다. 함수의 활성 인스턴스 수를 확인하면 어느 시점에 인스턴스가 두 개 이상 생성되었고 그 결과 콜드 스타트 문제가 발생하는지를 알 수 있습니다.

활성 인스턴스 그래프

  1. 다음 명령어를 실행하여 함수를 삭제합니다. 메시지가 표시되면 Y를 입력하여 확인합니다.
gcloud run services delete slow-function --region {{{project_0.default_region | "Region"}}}

배포

  • 다음 명령어를 실행하여 이전 함수와 동일한 새 함수를 배포합니다. 배포 후에는 동시 실행 수를 늘립니다.
gcloud functions deploy slow-concurrent-function \ --gen2 \ --runtime go123 \ --entry-point HelloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --min-instances 1 \ --max-instances 4

동시 실행 설정

이제 함수의 기본 Cloud Run 서비스의 동시 실행 수를 100으로 설정합니다(최대 1,000까지 설정 가능). 이렇게 하면 단일 함수 인스턴스에서 최소 100개의 요청을 처리할 수 있습니다.

  1. 탐색 메뉴에서 Cloud Run으로 이동합니다.

  2. slow-concurrent-function 서비스를 클릭합니다.

  3. 새 버전 수정 및 배포를 클릭합니다.

  4. 리소스 섹션에서 CPU1로 설정합니다.

  5. 요청에서 인스턴스당 최대 동시 요청 수100으로 설정합니다.

  6. 버전 확장에서 인스턴스의 최대 개수4로 설정합니다.

  7. 나머지 입력란은 기본값으로 두고 배포를 클릭합니다.

동시 실행으로 테스트

  1. 함수가 배포되면 다음 명령어를 실행하여 새 함수의 URL을 가져와 환경 변수로 저장합니다.
SLOW_CONCURRENT_URL=$(gcloud functions describe slow-concurrent-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
  1. 이제 hey를 사용하여 동시 요청 10개를 보냅니다.
hey -n 10 -c 10 $SLOW_CONCURRENT_URL

hey의 출력에서 모든 요청이 빠르게 처리됨을 확인할 수 있습니다.

출력:

Summary: Total: 0.0652 secs Slowest: 0.0651 secs Fastest: 0.0619 secs Average: 0.0636 secs Requests/sec: 153.3751 Total data: 280 bytes Size/request: 28 bytes Response time histogram: 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.063 [0] | 0.063 [0] | 0.063 [0] | 0.063 [1] |■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.065 [0] | 0.065 [1] |■■■■■■■■■■■■■■■■■■■■

동시 실행 수가 증가하여 단일 함수 인스턴스에서 모든 요청을 처리할 수 있게 되었고 콜드 스타트 문제가 해결되었습니다. 자세한 내용은 동시 실행 문서를 참고하세요.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 동시 실행으로 함수 만들기

수고하셨습니다

이 실습에서는 HTTP 호출, Cloud Storage 이벤트, Cloud 감사 로그에 응답하는 여러 Cloud Run Functions를 배포했습니다. 그런 다음 함수를 실행하는 Cloud Run 서비스의 여러 버전을 배포하고, 동시 실행값을 설정하고, 최소 인스턴스로 콜드 스타트를 제거했습니다.

다음 단계/더 학습하기

Cloud Run Functions에 대한 자세한 내용은 다음을 참고하세요.

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2025년 8월 19일

실습 최종 테스트: 2025년 8월 19일

Copyright 2025 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.