Amazon Web Services 한국 블로그

Amazon API Gateway 매핑 템플릿과 Amazon SageMaker를 통한 기계 학습 기반 REST API 생성하기

AWS 고객들은 완전 관리형 기계 학습 서비스인 Amazon SageMaker를 사용하여 기계 학습 모델을 구축, 교육 및 배포 할 수 있습니다. 이를 통해 개인화 된 제품 추천을 하거나, 사용자에 따른 선호 사항을 자동으로 제공하는 애플리케이션을 통해 고객의 경험을 높일 수 있습니다.

그런데, 이런 애플리케이션을 구축 할 때 아키텍처의 주요 고려 사항 중 하나는 사용자 단말기나 웹브라우저에서 실행되는 클라이언트 소프트웨어가 런타임 엔드포인트를 제공해야 하는 것입니다. 일반적으로 엔드 포인트는 전체 애플리케이션 기능을 제공하는 REST와 같은 웹 친화적 접근 방식을 사용합니다.

이를 위해 Amazon API Gateway를 통해 API를 쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 할 수 있습니다. API Gateway를 사용하면  SageMaker 엔드 포인트와 연동 할 수 있습니다.

  • 클라이언트를 위한 REST API와 Amazon SageMaker 추론 엔진을 API 로 변환하여 제공 가능
  • 클라이언트 요청 인증 및 권한 부여 지원
  • API 제한, 속도 제한 및 할당량 관리를 사용가능
  • AWS WAF 기반 방화벽 기능을 사용 가능
  • API 캐싱 및 요청 유효성 검사를 통해 비용 절감 및 운영 최적화 가능
  • 모델 변경 사항에 대한 카나리아 배포 가능

이 글에서는 맵핑 템플릿(Mapping Template)이라는 API Gateway 기능을 사용하여  SageMaker 추론 엔드 포인트를 REST API (일부)로 처리하는 방법을 소개합니다 . 이 기능을 통해 REST API를 Amazon SageMaker 런타임 엔드 포인트와 직접 통합 할 수 있으므로 중간 컴퓨팅 리소스 (예 : AWS Lambda 또는 Amazon ECS 컨테이너)를 사용하여 엔드 포인트를 호출 하지 않아도 됩니다. 그 결과 더 간단하고 빠르며 저렴한 솔루션을 얻을 수 있습니다.

이러한 방식은 서비스 수요가 높아 요청 트래픽이 많은 애플리케이션에 특히 유용합니다. Amazon SageMaker는 추론 엔드 포인트에 대한 자동 스케일링을 지원 하고 API Gateway는 요구에 맞게 자동으로 스케일링하여 수신 요청을 처리 할 수 있는 충분한 용량이 있으며 사용한 만큼만 비용을 지불하도록 보장합니다.

참고 : 이 글에서는 Amazon SageMaker와의 직접 통합에 중점을 두지만 매핑 템플릿을 중간 컴퓨팅 계층 (예 : AWS Lambda 기반)과 함께 사용하여 컴퓨팅 로드를 줄일 수 있습니다. 게이트웨이 자체에서 페이로드를 재구성하여 계층화합니다.

이제 Amazon SageMaker 모델 엔드 포인트 배포부터 시작하여 엔드 포인트와 Amazon API Gateway 통합 생성을 단계별로 진행하는 콘솔 기반 연습을 통해 접근 방식을 살펴 보겠습니다.

TV앱을 위한 영화 추천 서비스 개요

이 글에서는 사용자를 위한 TV 앱이 영화 목록에 대한 선호도 예측을 요청하는 예제를 사용합니다. 앱이 영화 페이지를 표시 할 때마다 평가 예측이 높은 영화가 페이지까 추천 되도록 표시해야합니다. 이 예에서 모든 사용자와 영화는 숫자 ID로 식별 할 수 있으며 예상 등급은 1에서 5까지이며 등급이 높을수록 사용자가 특정 영화를 좋아할 가능성이 더 높습니다.

아키텍처
아래 다이어그램은 솔루션의 아키텍처, 주요 구성 요소 및 상호 작용을 요약합니다. 최종 사용자는 REST 스타일 요청을 API Gateway 엔드 포인트로 보내는 클라이언트 애플리케이션 (웹 브라우저 또는 모바일 디바이스 사용)과 상호 작용합니다. API Gateway는이를 Amazon SageMaker 엔드 포인트에 필요한 요청 형식에 매핑하고 모델에서 추론을 얻기 위해 엔드 포인트를 호출합니다. API Gateway는 Amazon SageMaker 엔드 포인트에서 응답을 수신하여 클라이언트로 다시 전송되는 응답에 매핑합니다.

