Functions 에뮬레이터를 사용하여 함수 실행

Google Cloud CLI Functions 에뮬레이터를 사용하면 gcloud alpha functions local 명령어를 통해 Cloud Functions의 로컬 인스턴스를 관리할 수 있습니다. 이렇게 하면 Google Cloud 환경에 배포하기 전에 함수를 로컬 시스템에 배포하고 테스트할 수 있습니다.

이 기능은 1세대 및 2세대 함수 모두에서 작동합니다.

Functions 에뮬레이터는 Google Cloud 빌드팩을 사용하여 함수 코드를 로컬에서 실행 가능한 컨테이너 이미지에 패키징합니다. 그런 다음 Docker를 사용하여 로컬에서 이러한 이미지를 실행합니다.

설치 기본 요건

계속하기 전에 다음 항목이 설치되어 있는지 확인하세요.

로컬에서 함수 배포

Functions 에뮬레이터를 사용하여 함수를 로컬에서 배포하려면 gcloud functions 명령어를 사용합니다.

Node.js

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=nodejs20

Python

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=python312

Go

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=go121

자바

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=java17

C#

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=dotnet6

Ruby

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=ruby32

PHP

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=php82

다음과 같이 바꿉니다.

  • LOCAL_DEPLOYMENT_NAME: 함수를 로컬로 배포하는 이름입니다.
  • ENTRY_POINT: 함수의 진입점입니다.

다음 선택적 플래그를 사용하여 배포 명령어를 추가로 구성할 수 있습니다.

플래그 설명
--port 요청을 리슨할 포트입니다(기본값: 8080).
--builder 사용할 빌드팩 빌더의 이름입니다.

--builder 값은 기본적으로 함수 언어의 App Engine 빌더입니다. 예를 들어 Python의 경우 기본값은 gcr.io/gae-runtimes/buildpacks/google-gae-22/python/builder입니다.

gcloud alpha 명령어를 처음 사용하면 gcloud alpha 명령어 집합을 설치하라는 메시지가 gcloud 명령어에 표시됩니다.

로컬 함수 호출

데이터 없이 로컬 함수를 호출하려면 다음 명령어를 사용합니다.

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME

LOCAL_DEPLOYMENT_NAME을 함수를 로컬에 배포하려는 이름으로 바꿉니다.

로컬 함수 호출에 데이터를 포함하려면 함수 유형과 일치하는 탭을 선택합니다.

HTTP 함수

다음과 같이 로컬 HTTP 함수를 호출합니다.

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
    --data='{"message": "MESSAGE"}'

다음과 같이 바꿉니다.

  • LOCAL_DEPLOYMENT_NAME: 함수를 로컬로 배포할 이름입니다.
  • ENTRY_POINT: 함수의 진입점입니다.
  • MESSAGE: HTTP 요청의 본문으로 전달할 텍스트 문자열입니다.

CloudEvent 함수

로컬 CloudEvent 함수를 호출하려면 트리거 이벤트를 설명하는 CloudEvent JSON 객체를 제공해야 합니다.

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
    --cloud-event="CLOUD_EVENT_JSON"

다음과 같이 바꿉니다.

  • LOCAL_DEPLOYMENT_NAME: 함수를 로컬로 배포할 이름입니다.
  • ENTRY_POINT: 함수의 진입점입니다.
  • CLOUD_EVENT_JSON: 트리거 이벤트를 설명하는 구조화된 콘텐츠 모드의 JSON 인코딩 문자열입니다. 자세한 내용과 예시는 CloudEvents - JSON 이벤트 형식을 참조하세요.

다음은 명령줄 예시입니다.

gcloud alpha functions local call my-function --cloud-event='{
 "specversion" : "1.0",
  "type" : "com.github.pull.create",
  "source" : "https://github.com/cloudevents/spec/pull",
  "subject" : "123",
  "id" : "ce",
  "time" : "2021-01-27T18:30:00Z", "data" : "{\n \"subscription\": \"projects\/test-project\/subscriptions\/my-subscription\",\n \"message\": {\n \"attributes\": {\n \"attr1\":\"attr1-value\"\n },\n \"data\": \"d29ybGQ=\",\n \"messageId\": \"message-id\",\n \"publishTime\":\"2021-02-05T04:06:14.109Z\",\n \"orderingKey\": \"ordering-key\"\n }\n}"
  }'

CloudEvents에 JSON 형식을 정의하는 방법에 대한 자세한 내용은 CloudEvent 사양을 참조하세요.

로컬 함수 배포 삭제

다음 명령어를 사용하여 로컬 함수 배포를 삭제합니다.

gcloud alpha functions local delete LOCAL_DEPLOYMENT_NAME

LOCAL_DEPLOYMENT_NAME을 함수를 로컬에 배포할 이름으로 바꿉니다.

이 명령어는 함수 배포를 취소하지만 함수 코드는 삭제하지 않습니다.

다음 단계