로컬 함수 호출

설정

이 문서에서는 사용자가 Functions 프레임워크 또는 Buildpack을 사용하여 localhost에서 로컬 실행 함수를 설정했다고 가정합니다. 또한 로컬 머신에 curl 도구를 설치했다고 가정합니다.

로컬 함수에 요청 보내기

로컬 제공 프로세스를 통해 라우팅된 HTTP 요청을 보내 로컬에서 실행되는 함수를 트리거할 수 있습니다.

함수 실행을 시작할 때 표시된 URL을 확인하여 함수가 로컬에서 실행되는 위치를 확인합니다. 기본적으로 함수는 localhost:8080에서 호스팅됩니다.

HTTP 함수

개발 환경에서 HTTP 함수를 테스트하면 일반적으로 localhost:8080에서 요청을 리슨합니다. 이 인터페이스는 함수가 실행 중인 머신이나 VM에서만 액세스할 수 있습니다. 다른 시스템에서 보낸 요청은 도달할 수 없습니다. 이러한 이유로 함수가 실행 중인 동일한 시스템에서 HTTP 요청을 실행해야 합니다. 다음 예시에서 함수가 8080 이외의 포트에서 리슨하는 경우 예시의 8080을 함수의 포트 번호로 바꿉니다.

Cloud Shell로 HTTP 함수 테스트

Cloud Shell을 사용하여 함수를 빌드하고 테스트하는 경우 Cloud Shell 터미널 창에서 로컬로 함수를 시작한 후 다음과 같이 브라우저나 curl 인스턴스에서 HTTP 트리거 요청을 실행합니다.

브라우저

Cloud Shell 툴바에서 웹 미리보기 버튼 아이콘을 클릭하고 포트 8080 또는 포트 변경을 선택하여 다른 포트를 선택합니다. 그러면 올바른 시스템에서 브라우저 창이 열리고 표시된 포트에 GET 요청이 실행됩니다.

Curl

HTTP 요청 형식을 제어하거나 서식이 없는 응답을 보려면 curl을 사용합니다.

  1. Cloud Shell 메뉴 바에서 + 아이콘을 클릭하여 함수가 실행되는 동일한 시스템에서 새 터미널 창을 엽니다.
  2. 해당 창에서 curl 명령어를 실행하여 함수를 트리거합니다. 예를 들면 다음과 같습니다.

    curl localhost:8080
    

데스크톱 서버에서 HTTP 함수 테스트

로컬 데스크톱 시스템에서 함수를 빌드하고 실행하는 경우 먼저 함수를 로컬에서 시작한 후 다음과 같이 브라우저나 curl 인스턴스에서 HTTP 트리거 요청을 실행합니다.

브라우저

새 브라우저 창이나 탭을 열고 브라우저 주소 표시줄에 http://localhost:8080을 입력합니다. 그러면 데스크톱 서버에서 localhost:8080에 대한 브라우저 창이 열리고 함수가 트리거됩니다.

Curl

로컬 데스크톱에서 새 터미널 창을 연 다음 해당 창에서 curl 명령어를 실행하여 함수를 트리거합니다. 예를 들면 다음과 같습니다.

 curl localhost:8080

이렇게 하면 지정된 curl 명령어가 실행되어 함수를 트리거하고 형식이 지정되지 않은 응답을 표시합니다.

CloudEvent 함수

curl을 사용하여 샘플 이벤트를 CloudEvent 함수로 보낼 수 있습니다. 다음 curl 요청은 localhost:8080에서 실행되는 CloudEvent 함수에 Cloud Pub/SubCloud Storage 샘플 이벤트를 전송하는 방법을 보여줍니다.

Pub/Sub

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.pubsub.topic.v1.messagePublished" \
  -H "ce-source: //pubsub.googleapis.com/projects/MY-PROJECT/topics/MY-TOPIC" \
  -d '{
        "message": {
          "data": "d29ybGQ=",
          "attributes": {
             "attr1":"attr1-value"
          }
        },
        "subscription": "projects/MY-PROJECT/subscriptions/MY-SUB"
      }'
    

스토리지

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.storage.object.v1.finalized" \
  -H "ce-source: //storage.googleapis.com/projects/_/buckets/MY-BUCKET-NAME" \
  -H "ce-subject: objects/MY_FILE.txt" \
  -d '{
        "bucket": "MY_BUCKET",
        "contentType": "text/plain",
        "kind": "storage#object",
        "md5Hash": "...",
        "metageneration": "1",
        "name": "MY_FILE.txt",
        "size": "352",
        "storageClass": "MULTI_REGIONAL",
        "timeCreated": "2020-04-23T07:38:57.230Z",
        "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
        "updated": "2020-04-23T07:38:57.230Z"
      }'
    

백그라운드 함수

curl을 사용하여 샘플 이벤트를 백그라운드 함수로 보낼 수 있습니다. 다음 curl 요청은 localhost:8080에서 실행되는 백그라운드 함수에 Cloud Pub/SubCloud Storage 샘플 이벤트를 전송하는 방법을 보여줍니다.

Pub/Sub

# 'world' base64-encoded is 'd29ybGQ='
curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId":"1144231683168617",
          "timestamp":"2020-05-06T07:33:34.556Z",
          "eventType":"google.pubsub.topic.publish",
          "resource":{
            "service":"pubsub.googleapis.com",
            "name":"projects/sample-project/topics/gcf-test",
            "type":"type.googleapis.com/google.pubsub.v1.PubsubMessage"
          }
        },
        "data": {
          "@type": "type.googleapis.com/google.pubsub.v1.PubsubMessage",
          "attributes": {
             "attr1":"attr1-value"
          },
          "data": "d29ybGQ="
        }
      }'
    

스토리지

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId": "1147091835525187",
          "timestamp": "2020-04-23T07:38:57.772Z",
          "eventType": "google.storage.object.finalize",
          "resource": {
             "service": "storage.googleapis.com",
             "name": "projects/_/buckets/MY_BUCKET/MY_FILE.txt",
             "type": "storage#object"
          }
        },
        "data": {
          "bucket": "MY_BUCKET",
          "contentType": "text/plain",
          "kind": "storage#object",
          "md5Hash": "...",
          "metageneration": "1",
          "name": "MY_FILE.txt",
          "size": "352",
          "storageClass": "MULTI_REGIONAL",
          "timeCreated": "2020-04-23T07:38:57.230Z",
          "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
          "updated": "2020-04-23T07:38:57.230Z"
        }
      }'