요청 및 응답 형식
이 솔루션에는 단일 리소스 ( predicted-ratings) 및 GET 메서드 를 지원하는 REST API가 통합되어 있습니다. 요청 양식은 다음과 같습니다.

GET /<api-path>/predicted-ratings/{user_id}?items=id1,id2,,idn&

여기서 path 매개 변수 user_id는 등급이 필요한 사용자를 나타내고 query string 매개 변수 items는 쉼표로 구분 된 항목 ID 목록을 포함합니다.

요청이 성공적으로 처리되면 반환 된 HTTP 응답에 응답 코드 200이 있고 본문은 다음과 같이 지정된 항목에 대해 예측 된 등급 목록이 포함 된 JSON 객체입니다.

{
  "ratings": [
    rating_1,
    rating_2,,
    rating_n
  ]
}

예를 들어 다음 요청을 입력 할 수 있습니다.

% curl "https://<api-path>/predicted-ratings/321?items=101,131,162&"

이것은 다음과 비슷한 응답으로 반환됩니다.

{
  "ratings": [
    3.527499437332153,    
    3.951640844345093,    
    3.658416271209717    
  ]
}

Amazon SageMaker 모델 입력 및 출력 형식
등급 예측기 솔루션은 Amazon SageMaker와 함께 제공되는 샘플 모델, 특히 다음을 기반으로합니다 object2vec_movie_recommendation.ipynb. 이 모델 추론 엔드 포인트는 POST 메소드를 지원하며 요청 본문에 다음과 같이 JSON 페이로드가 포함될 것으로 예상합니다.

{
  "instances": [
    {"in0": [863], "in1": [882]},
    {"in0": [278], "in1": [311]},
    {"in0": [705], "in1": [578]},]
}

여기서 in0사용자 ID를 in1나타내고 영화 ID를 나타냅니다.

모델 유추는 다음 출력을 반환합니다.

{
  "predictions": [
    {"scores": [3.047305107116699]},
    {"scores": [3.58427882194519]},
    {"scores": [4.356469631195068]},]
}

매핑 템플릿을 사용하여 REST API가 수신 한 GET 요청 형식을 Amazon SageMaker 모델 엔드 포인트가 예상하는 POST 입력 형식으로 매핑하고 모델 출력 형식을 REST API에 필요한 응답 형식으로 매핑 할 수 있습니다.

Amazon API Gateway와 통합하기
API Gateway를 사용하여 REST API를 작성할 때 각 API 메소드에 대해 다음 구성 모델을 정의해야합니다.

  • 메소드 요청 – REST 요청 형식에 대한 데이터 모델을 정의하고 수신 된 REST 요청에 대해 수행 될 유효성 검증 및 권한 부여 검사를 지정합니다.
  • 통합 요청 – REST 요청 및 관련 파라미터가 백엔드 서비스 엔드 포인트 (이 예에서는 Amazon SageMaker 추론 엔드 포인트)가 예상하는 형식으로 매핑되는 방법을 자세히 설명합니다.
  • 통합 응답 – 백엔드 서비스에서 수신 한 응답 (오류 포함)이 API 게이트웨이가 예상하는 응답 형식으로 맵핑되는 방법을 자세히 설명합니다.
  • 메소드 응답 – REST API가 예상하는 데이터 모델 및 응답 형식을 정의합니다.

다음 다이어그램은 처리 흐름을 보여 주며 각 단계에서 요청 및 응답 예제가 어떻게 변환되는지 보여줍니다.

매핑 템플릿
통합 요청 및 응답 구성의 일부로 솔루션은 Apache Velocity Template Language (VTL)를 사용하여 매핑 템플릿을 정의합니다 . VTL은 원래 웹 개발 용으로 디자인 된 템플릿 언어이지만 JSON 형식에서 다른 형식으로 변환하기위한 데이터 형식 변환 도구로 사용될 수도 있습니다. 맵핑 템플리트를 사용하면 VTL 템플리트를 사용하여 REST 요청 형식에서 모델 입력 형식으로 변환하고 모델 출력을 REST 응답 형식으로 변환 할 수 있습니다.

