AWS용 외부 함수 계획하기
AWS용 외부 함수 계획하기 (Planning an External Function for AWS)
이 문서는 AWS Management Console 또는 Snowflake가 제공하는 AWS CloudFormation 템플릿을 사용해 AWS용 외부 함수를 만들기 전에 준비해야 할 사항을 정리해 드려요. 사전 요구 사항, 리전 엔드포인트와 프라이빗 엔드포인트의 선택 기준, 그리고 생성 방법 선택(AWS Management Console vs CloudFormation 템플릿)을 도와드려요. 아울러 흐름을 따라가며 필요한 정보를 기록하는 추적 워크시트도 제공해요.
본문
이 문서는 AWS Management Console 또는 Snowflake가 제공하는 AWS CloudFormation 템플릿을 사용해 AWS(Amazon Web Services)용 외부 함수를 만들 준비를 돕는 내용이에요.
사전 준비 사항
이 지침은 AWS Management Console 사용에 익숙한 사용자를 전제로 해요.
필요한 것:
-
다음 권한을 포함한 AWS 계정:
- IAM(identity and access management)으로 AWS 역할 생성.
- AWS Lambda Functions 생성.
- API Gateway 엔드포인트 생성.
-
ACCOUNTADMIN 권한 또는 CREATE INTEGRATION 권한을 가진 역할이 있는 Snowflake 계정.
-
프라이빗 엔드포인트를 사용할 계획이라면 Virtual Private Cloud(VPC) ID가 필요해요. (VPC Endpoint ID가 아니라 VPC ID를 사용해야 해요. VPC Endpoint ID는 시간이 지나면서 바뀔 수 있어요.)
VPC ID가 아직 없다면, Snowflake 웹 인터페이스에서 다음 명령을 실행해 찾을 수 있어요:
select system$get_snowflake_platform_info();
출력은 다음과 비슷할 거예요:
{
"snowflake-vpc-id": ["vpc-12345678"],
"snowflake-egress-vpc-ids": [
...
{
"id": "vpc-12345678",
"expires": "2025-03-01T00:00:00",
"purpose": "generic"
},
...
]
}
함수 출력에서 "purpose": "generic"으로 식별되는 각 속성에 대해 해당 VPC ID를 기록해요.
AWS Management Console을 사용할지 AWS CloudFormation 템플릿을 사용할지 결정한 뒤, VPC ID를 적절한 추적 워크시트에 복사해요:
- Management Console 워크시트.
- CloudFormation 템플릿 워크시트.
엔드포인트 유형 선택: 리전 엔드포인트 vs. 프라이빗 엔드포인트
프록시 서비스(예: Amazon API Gateway)는 흔히 엔드포인트 라고 불리는 URI를 통해 접근해요. Amazon API Gateway 생성 지침은 다음 유형의 엔드포인트 중 하나를 선택하도록 요구해요:
- 리전 엔드포인트(regional endpoint).
- 프라이빗 엔드포인트(private endpoint).
다음 정보는 엔드포인트 유형을 선택하는 데 도움이 돼요.
리전 엔드포인트는 AWS 리전을 넘어, 심지어 클라우드 플랫폼을 넘어서도 접근할 수 있어요. Snowflake 인스턴스, 프록시 서비스, 원격 서비스가 모두 서로 다른 리전이나 다른 클라우드 플랫폼에 있을 수 있어요. 예를 들어 Azure에서 실행되는 Snowflake 인스턴스가 Amazon API Gateway 리전 엔드포인트로 요청을 보내고, 그 엔드포인트가 다시 GCP에서 실행되는 원격 서비스로 데이터를 전달할 수 있어요.
프라이빗 엔드포인트는 리전 안에서만 접근을 허용하도록 구성할 수 있어요. 예를 들어 같은 AWS 리전의 Snowflake VPC(Virtual Private Cloud)에서만 접근을 허용하도록 프라이빗 엔드포인트를 구성할 수 있어요. Snowflake VPC와 프라이빗 엔드포인트 사이의 통신은 AWS PrivateLink를 사용해요.
AWS의 엔드포인트 유형에 대한 자세한 내용은 다음을 참조하세요:
프라이빗 엔드포인트를 사용하려는데 어떤 리전인지 확실하지 않다면, 다음 중 하나로 리전을 확인할 수 있어요:
- SQL 함수
CURRENT_REGION()호출 (예:SELECT CURRENT_REGION()). - Snowflake 계정 호스트네임 확인. 호스트네임은 보통 클라우드 제공자와 리전을 나타내요. 계정 호스트네임, 리전, 클라우드 제공자에 대한 자세한 내용은 지원되는 클라우드 리전을 참조하세요.
프라이빗 엔드포인트를 사용하려면 계정이 다음 요구 사항을 충족해야 해요:
- Snowflake의 Business Critical(또는 그 이상) 에디션.
외부 함수 생성 방법 선택
Snowflake는 AWS에서 외부 함수를 만드는 두 가지 방법에 대한 지침을 제공해요:
- AWS Management Console 웹 인터페이스
- Snowflake가 제공하는 AWS CloudFormation 템플릿
AWS Management Console
AWS Management Console 을 사용해 Lambda Function(원격 서비스)과 Amazon API Gateway 인스턴스(프록시 서비스)를 만들 수 있어요. 이 방법을 선택하면 AWS Management Console을 사용해 보안 관련 설정도 구성하게 돼요.
AWS Management Console을 사용한 외부 함수 생성 지침에는 샘플 Lambda Function과 기본 API Gateway 생성 상세가 포함돼 있어요:
- 처음 사용자는 지침을 거의 또는 전혀 수정하지 않고 사용할 수 있어요.
- 숙련된 사용자는 지침과 샘플 Lambda Function을 커스텀 Lambda Function과 커스텀 구성 API Gateway를 만드는 출발점으로 사용할 수 있어요.
AWS CloudFormation 템플릿
CloudFormation 템플릿은 외부 함수 생성에서 다음 두 단계를 모두 수행해요:
- 원격 서비스(AWS Lambda Function) 생성.
- 프록시 서비스(Amazon API Gateway) 생성 및 구성.
템플릿은 또한:
- 두 개의 IAM 역할을 만들어요 (하나는 Lambda Function용, 하나는 API Gateway용).
- API Gateway의 리소스 정책(resource policy)을 구성해요.
AWS Management Console 사용 준비
필요한 정보 추적 워크시트 만들기
외부 함수를 만들면서 입력하는 특정 정보(예: Resource Invocation URL)를 기록해 두면 이후 단계에서 그 정보를 사용할 수 있어요. 아래 워크시트는 이 정보를 추적하는 데 도움이 돼요.
===========================================================================
================ Tracking Worksheet: AWS Management Console ===============
===========================================================================
****** Step 1: Information about the Lambda Function (remote service) *****
Your AWS Account ID: ______________________________________________________
Lambda Function Name: _____________________________________________________
******** Step 2: Information about the API Gateway (proxy Service) ********
New IAM Role Name: ________________________________________________________
New IAM Role ARN: _________________________________________________________
Snowflake VPC ID (optional): ______________________________________________
New API Name: _____________________________________________________________
API Gateway Resource Name: ________________________________________________
Resource Invocation URL: __________________________________________________
Method Request ARN: _______________________________________________________
*** Step 3: Information about the API Integration and External Function ***
API Integration Name: _____________________________________________________
API_AWS_IAM_USER_ARN: _____________________________________________________
API_AWS_EXTERNAL_ID: ______________________________________________________
External Function Name: ___________________________________________________
AWS CloudFormation 템플릿 사용 준비
템플릿 다운로드
템플릿은 GitHub의 Snowflake 저장소에 있는 deployment templates directory 에서 다운로드할 수 있어요.
필요한 정보 추적 워크시트 만들기
외부 함수를 만들면서 입력하는 특정 정보(예: Resource Invocation URL)를 기록해 두면 이후 단계에서 그 정보를 사용할 수 있어요. 아래 워크시트는 이 정보를 추적하는 데 도움이 돼요.
===========================================================================
================== Tracking Worksheet: CloudFormation Template ============
===========================================================================
New IAM Role Name: ________________________________________________________
New IAM Role ARN: _________________________________________________________
Resource Invocation URL: __________________________________________________
API_AWS_IAM_USER_ARN: _____________________________________________________
API_AWS_EXTERNAL_ID: ______________________________________________________
AWS에서 외부 함수를 만들기 위한 추가 리소스
직접 만든 외부 함수를 위한 원격 서비스를 만들 준비가 되면, the Snowflake Labs 에서 제공하는 Lambda Function 기반 원격 서비스 예시를 살펴볼 수 있어요.
다음 단계
AWS Management Console:
1단계: Management Console에서 원격 서비스(AWS Lambda function) 만들기
AWS CloudFormation 템플릿:
1단계: 템플릿을 사용해 원격 서비스(AWS Lambda function)와 프록시 서비스(API Gateway) 만들기
더 알아보기 (Learn more)
- AWS Management Console로 외부 함수 만들기 — 콘솔 기반 생성 절차
- AWS CloudFormation 템플릿으로 외부 함수 만들기 — 템플릿 기반 생성 절차
- 지원되는 클라우드 리전 — 계정 리전·제공자 정보
- CREATE API INTEGRATION — API 통합 생성 구문