1단계: Console에서 원격 서비스(Google Cloud Function) 만들기¶
이 항목에서는 외부 함수에 대한 원격 서비스로 사용할 Google Cloud Function을 만들기 위한 자세한 지침을 제공합니다.
이 항목의 내용:
이전 단계¶
Google Cloud Function 만들기¶
Google의 Cloud Function 만들기 지침 에 따라 함수를 만듭니다.
Snowflake에서 제공하는 샘플 Python 언어 함수를 사용하여 이 함수를 만드는 경우에는 Python Quickstart 를 선택하십시오. 그렇지 않으면 사용 중인 언어를 기준으로 적절한 QuickStart를 선택하십시오.
Google의 지침을 따를 때 다음을 수행해야 합니다.
함수의 트리거가 HTTP임을 지정합니다.
트리거 URL 을 추적 워크시트의
Cloud Function Trigger URL
필드에 복사합니다.Authentication 섹션에서 Require authentication 을 선택합니다.
GCP 지침에는 Allow unauthenticated invocations 를 선택하라고 되어 있습니다. Snowflake에서 제공하는 샘플 함수를 비롯한 샘플 함수에는 허용되지만, 대부분의 프로덕션 시스템에서는 인증을 요구해야 합니다.
Require HTTPS 를 아직 활성화하지 않은 경우에는 활성화하십시오.
Save 를 클릭합니다.
적절한 Runtime 을 선택합니다. Snowflake에서 제공하는 샘플 Python 함수를 만들 경우에는 Python 3.7 런타임을 선택하십시오.
중요
Runtime 값을 선택한 후 코드를 붙여넣습니다.
기본 코드를 Snowflake 샘플 코드나 자체 사용자 지정 코드로 바꿉니다. Snowflake 샘플 코드는 이 항목에 있는 샘플 동기 Google Cloud Function 에서 제공됩니다.
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)
데이터 타입에 대한 자세한 내용은 원격 서비스 입력 및 출력 데이터 타입 을 참조하십시오.