API 개발 실습 방법

API 개발 실습에는 다음과 같은 주요 단계가 포함되어 있습니다.

  1. Amazon SageMaker 모델 구축 및 배포
  2. AWS CLI를 사용하여 Amazon SageMaker 모델 엔드 포인트 테스트
  3. REST API에 대한 IAM 실행 역할 생성
  4. REST API에 대한 API 게이트웨이 엔드 포인트 빌드
  5. 요청 통합을위한 맵핑 템플리트 작성
  6. 응답 통합을위한 매핑 템플릿 생성
  7. API Gateway 엔드 포인트 배포 및 테스트

전제 조건

본 예제를 수행하려면 다음 전제 조건을 충족해야합니다.

  • AWS 계정에 대한 액세스 – IAM 역할, Amazon SageMaker, Amazon S3 및 API Gateway를 사용하려면 충분한 IAM 권한이 필요 합니다.
  • AWS CLI – 최신 버전을 설치하십시오.
  • Curl 유틸리티 – 버전 7.52 이상을 사용하십시오.

단계1 – Amazon SageMaker 모델 훈련 및 배포

이 단계에서는 모델 데이터를 저장하기 위해 S3 버킷이 필요합니다. 기존 버킷을 사용하거나 새로 만들 수 있습니다. 나중에 필요할 때 버킷 이름을 기록하시기 바랍니다.

먼저 Amazon SageMaker Notebook 인스턴스를 사용하여 모델을 생성하세요.

  1. AWS Management Console을 사용하여 AWS 계정에 로그인하십시오 .
  2. Amazon SageMaker 대시 보드의 Notebook Instances 아래에서 Create Notebook Instance를 선택합니다 .
  3. 노트북 인스턴스 설정 아래에서 노트북 의 이름을 지정하세요.

여기서는 인스턴스 유형을 ml.t2.medium으로 설정하면 가장 비용 효율적인 옵션입니다. 실제로 데이터 세트의 크기와 데이터 변환의 특성에 따라 인스턴스 유형을 선택합니다.

  1. 아래 권한 및 암호화에서 IAM 역할 설정 새 역할을 만듭니다.
  2. 지정한 S3 버킷 이 선택되어 있는지 확인하고 버킷 의 버킷 이름을 지정후 역할 생성을 선택하세요.
  3. 나머지 설정은 기본값으로 두시기 바랍니다.
  4. 노트북 인스턴스 생성을 선택합니다.

인스턴스를 만드는 데 몇 분이 걸립니다. 상태가 Pending으로 변경되면 InService노트북 인스턴스를 사용할 수 있습니다.

  1. 작업을 선택하기 JupyterLab을 선택하세요

Jupyter 노트북을 위한 새로운 브라우저 탭이 열립니다.

  1. 왼쪽 탐색 모음에서 Amazon SageMaker 샘플 노트북 의 아이콘을 선택하세요 (레이블을 보려면 아이콘 위에 마우스를 올리면 됩니다.)
  2. 샘플 노트북 목록에서 object2vec_movie_recommendation.ipynb를 선택하세요. 아래 그림과 같이:

샘플 노트북은 읽기 전용이므로 쓰기 가능한 사본을 작성해야합니다.

  1. 창의 오른쪽 상단에서 사본 만들기를 선택하세요.
  2. 커널 선택 프롬프트가 표시되면 conda_python3을 사용하세요.

이제 노트북에서 모델을 구축 및 훈련 할 준비가되었습니다. 이 노트북은 두 가지 모델 추론 엔드포인트를 만듭니다 (등급 예측 및 권장 사항). 첫 번째 셀만 필요하므로 노트북의 모든 셀을 실행할 필요는 없습니다.

셀을 실행하기 전에 다음 단계를 완료하십시오.

  1. 노트북에서 모델 훈련 및 추론 (노트북을 반쯤 내리면) 섹션으로 스크롤하세요 . 첫 번째 셀 ( 데이터 및 모델을 호스팅하는 S3 버킷 정의 및 S3에 데이터 업로드 )에서 버킷 이름을 앞에서 식별 한대로 S3 버킷 선택으로 설정하세요.
  2. 위에서부터 시작하여 권장 작업 섹션 바로 앞 (노트북 중간 약 4 분의 3)에 도달 할 때까지 노트북을 사용하여 모든 셀을 순서대로 실행하세요.

