1단계: Management Console에서 원격 서비스(AWS Lambda function) 만들기

1단계: Management Console에서 원격 서비스(AWS Lambda function) 만들기

이 문서는 외부 함수의 원격 서비스로 사용할 AWS Lambda Function을 만드는 상세 지침을 설명해 드려요. 첫 번째 외부 함수를 만들 때 그대로 사용하거나 커스텀 Lambda Function의 출발점으로 사용할 수 있는 샘플 코드를 포함해요. Lambda 함수의 입출력 형식, 샘플 함수 선택, 함수 생성·테스트 절차를 단계별로 다뤄요.

출처: Snowflake SQL Reference

본문

이 문서는 외부 함수의 원격 서비스로 사용할 AWS Lambda Function을 만드는 상세 지침을 설명해요.

이 문서는 첫 번째 외부 함수를 만들 때 그대로 사용하거나 커스텀 Lambda Function의 출발점으로 사용할 수 있는 샘플 Lambda Function 코드를 포함해요.

이전 단계

AWS용 외부 함수 계획하기

소개

AWS에서 원격 서비스를 만드는 방법은 여러 가지가 있어요. 이 문서는 그중 원격 서비스로 사용할 Lambda Function을 만드는 한 가지 방법을 보여줘요.

이 튜토리얼은 둘 다 Python으로 작성된 두 개의 샘플 Lambda Function을 설명해요.

자세한 내용은 Snowflake Sample Functions(이 문서의 아래 부분)에서 제공돼요.

Lambda 함수 입출력 이해하기

Snowflake가 원격 서비스로 데이터를 보내고 받으려면, 원격 서비스가 JSON 형식으로 데이터를 받아들이고 반환해야 해요.

원격 서비스 입출력에 대한 플랫폼 독립적인 정보는 원격 서비스 입출력 데이터 형식 에 있어요.

이 섹션은 AWS Lambda Functions에 특화된 세부 사항을 제공해요.

JSON을 통한 언어 독립적인 입출력

이 섹션의 정보는 Snowflake 외부 함수의 원격 서비스로 사용되는 모든 Lambda Functions에 적용돼요. 외부 함수 입출력의 플랫폼별 정보는 아래 하위 섹션을 참조하세요.

AWS에서 HTTP 호환 서비스의 규칙은 HTTP 상태 코드도 함께 포함하는 JSON 객체 안에 본문(body)을 반환하는 거예요. AWS Lambda 함수의 일반적인 반환 값을 위한 JSON은 다음과 같아요:

{
"statusCode": <http_status_code>,
"body":
        {
            "data":
                  [
                      [ 0, <value> ],
                      [ 1, <value> ]
                      ...
                  ]
        }
}

JSON 입력의 구조는 앞의 것과 비슷하지만, 필요하지 않을 추가 key-value 쌍을 포함하고 statusCode는 제외해요.

Python 특화 Lambda 함수 입력

다음 내용은 이 튜토리얼의 샘플 Lambda Functions를 포함한 Snowflake 호환 Python 언어 Lambda Functions에 적용돼요. 이 정보는 입출력의 언어 독립적 규칙에 더해지는 내용이에요.

Snowflake 호환 Python 언어 Lambda Function은 eventcontext 두 파라미터를 받아요. 간단한 외부 함수는 보통 event 파라미터만 필요해요.

event 파라미터는 많은 하위 필드를 포함하며, 그중 하나가 body 예요. body는 사전(dictionary)을 포함하는 JSON 호환 문자열이에요.

사전에는 data 라는 키가 있고, data 에 해당하는 값은 배열이에요. 그 배열은 Snowflake가 전달한 행들을 포함해요.

각 행은 data 배열 안에 중첩된 배열로 표현돼요.

(AWS Lambda는 Snowflake가 보낸 HTTP POST 요청을 편리하게 처리하고, body를 추출해 event 파라미터 안에 전달하므로, Snowflake가 제공한 예제 함수는 전체 HTTP POST 요청을 파싱할 필요가 없어요.)

샘플 동기식 Lambda 함수event 파라미터를 읽는 코드를 보여줘요.

Lambda 함수 코드 선택하기

Snowflake 샘플 함수

