2단계: AWS Management Console에서 프록시 서비스(Amazon API Gateway) 만들기
2단계: AWS Management Console에서 프록시 서비스(Amazon API Gateway) 만들기
이 문서는 외부 함수의 프록시 서비스로 사용할 Amazon API Gateway를 만들고 구성하는 방법을 설명해 드려요. Snowflake는 원격 서비스에 직접 데이터(HTTP POST 요청)를 보내지 않고, 프록시 서비스에 데이터를 보내 원격 서비스(예: AWS Lambda Function)로 중계해요. 새 IAM 역할 생성, API Gateway 엔드포인트 생성·구성·보안, API 통합 생성 등을 단계별로 다뤄요.
본문
Snowflake는 원격 서비스에 직접 데이터(HTTP POST 요청)를 보내지 않아요. 대신 Snowflake는 프록시 서비스에 데이터를 보내며, 프록시 서비스가 데이터를 원격 서비스(예: AWS Lambda Function)로 중계하고 다시 돌려보내요.
이 문서는 외부 함수의 프록시 서비스로 사용할 Amazon API Gateway를 만들고 구성하는 방법을 설명해요.
Amazon API Gateway를 프록시 서비스로 구성하려면 여러 단계가 필요해요:
- AWS 계정에 새 IAM(identity and access management) 역할 만들기.
- Amazon API Gateway 엔드포인트 만들고 구성하기.
- Amazon API Gateway 엔드포인트 보안.
- Snowflake에서 API Integration 객체 만들기.
- Snowflake와 새 IAM 역할 사이에 신뢰 관계 설정.
이들을 만드는 단계는 서로 꼬여 있는데, 그 이유는:
- API 통합은 역할의 ARN(Amazon Resource Name) 같은 API Gateway의 정보가 필요해요.
- API Gateway는 API_AWS_EXTERNAL_ID와 API_AWS_IAM_USER_ARN 같은 API 통합의 정보가 필요해요.
이전 단계
1단계: Management Console에서 원격 서비스(AWS Lambda function) 만들기
AWS 계정에 새 IAM 역할 만들기
Snowflake가 AWS 계정에 인증하려면, Snowflake 소유 IAM(identity and access management) 사용자에게 AWS 계정의 IAM 역할을 가정(assume)할 권한이 부여되어야 해요.
IAM 역할을 만드는 단계는 다음과 같아요:
-
새 IAM 역할 만들기: AWS 콘솔에서 IAM을 검색하고 Roles 를 클릭한 뒤 Create Role 을 클릭해요.
-
신뢰할 엔티티 유형을 선택하라는 요청이 오면 Another AWS account 를 선택해요.
-
Specify accounts that can use this role 을 묻는 요청이 오면,
Your AWS Account ID라는 워크시트 필드의 값을 붙여 넣어요.
(자신의 AWS Account ID를 사용하세요. Snowflake의 것이 아니라요. Snowflake의 ARN은 나중에 이 IAM 역할과 연결됩니다.)
-
Next: Permissions 를 클릭해요.
-
선택적으로 권한을 설정해요 (Attach permissions policies).
-
Next: Tags 를 클릭해요.
-
선택적으로 태그를 추가해요.
-
Next: Review 를 클릭해요.
-
역할 이름을 입력해요.
- 워크시트의
New IAM Role Name필드에 역할 이름을 기록해요.
- 워크시트의
-
Create role 버튼을 클릭해요. 역할을 만든 후:
- 워크시트의
New IAM Role ARN필드에 Role ARN 을 기록해요.
API Gateway 엔드포인트 만들기
API Gateway를 만들고 구성하기 전에, 리전 엔드포인트(regional endpoint)를 사용할지 프라이빗 엔드포인트(private endpoint)를 사용할지 선택해요. 자세한 내용은 엔드포인트 유형 선택: 리전 엔드포인트 vs. 프라이빗 엔드포인트 를 참조하세요.
프라이빗 엔드포인트를 사용할 계획이라면 추적 워크시트에 기록한 VPC(Virtual Private Cloud) ID가 필요해요.
API Gateway 엔드포인트를 만드는 단계는 아래와 같아요:
-
AWS management console에서 API Gateway 를 선택해요.
-
Create API 를 선택해요.
-
엔드포인트 유형(regional 또는 private)을 선택해요.
-
리전 엔드포인트를 원한다면:
- REST API 를 찾아 그 Build 버튼을 클릭해요.
-
프라이빗 엔드포인트를 원한다면:
- REST API private 을 찾아 그 Build 버튼을 클릭해요.
-
중요 (Important)
REST API 또는 REST API private 을 선택해야 해요. HTTP API 나 다른 옵션을 선택하지 마세요.
-
New API 옵션을 선택해요.
-
새 API의 이름을 입력해요.
이 이름을 워크시트의 New API Name 필드에 기록해요.
-
Endpoint Type 을 선택하라는 요청이 오면 Regional 또는 Private 을 선택해요.
-
VPC Endpoint IDs필드는 비워 두세요. -
Create API 버튼을 클릭해요.
-
리소스를 만들려면 Actions 를 클릭한 뒤 Create Resource 를 클릭해요.
리소스 이름을 워크시트의 API Gateway Resource Name 필드에 기록해요.
Create Resource 버튼을 클릭해요. 화면에 No methods defined for the resource. 가 표시돼요.
- 새 메서드를 만들려면 Actions 를 클릭하고 Create Method 를 선택해요.
리소스 이름 아래의 작은 드롭다운 메뉴 상자에서 POST 를 선택하고 옆의 회색 체크 표시를 클릭해요.
-
Integration type 은 Lambda Function 이어야 해요. 이미 선택되어 있지 않다면 선택해요.
-
Use Lambda Proxy integration 체크박스를 선택해요.
Lambda 프록시 통합을 선택하는 것이 중요해요. Lambda 프록시 통합이 없는 JSON은 Lambda 프록시 통합이 있는 JSON과 다르기 때문이에요. Lambda 프록시 통합에 대한 자세한 내용은 AWS 문서를 참조하세요:
-
Lambda Function 필드에 워크시트에 기록한
Lambda Function Name을 붙여 넣어요. -
Save 버튼을 클릭해요.
-
Actions 버튼을 클릭하고 Deploy API 작업을 선택해요.
-
스테이지를 선택하거나 만들어요. Deploy 를 클릭해요.
-
리소스 이름 아래에 POST 가 보여야 해요.
이것이 보이지 않으면, 리소스 이름 왼쪽의 삼각형을 클릭해 리소스 트리를 확장해야 할 수 있어요.
- POST 를 클릭한 뒤, POST 요청의 Invoke URL 을 워크시트의
Resource Invocation URL필드에 기록해요.
호출 URL이 만든 리소스의 이름을 포함하는지 확인하세요. 포함하지 않는다면 스테이지가 아니라 리소스의 호출 URL을 클릭했을 수 있어요.
- Save Changes 를 클릭해요.
API Gateway 테스트하기
API Gateway가 Lambda Function을 호출할 수 있는지 확인해요.
- 테스트를 위한 AWS 지침 을 따라요.
- AWS 지침의 적절한 단계에서 Request Body 에 다음 텍스트를 붙여 넣어요:
{
"data":
[
[0, 43, "page"],
[1, 42, "life, the universe, and everything"]
]
}
테스트를 실행하면 오른쪽에 Request, Status, Latency, and Response Body 가 나타나는 것을 볼 수 있어요 (보려면 스크롤해야 할 수 있어요).
반환된 상태가 200이면 API Gateway가 올바른 Lambda 함수를 호출한 거예요.
(이 검증 단계는 인증을 건너뛰므로 권한 문제를 발견하지 못해요.)
Amazon API Gateway 엔드포인트 보안
Amazon API Gateway 엔드포인트 같은 프록시 서비스 엔드포인트 보안에 대한 개요는 프록시 서비스 보안 을 참조하세요.
Amazon API Gateway 엔드포인트를 보호하려면:
- 이 시점에서 API Gateway 정보를 표시하는 화면에 있어야 하고, 리소스와 POST 메서드가 보여야 해요.
아직 거기에 없다면 다음을 수행해요:
1. AWS Management Console에서 API Gateway 페이지로 이동해요.
2. API Gateway를 선택해요.
3. 왼쪽 창에서 **Resources** 를 클릭해요.
4. **POST** 메서드를 클릭해요. (이것이 보이지 않으면 **Resources** 창, 보통 왼쪽에서 두 번째 창에서 리소스 왼쪽의 삼각형을 클릭해 리소스 트리를 확장해요.)
-
Method Request 상자에서 Method Request ARN 을 워크시트의
Method Request ARN필드로 복사해요. -
Method Request 제목을 클릭해요.
-
Authorization 옆의 편집 기호를 클릭하고
AWS_IAM을 선택해 메서드 요청이 AWS_IAM 인증을 요구하도록 지정해요.
메뉴 옆의 작은 체크 표시를 클릭해 선택을 확인해요.
-
게이트웨이 엔드포인트를 호출할 권한이 있는 사용자를 지정하도록 API Gateway의 리소스 정책을 설정하려면, API 창 왼쪽 열에서 Resource Policy 를 클릭해요.
- 리전 엔드포인트 (Regional Endpoint):
아래 JSON 형식 리소스 정책 템플릿을 리소스 정책 편집기에 붙여 넣은 뒤, 아래 설명대로 워크시트의 적절한 값으로 플레이스홀더를 바꿔요.
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal":
{
"AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake"
},
"Action": "execute-api:Invoke",
"Resource": "<method_request_ARN>"
}
]
}
리소스 정책의 다음 부분을 바꿔요:
* `<12-digit-number>` 를 워크시트에 기록한 `Your AWS Account ID` 필드의 값으로 바꿔요.
* `<external_function_role>` 을 워크시트의 `New IAM Role Name` 필드의 역할 이름으로 바꿔요. 예를 들어 AWS 역할 이름이:
arn:aws:iam::987654321098:role/MyNewIAMRole
라면 결과는 다음과 같아야 해요:
"AWS": "arn:aws:sts::987654321098:assumed-role/MyNewIAMRole/snowflake"
* `<method_request_ARN>` 을 워크시트의 `Method Request ARN` 필드 값으로 바꿔요. 이것은 리소스의 POST 메서드 ARN이에요.
Note
Resource를 Method Request ARN으로 설정하면 API Gateway가 지정된 리소스에만 호출을 허용하도록 지정해요. Method Request ARN의 일부를 접두사로 지정하는 것도 가능하며, 이를 통해 같은 API Gateway에서 여러 리소스를 호출할 수 있어요.
예를 들어 Method Request ARN이:
arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*/POST/MyResource라면 다음 접두사만 지정할 수 있어요:
arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*
* 미국 정부 GovCloud 사용자만:
* Method Request ARN을 `aws-us-gov` 를 사용하도록 업데이트해요. 예:
arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
* GovCloud 리전을 사용하는지 확인하세요. 예: `us-gov-west-1`.
* 프라이빗 엔드포인트 (Private Endpoint): 아래 리소스 정책 템플릿을 리소스 정책 편집기에 붙여 넣은 뒤, 아래 설명대로 워크시트의 적절한 값으로 플레이스홀더를 바꿔요.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake"
},
"Action": "execute-api:Invoke",
"Resource": "<method_request_ARN>",
"Condition": {
"StringEquals": {
"aws:sourceVpc": "<VPC_ID>"
}
}
}
]
}
리소스 정책의 다음 부분을 바꿔요:
* **< 12-digit-number>** , **< external_function_role>** , **< method_request_ARN>** 를 리전 엔드포인트에 대해 위에서 설명한 대로 바꿔요.
* **< VPC_ID>** 를 해당 리전의 Snowflake VPC ID로 바꿔요. 이 값은 워크시트의 `Snowflake VPC ID` 필드에 기록되어 있어야 해요.
* 미국 정부 GovCloud 사용자만:
* Method Request ARN을 `aws-us-gov` 를 사용하도록 업데이트해요. 예:
arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
* GovCloud 리전을 사용하는지 확인하세요. 예: `us-gov-west-1`.
-
Save 를 클릭해 리소스 정책을 저장해요.
-
업데이트된 API를 배포해요. 이를 위해 페이지 상단의 브레드크럼 트레일에서 API 이름을 클릭해요. Actions 를 클릭한 뒤 Deploy API 를 클릭해요. 배포 스테이지를 선택하고 Deploy 를 클릭해요.
다음 단계에서 Snowflake API 통합 객체를 만들어요. 지금 AWS Management Console 창을 닫지 마세요. 나중에 다시 돌아와야 해요.
다음 단계
3단계: Snowflake에서 AWS용 API 통합 만들기
더 알아보기 (Learn more)
- 3단계: Snowflake에서 AWS용 API 통합 만들기 — 다음 단계
- 1단계: Management Console에서 원격 서비스(AWS Lambda function) 만들기 — 이전 단계
- 엔드포인트 유형 선택 — 리전 vs 프라이빗 엔드포인트
- 프록시 서비스 보안 — 프록시 서비스 보안 개요