한 번에 하나의 셀을 단계별로 실행하거나 권장 사항 작업 섹션 에서 첫 번째 셀을 선택한 다음 실행 아래에서 선택한 셀 위에서 모두 실행 을 선택하세요(아래 참조).

모델 훈련 및 배포에는 약 10 분이 걸립니다. 완료되면 다음 단계로 진행하세요.

  1. Amazon SageMaker 콘솔의 추론 에서 엔드 포인트를 선택하세요.
  2. 런타임 엔드 포인트가 보이는지 확인하세요.
  3. 나중에 필요할 때 엔드 포인트 이름과 ARN을 기록하세요.

단계2 – AWS CLI를 사용하여 Amazon SageMaker 모델 엔드 포인트 테스트

다음과 같이 AWS CLI를 사용하여 추론 엔드 포인트를 테스트 할 수 있습니다.

aws sagemaker-runtime invoke-endpoint \
  --endpoint-name <endpoint-name> \
  --body '{"instances": [{"in0":[863],"in1":[882]}]}' \
  --content-type application/json \
  --accept application/json \
  results

참고 : 위는 bash 호환 쉘을 사용한다고 가정합니다. 표준 Windows 명령 행을 사용하는 경우 외부 작은 따옴표를 body 매개 변수의 큰 따옴표로 바꾸고 JSON에서 큰 따옴표 문자를 이스케이프하세요.

엔드 포인트가 올바르게 작동하면 다음과 유사한 출력을 포함하는 results 파일이 표시되어야합니다.

{"predictions":[{"scores":[2.433111906051636]}]}

작동하는 Amazon SageMaker 엔드 포인트가 있으므로 REST API를 생성 할 수 있습니다.

단계3 – REST API에 대한 실행 역할 작성

REST API를 구축하기 전에 API에 Amazon SageMaker 엔드 포인트를 호출하는 데 필요한 권한을 부여하는 실행 역할을 생성해야합니다. 다음 단계를 완료하세요.

  1. IAM 콘솔의 Roles (역할 ) 아래에서 Create Role (역할 생성 )을 선택합니다 .
  2. 대한 신뢰 엔티티의 선택 유형 선택 AWS 서비스 .
  3. 서비스 API 게이트웨이를 선택하세요.
  4. 검토에 도달 할 때까지 다음을 선택하세요.

API Gateway가 로그를 CloudWatch로 푸시 할 수 있도록하는 정책이 포함되어 있음을 알 수 있습니다.

  1. 역할 이름을 지정하세요. (예 :) APIGatewayAccessToSageMaker.
  2. 역할 작성을 선택하세요.

이제 역할이 Amazon SageMaker 엔드 포인트를 호출 할 수 있도록 권한을 추가해야합니다.

  1. 역할 필터를 사용하여 방금 만든 역할을 찾으시기 바랍니다.
  2. 역할 요약 화면을 보려면 생성 한 역할을 선택하세요.
  3. 인라인 정책 추가를 선택합니다 .
  4. 온 만들기 정책 화면에서 서비스를 선택 SageMaker 와 액션 InvokeEndpoint을 .
  5. 들어 자원, 선택 특정을 하고 아마존 SageMaker 엔드 포인트에 대한 ARN를 입력합니다.
  6. 정책 검토를 선택하세요.
  7. 정책 이름을 지정하세요. (예 :) SageMakerEndpointInvokeAccess.
  8. 정책 생성을 선택합니다 .
  9. 역할 요약 페이지에서 나중에 필요할 때 역할에 대한 ARN을 기록하세요.

단계 4 – API 게이트웨이 엔드 포인트 만들기

이 섹션에서는 REST API를 만들겠습니다.

API 생성

다음 단계를 완료하세요.

  1. API Gateway 콘솔에서 Create API를 선택하세요.
  2. REST를 선택하세요.
  3. 새 API를 선택하세요.
  4. API 이름을 지정하세요. (예 :) RatingsPredictor.
  5. 엔드 포인트 유형 및 사용할 리전을 선택 하세요.
  6. API 생성을 선택하세요.

참고 : 프로덕션 시스템에서는 Edge Optimized 옵션의 이점을 활용할 수 있는지 고려해야합니다 .

