1단계: 콘솔에서 원격 서비스(Google Cloud Function) 만들기
1단계: 콘솔에서 원격 서비스(Google Cloud Function) 만들기 (Step 1: Create the remote service)
외부 함수의 원격 서비스(remote service)로 사용할 Google Cloud Function을 만드는 상세 지침을 제공하는 문서예요. 이 단계를 끝내면 외부 함수가 실제로 실행할 코드가 준비되는 셈이죠.
본문
이전 단계
GCP용 외부 함수 계획하기 (Planning an external function for GCP)
Google Cloud Function 만들기 (Create the Google Cloud Function)
Google의 Cloud Function 만들기 지침을 따라 함수를 만드세요. Snowflake가 제공하는 샘플 Python 함수로 만들고 있다면 Python Quickstart를 선택하고, 그 외에는 사용하는 언어에 맞는 Quickstart를 선택하세요.
Google의 지침을 따르면서 다음 사항을 꼭 확인하세요:
- 함수의 트리거(trigger)가 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 샘플 코드는 이 문서의 "Sample synchronous Google Cloud Function" 절에 제공돼 있어요.
- Entry point가 함수 이름(이 경우
echo)과 일치하는지 확인하세요.
Google Cloud Function 테스트하기 (Test the 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 (Sample synchronous 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)
데이터 형식에 대한 자세한 내용은 원격 서비스 입출력 데이터 형식(Remote Service Input and Output Data Formats) 문서를 참고하세요.
다음 단계
2단계: 콘솔에서 프록시 서비스(Google Cloud API Gateway)를 만듭니다.
더 알아보기 (Learn more)
- 2단계: 프록시 서비스 만들기 (external-functions-creating-gcp-ui-proxy-service)
- GCP용 외부 함수 만들기 (external-functions-creating-gcp-ui)
- 원격 서비스 입출력 데이터 형식 (external-functions-data-format)
- GCP용 외부 함수 계획하기 (external-functions-creating-gcp-planning)