Snowflake는 두 개의 샘플 함수를 제공해요:

  • 더 짧은 예제는 동기식(synchronous) 이에요. 외부 함수나 Lambda Functions가 처음이라면 Snowflake는 이 예제로 첫 번째 샘플 외부 함수를 만들기를 권장해요.

숙련된 사용자도 이것을 복사·수정해 커스텀 원격 서비스의 출발점으로 사용할 수 있어요.

코드는 샘플 동기식 Lambda Function 에 있어요.

이 샘플은 주로 커스터마이즈된 비동기 원격 서비스를 만들기 위한 샘플로 의도된 것이에요.

코드는 샘플 비동기 Lambda Function 에 있어요.

커스텀 Lambda 함수

처음부터 직접 Lambda Function을 작성하거나, 이 문서의 Lambda 함수 코드 선택하기에서 설명한 함수 중 하나를 출발점으로 사용할 수 있어요.

사용할 기존 원격 서비스가 있다면, 튜토리얼 이 단계의 대부분의 지침을 건너뛸 수 있어요. 대신 다음을 수행해요:

  1. 추적 워크시트의 Your AWS Account ID 필드에 AWS Account ID를 기록해요.
  2. 추적 워크시트의 Lambda Function Name 필드에 원격 서비스의 Lambda Function 이름을 기록해요.
  3. 2단계: AWS Management Console에서 프록시 서비스(Amazon API Gateway) 만들기 로 이동해요.

Lambda 함수 만들기

AWS Lambda Function을 만들려면 아래 단계를 따라요.

Note

이 단계들은 Snowflake가 제공하는 샘플 원격 서비스를 만드는 방법을 보여주지만, 자신만의 커스터마이즈된 원격 서비스를 만드는 모델로도 사용할 수 있어요. 커스텀 Lambda Function을 만든다면 아래 단계를 상황에 맞게 수정해요. (예: 원격 서비스 코드에 적절한 프로그래밍 언어 선택)

  1. 아직 로그인하지 않았다면 AWS Management Console에 로그인해요.

  2. Your AWS Account ID 라는 워크시트 필드에 AWS 계정 ID를 아직 기록하지 않았다면 지금 기록해요.

AWS 계정 ID를 찾아야 한다면 AWS 지침 을 따라요.

  1. Lambda 를 선택해요.

  2. Create function 을 선택해요.

  3. 함수 이름을 입력해요.

이 이름을 워크시트의 Lambda Function Name 필드에 기록해요.

  1. 사용할 프로그래밍 언어를 선택해요. Snowflake가 제공한 샘플 Python 함수 중 하나를 사용한다면 Python 3.10 을 선택해요.

  2. 이 함수를 위한 실행 역할(execution role)을 선택하거나 만들어요.

각각의 적절한 옵션을 선택해요. 보통 Create a new role with basic Lambda permissions 이에요.

(이 역할은 클라우드 계정 역할과도, Snowflake 역할과도 별개예요.)

  1. Create Function 버튼을 클릭해요.

  2. lambda_function 탭에서 함수 코드를 입력해요.

자신만의 함수를 아직 작성하지 않았다면, Snowflake가 제공하는 다음 예제를 사용할 수 있어요:

샘플 동기식 코드 또는

Tip

편집 창에 붙여 넣을 수 없다면, 함수의 파일 이름을 더블클릭해 편집을 활성화해 보세요.

  1. Deploy 버튼을 클릭해 함수를 배포해요.

Lambda 함수 테스트하기

Test 버튼 옆의 아래 화살표를 클릭하고 Configure test event 를 선택해요. Event name 필드에 test 라고 입력해요.

Snowflake가 제공한 샘플 동기식 Python 함수의 경우 다음 테스트 데이터를 사용해요 (기본 데이터를 아래 데이터로 바꿔요):

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

Create 를 클릭한 뒤 Test 를 클릭해요.

실행 결과는 다음과 비슷해야 해요:

{
  "statusCode": 200,
  "body": "{\"data\": [[0, [\"Echoing inputs:\", 43, \"page\"]], [1, [\"Echoing inputs:\", 42, \"life, the universe, and everything\"]]]}"
}

이제 외부 함수의 원격 서비스로 사용할 수 있는 AWS Lambda 함수가 생겼어요.

다음 단계

2단계: AWS Management Console에서 프록시 서비스(Amazon API Gateway) 만들기

더 알아보기 (Learn more)