리소스 만들기

  1. 리소스 편집기의 작업 메뉴에서 CreateResource을 선택합니다.
  2. 리소스 이름predicted-ratings라고 입력합니다.
  3. Resource Path (리소스 경로) 필드에도 예측 등급이 포함되어 있는지 확인하세요.
  4. 리소스 생성을 선택하세요.

이제 predicted-ratings 리소스 탐색 트리에 나타납니다.

  1. predicted-ratings생성한 리소스를 선택하세요.
  2. 동작 메뉴에서 리소스 만들기를 선택하세요.
  3. 리소스 경로를 입력합니다 {user_id}.
  4. 리소스 이름 을 입력합니다 user_id.
  5. 리소스 생성을 선택하세요.

리소스 탐색 트리는 이제 다음 스크린 샷과 유사해야합니다 /predicted-ratings/{user_id}.

GET 메소드 작성

다음 단계는 리소스 경로에서 GET 메소드를 생성 /predicted-ratings/{user_id}하여 Amazon SageMaker 엔드 포인트와 통합하는 것입니다. 다음 단계를 완료하세요.

  1. 메뉴에서 {user_id}를 선택하세요.
  2. 메소드생성을 선택합니다 .
  3. {user_id} 리소스 아래에 표시되는 드롭다운 메뉴에서 GET 을 선택 후 확인하세요.

오른쪽 창에 설정 화면이 표시됩니다 . 다음 스크린 샷을 참조하십시오.

  1. 통합 유형(Integration type)AWS 서비스를 선택하세요.
  2. AWS 리전은 현재 사용하고 있는 리전을 입력합니다.
  3. AWS 서비스SageMaker 런타임을 선택하세요.
  4. AWS Subdomain을 비워 둡니다 .
  5. HTTP 메소드POST를 선택합니다.
  6. 조치 유형(Action type)경로 재 지정(Use path override)을 선택합니다.
  7. 경로 재정의(Path override) 형식을 사용하여 SageMaker 엔드 포인트 경로를 입력합니다. endpoints/<sagemaker-endpoint-name>/invocations
  8. 실행 역할(Execution role)은 이전에 만든 역할의 ARN를 입력합니다.
  9. 내용 처리(Content handling)패스 스루를 선택합니다
  10. 기본 시간 초과 사용을 선택하세요.
  11. 저장을 선택하세요.

REST API에서 GET 엔드 ​​포인트를 작성하고 POST 엔드 포인트에 맵핑했습니다. 다음 단계에서는 매핑 템플릿을 사용하여 경로 및 쿼리 문자열에서 GET 요청에 전달 된 파라미터를 Amazon SageMaker 엔드 포인트가 예상하는 POST 요청의 올바른 위치에 매핑합니다.

단계5 – 요청 통합을위한 맵핑 템플릿 작성

이제 오른쪽 메소드 실행 창에서 다음 스크린 샷을 참조하십시오.

여기에는 REST API에서 Amazon SageMaker 런타임으로 전달되는 방식과 응답이 다시 전달되는 방식을 보여주는 다이어그램이 포함되어 있습니다.

VTL 매핑 템플릿 생성

이 다음 단계에서는 REST API에서 수신한 GET 요청을 Amazon SageMaker 런타임에 필요한 POST 요청으로 변환하는 VTL 매핑 템플릿을 생성합니다. 다음 단계를 완료하십시오.

  1. 통합 요청(Integration Request)을 선택하세요.
  2. 맵핑 템플릿(Mapping Templates)를 펼치시기 바랍니다.
  3. 요청 본문 통과(Request Body Passthrough) : 안함(Never)을 선택하세요.

매핑 템플릿을 지정한 후 사라지므로 경고를 무시해도됩니다.

  1. 매핑 템플릿 추가를 선택합니다 .
  2. 들어 Content-Type을 지정 application/json을 선택하고 확인란을 클릭합니다.

아래로 스크롤하면 여러 줄로 된 텍스트 입력 필드가 나타납니다. 여기에서 VTL 템플릿을 추가하십시오.

  1. 다음 템플릿을 입력하십시오.
    {
      "instances": [
    #set( $user_id = $input.params("user_id") )
    #set( $items = $input.params("items") )
    #foreach( $item in $items.split(",") )
        {"in0": [$user_id], "in1": [$item]}#if( $foreach.hasNext ),#end
        $esc.newline
    #end
      ]
    }
  2. 저장을 선택하세요.

