1단계: Console에서 원격 서비스(Google Cloud Function) 만들기

이 항목에서는 외부 함수에 대한 원격 서비스로 사용할 Google Cloud Function을 만들기 위한 자세한 지침을 제공합니다.

이전 단계

GCP용 외부 함수 계획하기

Google Cloud Function 만들기

Google의 Cloud Function 만들기 지침 에 따라 함수를 만듭니다.

Snowflake에서 제공하는 샘플 Python 언어 함수를 사용하여 이 함수를 만드는 경우에는 Python Quickstart 를 선택하십시오. 그렇지 않으면 사용 중인 언어를 기준으로 적절한 QuickStart를 선택하십시오.

Google의 지침을 따를 때 다음을 수행해야 합니다.

  1. 함수의 트리거가 HTTP임을 지정합니다.

  2. 트리거 URL 을 추적 워크시트의 Cloud Function Trigger URL 필드에 복사합니다.

  3. Authentication 섹션에서 Require authentication 을 선택합니다.

    GCP 지침에는 Allow unauthenticated invocations 를 선택하라고 되어 있습니다. Snowflake에서 제공하는 샘플 함수를 비롯한 샘플 함수에는 허용되지만, 대부분의 프로덕션 시스템에서는 인증을 요구해야 합니다.

  4. Require HTTPS 를 아직 활성화하지 않은 경우에는 활성화하십시오.

  5. Save 를 클릭합니다.

  6. 적절한 Runtime 을 선택합니다. Snowflake에서 제공하는 샘플 Python 함수를 만들 경우에는 Python 3.7 런타임을 선택하십시오.

    중요

    Runtime 값을 선택한 후 코드를 붙여넣습니다.

  7. 기본 코드를 Snowflake 샘플 코드나 자체 사용자 지정 코드로 바꿉니다. Snowflake 샘플 코드는 이 항목에 있는 샘플 동기 Google Cloud Function 에서 제공됩니다.

  8. Entry point 가 함수의 이름(이 경우 echo)과 일치하는지 확인하십시오.

Google Cloud Function 테스트하기

Google Cloud Function 만들기를 마친 후 콘솔의 Testing 탭을 사용해 함수를 호출하여 예상대로 작동하는지 확인합니다.

Snowflake에서 제공하는 샘플 Python 함수의 경우 다음 테스트 데이터를 사용합니다(Testing 탭의 모든 기본 데이터를 아래 데이터로 바꾸기).

{ "data":
  [
    [ 0, 43, "page" ],
    [ 1, 42, "life, the universe, and everything" ]
  ]
}

실행 결과는 다음과 유사해야 합니다.

{"data":
  [
    [0, [43, "page"] ],
    [1, [42, "life, the universe, and everything"] ]
  ]
}

결과가 위에 표시된 예와 다른 형식으로 표시될 수 있습니다.

테스트에 성공했다면 이제 외부 함수의 원격 서비스로 사용할 수 있는 Google Cloud Function이 생겼습니다.

샘플 동기 Google Cloud Function

이 샘플 코드는 입력 매개 변수 값을 단일 목록(배열)으로 결합하고 그 목록을 SQL 형식 VARIANT의 단일 값으로 반환합니다. 코드는 Python 3.7로 작성되었습니다.

이 함수는 Snowflake가 보내고 읽는 것과 똑같은 형식(JSON)의 데이터를 받고 반환합니다.

import json

HTTP_SUCCESS = 200
HTTP_FAILURE = 400

def echo(request):
    try:
        # The list of rows to return.
        return_value = []

        payload = request.get_json()
        rows = payload["data"]

        # For each input row
        for row in rows:
            # Include the row number.
            row_number = row[0]
            # Combine the value(s) in the row into a Python list that will be treated as an SQL VARIANT.
            row_value = row[1:]
            row_to_return = [row_number, row_value]
            return_value.append(row_to_return)

        json_compatible_string_to_return = json.dumps( { "data" : return_value } )
        return (json_compatible_string_to_return, HTTP_SUCCESS)

    except:
        return(request.data, HTTP_FAILURE)

데이터 타입에 대한 자세한 내용은 원격 서비스 입력 및 출력 데이터 타입 을 참조하십시오.

다음 단계

2단계: Console에서 프록시 서비스(Google Cloud API Gateway) 만들기