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

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

이 항목의 내용:

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" ]
  ]
}
Copy

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

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

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

테스트에 성공했다면 이제 외부 함수의 원격 서비스로 사용할 수 있는 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)
Copy

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