위의 템플릿은 POST 요청의 본문에 들어가는 내용을 정의합니다. 처음 두 줄은 지정된대로 요청 본문에 복사됩니다. 세 번째 줄은 #set지시문을 사용 하여 user_id 경로 매개 변수 를 추출하여 변수에 저장합니다 $user_id. 네 번째 줄은 쿼리 문자열 매개 변수 항목을 추출하여 변수에 배치합니다 $items. 쉼표로 구분 된 항목 목록을 포함하는 단일 문자열로 저장됩니다.

5-8 행은 모든 항목을 반복하고 각 항목에 필요한 JSON을 생성합니다. 템플릿 $items은 string split()메소드를 사용하여 보유한 문자열 을 배열 로 변환하고 #foreach지시문을 사용하여이를 반복 합니다. JSON 항목 사이에 쉼표 구분 기호가 삽입되며 마지막 항목 뒤에 쉼표가 없습니다.

매핑 테스트

이제 API Gateway 내장 테스트 하네스를 사용하여 맵핑 테스트 할 수 있습니다. 다음 단계를 완료하세요.

  1. Method Execution을 선택하세요 .
  2. 테스트를 선택하세요 .
  3. 들어 Path 매개 변수 {USER_ID} 을 입력합니다 321.
  4. 들어 쿼리 문자열 매개 변수를 입력합니다 items=101,131,162&.
  5. 테스트를 선택하하세요.

올바르게 작동하면 응답 코드 200이 표시되고 아래에 비슷한 JSON 객체가 포함 된 응답 본문이 표시됩니다.

{
  "predictions": [
    {"scores": [3.527499437332153]},
    {"scores": [3.951640844345093]},
    {"scores": [3.658416271209717]}
  ]
}

이벤트 순서를 확인하기 위해 로그를 스크롤 할 수도 있습니다. 다음과 유사한 내용이 표시되어야합니다.

<timestamp>: Endpoint request body after transformations: {
  "instances": [
    {"in0": [321], "in1": [101]},
    {"in0": [321], "in1": [131]},
    {"in0": [321], "in1": [162]}
  ]
}
<timestamp> : Sending request to https://runtime.sagemaker.eu-west-1.amazonaws.com/endpoints/recs/invocations
<timestamp> : Received response. Status: 200, Integration latency: 232 ms

이는 REST 요청이 모델에 필요한 입력 형식으로 변환되었으며 모델 런타임이 성공적으로 실행되었음을 나타냅니다. 그러나 리턴 된 응답 본문이 여전히 REST API에 대해 지정된 형식이 아닙니다. 기본적으로 API Gateway는 응답 통합을 설정하여 변경되지 않은 상태로 응답을 전달합니다. 다음 단계에서는 두 번째 맵핑 템플리트를 추가하여 모델 응답을 필수 REST API 형식으로 변환하세요.

단계 6 – 응답 통합을 위한 맵핑 템플릿 작성

응답에 대한 맵핑 템플리트를 추가하려면 다음 단계를 완료하세요.

  1. 메소드 통합(Method Execution) 화면에서 통합 응답(Integration Response) 을 선택합니다.

메소드 응답과 함께 HTTP 상태 정규 표현식이 단일 문자로 설정된 단일 항목이 표시되어야합니다. 200이 기본 응답 규칙이며, 200응답 코드 를 반환하고 변경되지 않은 상태로 응답을 전달합니다.

  1. 규칙을 확장하시고, 매핑 템플릿 application/json을 선택합니다.
  2. 다음 맵핑 템플릿을 입력하세요.
    {
      "ratings": [
    #set( $predictions = $input.path("$.predictions") )
    #foreach( $item in $predictions )
        $item.scores[0]#if( $foreach.hasNext ),#end
        $esc.newline
    #end
      ]
    }

이 템플릿 모델이 반환한 예측 목록을 반복하고 REST API에 필요한 형식을 준수하는 출력을 생성합니다.

  1. 저장을 선택하세요.

앞에서 사용한 것과 동일한 절차에 따라 맵핑 템플릿을 다시 테스트 할 수 있으며 이번에는 필요한 응답 형식으로 출력을 볼 수 있습니다.

단계 7 – API 배포 및 테스트

이제 REST API를 배치 할 준비가되었습니다. 다음 단계를 완료하십시오.

  1. 메소드 실행(Method Execution) 화면에서 작업(Action)을 선택 API 배포(Deploy API)를 선택합니다.
  2. 배포 단계(Deployment Stage)에서 [새로운 단계]를 선택합니다.
  3. 단계(Stage)에서 test 같은 이름을 지정하세요.
  4. 단계 및 배포에 필요한 설명을 입력하세요.
  5. 배포를 선택합니다.

오른쪽 분할 창에 배치 된 API 호출 URL 엔드 포인트가 있는 스테이지 편집기 가 표시됩니다. 배포 된 엔드 포인트를  테스트 하는 데 사용할 수 있습니다.

  1. 명령 행에서 다음을 입력하세요.
    curl "<invoke-url>/predicted-ratings/321?items=101,131,162&"

    위의 <invork-url> 을 실제 URL로 교체하면 됩니다.

다음과 유사한 출력이 표시되어야합니다.

{
  "ratings": [
    3.527499437332153,    
    3.951640844345093,    
    3.658416271209717    
  ]
}

이제 Amazon SageMaker 런타임과 통합 된 배포 된 작동하는 REST API를 만들었습니다.

추가 고려 사항

이 글에서는 API Gateway 매핑 템플릿을 사용하여 REST API와 모델 런타임에 필요한 형식간에 요청과 응답을 변환하는 방법에 중점을 두었습니다. API Gateway는 권한 부여, 요청 유효성 검사, 캐싱, 응답 오류 코드 매핑 및 조절을 구현하는 데 사용할 수있는 다양한 추가 기능을 제공합니다. 전체 아키텍처를 설계 할 때 이러한 기능을 가장 잘 사용하는 방법을 고려하시기 바랍니다.

특히, 중간 컴퓨팅 계층 없이도 요청과 응답을 직접 매핑 할 수있는 예를 사용했습니다. 다만, 다른 소스의 추가 데이터로 요청 본문을 보강해야하는 경우, 모든 상황에서 가능한 것은 아닙니다. 이러한 경우에도 VTL 기반 매핑 템플릿을 사용하여 요청을 사전 처리하고 사후 처리 응답을 수행 할 수 있으므로 모든 중간 계산 계층의 로드가 줄어 듭니다.

리소스 삭제

본  예제에 대한 실습을 마치면 API Gateway, S3 및 Amazon SageMaker에서 사용한 다양한 리소스를 정리하세요. 특히, 요금이 계속 발생하지 않도록 Amazon SageMaker 엔드 포인트를 삭제해야합니다. 나중에 추가 실험을 위해 모델 및 API Gateway 설정을 유지하려는 경우 필요할 때 엔드 포인트를 다시 작성할 수 있습니다. 다른 엔드 포인트 이름을 사용하는 경우 API Gateway 요청 통합을 업데이트하시기 바랍니다.

마무리

이 글에서는 API Gateway를 사용하여 Amazon SageMaker 추론을위한 공개 RESTful 엔드 포인트를 생성하는 방법을 설명했습니다. 특히, 맵핑 템플릿 및 VTL을 사용하여 공개 REST 엔드 포인트 및 내부 추론 엔드 포인트에서 예상되는 형식과 일치하도록 요청 및 응답을 변환하는 방법을 보여주었습니다.

매핑 템플릿을 사용하면 API Gateway와 Amazon SageMaker간에 중간 컴퓨팅 리소스를 사용하지 않아도됩니다. 결과적으로 애플리케이션의 대기 시간 및 운영 복잡성을 줄입니다. API Gateway Mapping 템플릿은 중간 계산을 피할 수없는 상황에서도 유용합니다. 여전히 컴퓨팅 계층의로드를 줄이기 위해 사전 처리 및 사후 처리를 수행하는 데 사용할 수 있습니다.

이 접근법은 다양한 애플리케이션에서 볼 수 있듯이 지연 시간이 짧은 유추로 대량 피크 수요가 필요한 사례에 특히 유용합니다.

Mike Rizzo는 영국에있는 AWS EMEA Commercial 팀의 수석 솔루션 아키텍트입니다. 그는 박사 학위를 가지고 있습니다. University of Kent에서 컴퓨터 과학을 전공했으며 London Business School에서 MBA를 취득했습니다.

이 글은 AWS Machine Learning 블로그의 Creating a machine learning-powered REST API with Amazon API Gateway mapping templates and Amazon SageMaker 한국어 번역입니다.