자습서: HTTP 비 프록시 통합을 사용하여 REST API 빌드 - Amazon API Gateway

자습서: HTTP 비 프록시 통합을 사용하여 REST API 빌드

이 자습서에서는 Amazon API Gateway 콘솔을 사용하여 API를 완전히 새로 생성합니다. 콘솔을 API 설계 스튜디오로 간주해 이를 사용하여 API 기능의 범위를 정하고, 동작을 시험하고, API를 구축하고, 단계별로 API를 배포합니다.

HTTP 사용자 지정 통합을 사용하여 API 만들기

이 단원에서는 리소스 생성, 리소스에서 메서드 노출, 원하는 API 동작을 위한 메서드 구성, API 테스트 및 배포 등을 단계별로 살펴봅니다.

  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API Gateway를 처음 사용하는 경우, 서비스의 기능을 소개하는 페이지가 나타납니다. REST API에서 [빌드]를 선택합니다. 예제 API 생성 팝업이 나타나면 확인을 선택합니다.

    API Gateway를 처음 사용하는 것이 아닌 경우 API 생성(Create API)을 선택합니다. REST API에서 [빌드]를 선택합니다.

    1. 새 API(New API)를 선택합니다.

    2. [API Name]에 이름을 입력합니다.

    3. 선택적으로, 설명에 간략한 설명을 추가합니다.

    4. API 생성(Create API)을 선택합니다.

    그러면 빈 API가 생성됩니다. 리소스 트리에 메서드 없는 루트 리소스(/)가 표시됩니다. 이 연습에서는 PetStore 웹 사이트(http://petstore-demo-endpoint.execute-api.com/petstore/pets)의 HTTP 사용자 지정 통합을 사용하여 API를 구축합니다. 설명을 돕기 위해, 루트의 하위 항목으로 /pets 리소스를 생성하고, 이 리소스의 GET 메서드를 클라이언트에 공개하여 PetStore 웹사이트에서 판매 중인 Pets 품목의 목록을 가져오겠습니다.

  3. /pets 리소스를 생성하려면 루트를 선택하고 작업을 선택한 다음 리소스 생성(Create Resource)을 선택합니다.

    리소스 이름Pets를 입력하고, 리소스 경로(Resource Path) 값은 그대로 두고, API Gateway CORS 활성화(Enable API Gateway CORS)리소스 생성(Create Resource)을 선택합니다.

    
                        리소스 생성 파트 b
  4. /pets 리소스에 GET 메서드를 공개하려면 작업을 선택한 다음 메서드 생성(Create Method)을 선택합니다.

    
                        리소스에 메서드 생성

    /pets 리소스 노드의 목록에서 GET을 선택하고 확인 표시 아이콘을 선택해 메서드 생성을 완료합니다.

    
                        리소스에 메서드 생성
    참고

    API 메서드의 다른 옵션에는 다음이 포함됩니다.

    • POST는 주로 하위 리소스를 생성하는 데 사용됩니다.

    • PUT은 주로 기존 리소스를 업데이트하는 데 사용되며, 권장되지는 않지만 하위 리소스를 생성하는 데에도 사용될 수 있습니다.

    • DELETE는 리소스를 삭제하는 데 사용됩니다.

    • PATCH는 리소스를 업데이트하는 데 사용됩니다.

    • HEAD는 주로 시나리오를 테스트하는 데 사용됩니다. GET와 동일하지만 리소스 표현을 반환하지 않습니다.

    • OPTIONS는 호출자가 타겟 서비스에 사용 가능한 통신 옵션에 대한 정보를 가져오는 데 사용할 수 있습니다.

    생성된 메서드는 아직 백엔드와 통합되지 않습니다. 다음 단계에 이를 설정합니다.

  5. 메서드의 Setup(설정) 창에서 Integration type(통합 유형)HTTP를 선택하고, HTTP method(HTTP 메서드) 드롭다운 목록에서 GET을 선택하고, Endpoint URL(엔드포인트 URL) 값으로 http://petstore-demo-endpoint.execute-api.com/petstore/petshttp://petstore-demo-endpoint.execute-api.com/petstore/pets를 입력하고, 다른 모든 설정은 기본값으로 둔 후, 저장장을 선택합니다.

    참고

    통합 요청의 HTTP 메서드(HTTP method)에 백엔드에서 지원하는 항목을 선택해야 합니다. HTTP 또는 Mock integration의 경우, 메서드 요청과 통합 요청이 동일한 HTTP 동사를 사용하는 것이 합리적입니다. 다른 통합 유형 및 메서드 요청의 경우, 통합 요청과 다른 HTTP 동사를 사용할 가능성이 높습니다. 예를 들어 Lambda 함수를 호출하기 위해 통합 요청은 POST를 이용해 함수를 호출해야 하는 반면, 메서드 요청은 Lambda 함수의 로직에 따라 임의의 HTTP 동사를 사용할 수 있습니다.

    
                        Pets에서 GET와 PetStore 사이트 통합

    메서드 설정이 완료되면 메서드 실행(Method Execution) 창이 나타나 메서드 요청을 추가로 구성하여 쿼리 문자열이나 사용자 지정 헤더 파라미터를 추가할 수 있습니다. 통합 요청을 업데이트하여 메서드 요청의 입력 데이터를 백엔드에서 요구한 형식으로 매핑할 수 있습니다.

    PetStore 웹사이트 페이지에서 반려 동물 유형별로(예: "개" 또는 "고양이") Pet 품목의 목록을 가져올 수 있습니다. 웹사이트는 typepage 쿼리 문자열 파라미터를 사용해 이러한 입력을 수락합니다. 이와 같이 메서드 요청에 쿼리 문자열 파라미터를 추가하고, 통합 요청의 해당 쿼리 문자열에 매핑해야 합니다.

  6. GET 메서드의 메서드 실행(Method Execution) 창에서 메서드 요청(Method Request)을 선택하고, 권한 부여(Authorization)AWS_IAM을 선택한 후 URL 쿼리 문자열 파라미터(URL Query String Parameters) 섹션을 확장하고, 쿼리 문자열 추가(Add query string)를 선택해 typepage라는 이름의 두 쿼리 문자열 파라미터를 생성합니다. 확인 표시 아이콘을 선택하여 새로 추가한 각각의 쿼리 문자열 파라미터를 저장합니다.

    
                        pets 메서드 요청에서 GET에 쿼리 문자열 추가

    이제 클라이언트는 요청을 제출할 때 반려 동물 유형과 페이지 번호를 쿼리 문자열 파라미터로 제공할 수 있습니다. 이러한 입력 파라미터를 통합의 쿼리 문자열 파라미터에 매핑하여 백엔드에서 PetStore 웹사이트에 입력 값을 전달해야 합니다. 메서드는 AWS_IAM을 사용하기 때문에 요청을 보내 메서드를 호출해야 합니다.

  7. 메서드의 통합 요청(Integration Request) 페이지에서 URL 쿼리 문자열 파라미터(URL Query String Parameters) 섹션을 확장합니다. 기본적으로 메서드 요청 쿼리 문자열 파라미터는 비슷한 이름의 통합 요청 쿼리 문자열 파라미터에 매핑됩니다. 이 기본 매핑은 데모 API에서 작동합니다. 이 값은 그대로 유지하겠습니다. 다른 메서드 요청 파라미터를 해당 통합 요청 파라미터에 매핑하려면, 다음에서 매핑됨(Mapped from) 열에 표시된 대로 파라미터의 연필 아이콘을 선택하여 매핑 표현식을 편집합니다. 메서드 요청 파라미터를 다른 통합 요청 파라미터에 매핑하려면, 먼저 삭제 아이콘을 선택해 기존 통합 요청 파라미터를 삭제하고 쿼리 문자열 추가(Add query string)를 선택해 새 이름과 원하는 메서드 요청 파라미터 매핑 표현식을 지정합니다.

    
                        메서드 요청에서 통합 요청으로 pets에서 GET로 쿼리 문자열 매핑

    이렇게 하면 단순한 데모 API 구축이 완료됩니다. 이제 API를 테스트할 시간입니다.

  8. API Gateway 콘솔을 이용해 API를 테스트하려면 메서드 실행(Method Execution) 창에서 GET /pets 메서드에 테스트(Test)를 선택합니다. Method Test(메서드 테스트) 창에서 유형page(페이지) 쿼리 문자열에 각각 Dog2를 입력한 후 테스트를 선택합니다.

    결과는 다음과 같습니다. (테스트 결과가 보이려면 아래로 스크롤해야 할 수 있습니다.)

    
                        pets 메서드 결과에 GET 호출 테스트

    테스트에 성공했으므로, API를 배포해 공개적으로 사용 가능하도록 할 수 있습니다.

  9. API를 배포하려면 API를 선택한 후 작업 드롭다운 메뉴에서 API 배포를 선택합니다.

    
                        API 배포

    Deploy API(API 배포) 대화창에서 단계(또는 API의 첫 번째 배포에 대한 [New Stage])를 선택하고, Stage name(단계 이름) 입력 필드에 이름(예: 'test', 'prod', 'dev' 등)을 입력하고, 필요에 따라 Stage description(단계 이름) 및/또는 Deployment description(배포 설명)에 설명을 입력한 후 배포를 선택합니다.

    
                        API 배포 파트 2

    API가 배포되면 API의 엔드포인트의 호출 URL(URL 호출(Invoke URL))을 얻을 수 있습니다.

    GET 메서드가 개방 액세스를 지원한 경우(예: 메서드의 권한 부여 유형이 NONE으로 설정된 경우) URL 호출(Invoke URL) 링크를 두 번 클릭하여 기본 브라우저에서 메서드를 호출할 수 있습니다. 경우에 따라, 호출 URL에 필요한 쿼리 문자열 파라미터를 추가할 수도 있습니다. 여기에 설명된 AWS_IAM 권한 부여 유형을 이용해 AWS 계정을 가진 IAM 사용자의 액세스 키 ID 및 해당 암호 키로 요청에 서명해야 합니다. 이렇게 하려면 서명 버전 4(SigV4) 프로토콜을 지원하는 클라이언트를 사용해야 합니다. 이러한 클라이언트의 예로, AWS SDK 또는 Postman 애플리케이션이나 cURL 명령 중 하나를 사용하는 앱을 들 수 있습니다. 페이로드를 취하는 POST, PUT 또는 PATCH 메서드를 호출하려는 경우에도 이러한 클라이언트를 사용하여 페이로드를 처리해야 합니다.

    Postman에서 이 API 메서드를 호출하려면 쿼리 문자열 파라미터를 단계별 메서드 호출 URL에 추가해(앞의 이미지에서 본 바와 같이) 전체 메서드 요청 URL을 생성합니다.

    https://api-id.execute-api.region.amazonaws.com/test/pets?type=Dog&page=2

    브라우저의 주소 표시줄에 이 URL을 지정합니다. GET을 HTTP 동사로 선택합니다. 권한 부여(Authorization) 탭에서 유형 옵션에 AWS 서명(AWS Signature)을 선택한 후, 요청을 보내기 전에 다음과 같이 필요한 속성을 지정합니다.

    • AWS IAM에서 프로비저닝한 바와 같이, AccessKey에 호출자의 AWS 액세스 키를 입력합니다.

    • 액세스 키가 처음 생성되었을 때 AWS IAM에서 프로비저닝한 바와 같이, SecretKey에 호출자의 AWS 암호 키를 입력합니다.

    • 호출 URL에서 지정한 바와 같이, AWS 리전(AWS Region)에 API가 호스팅하는 AWS 리전을 입력합니다.

    • 서비스 이름(Service Name)에 API Gateway 실행 서비스에 대한 execute-api를 입력합니다.

    SDK를 이용해 클라이언트를 생성하면 SDK가 공개한 메서드를 호출하여 요청을 보낼 수 있습니다. 구현 세부 정보는 선택한 AWS SDK를 참조하십시오.

    참고

    API가 변경되면 API를 다시 배포하여 새 기능 또는 업데이트된 기능을 사용할 수 있도록 한 후 요청 URL을 다시 호출해야 합니다.

API Gateway API에 대한 요청 파라미터 매핑

이 연습에서는 메서드 요청 파라미터를 API Gateway API에 대한 해당 통합 요청 파라미터에 매핑하는 방법에 대해 설명합니다. HTTP 사용자 지정 통합을 사용하여 예제 API를 생성하고 이를 통해 API Gateway를 사용하여 메서드 요청 파라미터를 해당하는 통합 요청 파라미터에 매핑하는 방법을 보여줍니다. 그런 다음 다음과 같이 공개적으로 액세스할 수 있는 HTTP 엔드포인트에 액세스합니다.

http://petstore-demo-endpoint.execute-api.com/petstore/pets

위 URL을 복사하여 웹 브라우저의 주소 표시줄에 붙여넣고 Enter 또는 Return을 누르면 다음과 같은 JSON 형식의 응답 본문이 표시됩니다.

[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

위의 엔드포인트는 2개의 쿼리 파라미터, 즉 typepage를 가질 수 있습니다. 예를 들어 URL을 다음과 같이 변경합니다.

http://petstore-demo-endpoint.execute-api.com/petstore/pets?type=cat&page=2

다음 JSON 형식의 응답 페이로드를 수신하여 cats의 2페이지만 표시합니다.

[ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]

또한 이 엔드포인트는 URL 경로 파라미터로 표시되는 항목 ID 사용을 지원합니다. 예를 들어 다음을 탐색합니다.

http://petstore-demo-endpoint.execute-api.com/petstore/pets/1

ID가 1인 항목에 대한 JSON 형식의 다음 정보가 표시됩니다.

{ "id": 1, "type": "dog", "price": 249.99 }

이 엔드포인트는 GET 작업을 지원하는 것 외에도 페이로드가 있는 POST 요청을 받습니다. 예를 들어 Postman을 사용하여 POST 메서드 요청을 다음으로 전송합니다.

http://petstore-demo-endpoint.execute-api.com/petstore/pets

헤더 Content-type: application/json 및 다음 요청 본문을 포함합니다.

{ "type": "dog", "price": 249.99 }

응답 본문에 다음 JSON 객체가 수신됩니다.

{ "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

이제 이 PetStore 웹 사이트의 HTTP 사용자 지정 통합을 통해 API Gateway API를 구축하여 이 기능 및 다른 기능을 공개합니다. 작업에는 다음이 포함됩니다.

  • https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets의 HTTP 엔드포인트에 대한 프록시 역할을 하는 http://petstore-demo-endpoint.execute-api.com/petstore/pets의 리소스를 사용하여 API를 작성합니다.

  • API가 petTypepetsPage의 두 가지 메서드 요청 쿼리 파라미터를 수락하고, 이를 통합 요청의 typepage 쿼리 파라미터에 각각 매핑하고, 요청을 HTTP 엔드포인트에 전달할 수 있게 합니다.

  • 항목 ID를 지정하고, 이를 통합 요청 URL의 {petId} 경로 파라미터에 매핑하고, 요청을 HTTP 엔드포인트로 보내려면 API의 메서드 요청 URL에서 {id}의 경로 파라미터를 지원하십시오.

  • 백엔드 웹 사이트에서 정의한 형식의 JSON 페이로드를 수락하도록 메서드 요청을 사용 가능하게 하고 백엔드 HTTP 엔드포인트에 대한 통합 요청을 통해 페이로드를 수정하지 않고 전달합니다.

참고

이 연습의 단계에서 사용된 대소문자에 주의하십시오. 대문자 대신 소문자를 입력하거나 그 반대로 입력하면 연습 뒷부분에서 오류가 발생할 수 있습니다.

사전 조건

이 연습을 시작하기 전에 다음 작업을 수행해야 합니다.

  1. IAM 사용자에 대한 API Gateway 액세스 권한 부여를 포함하여 사전 조건: API Gateway에서 API 구축 준비의 단계를 완료합니다.

  2. 최소한, 자습서: HTTP 비 프록시 통합을 사용하여 REST API 빌드에 명시된 단계에 따라 API Gateway 콘솔에서 MyDemoAPI라는 새 API를 생성합니다.

1단계: 리소스 생성

이 단계에서는 API가 HTTP 엔드포인트와 상호 작용할 수 있도록 세 가지 리소스를 생성합니다.

첫 번째 리소스 생성 방법

  1. 리소스 창에서 슬래시 하나(/)로 표현된 리소스 루트를 선택한 다음, 작업 드롭다운 메뉴에서 리소스 생성(Create Resource)을 선택합니다.

  2. 리소스 이름(Resource Name)petstorewalkthrough를 입력합니다.

  3. 리소스 경로(Resource Path)에서 기본값 /petstorewalkthrough를 그대로 적용한 다음, 리소스 생성(Create Resource)를 선택합니다.

두 번째 리소스 생성 방법

  1. 리소스(Resources) 창에서 /petstorewalkthrough를 선택한 다음 리소스 생성(Create Resource)을 선택합니다.

  2. 리소스 이름(Resource Name)pets를 입력합니다.

  3. 리소스 경로(Resource Path)에서 기본값 /petstorewalkthrough/pets를 그대로 적용한 다음, 리소스 생성(Create Resource)을 선택합니다.

세 번째 리소스 생성 방법

  1. 리소스(Resources) 창에서 /petstorewalkthrough/pets를 선택한 다음 리소스 생성(Create Resource)을 선택합니다.

  2. 리소스 이름(Resource Name)petId를 입력합니다. 그렇게 하면 HTTP 엔드포인트에 있는 항목 ID로 매핑됩니다.

  3. 리소스 경로(Resource Path)에서 petid{petId}로 덮어씁니다. /petstorewalkthrough/pets/{petId}가 표시되도록 petId에 중괄호({ })를 사용한 다음 리소스 생성(Create Resource)을 선택합니다.

    그렇게 하면 HTTP 엔드포인트에 있는 /petstore/pets/my-item-id로 매핑됩니다.

2단계: 메서드 생성 및 테스트

이 단계에서는 메서드를 백엔드 HTTP 엔드포인트와 통합하고 GET 메서드 요청 파라미터를 해당하는 통합 요청 파라미터에 매핑한 다음 메서드를 테스트합니다.

첫 번째 GET 메서드 설정 및 테스트 방법

이 절차에서는 다음을 설명합니다.

  • GET http://petstore-demo-endpoint.execute-api.com/petstore/pets의 통합 요청과 더불어 GET /petstorewalkthrough/pets의 메서드 요청을 생성하고 통합합니다.

  • petTypepetsPage의 메서드 요청 쿼리 파라미터를 각각 typepage의 통합 요청 쿼리 문자열 파라미터에 매핑합니다.

  1. 리소스(Resources) 창에서 /petstorewalkthrough/pets를 선택하고, 작업(Actions) 메뉴에서 메서드 생성(Create Method)을 선택한 다음, 메서드 이름 드롭다운 목록의 /pets에서 GET을 선택합니다.

  2. /petstorewalkthrough/pets - GET - Setup 창의 통합 유형(Integration type)에서 HTTP를 선택하고 HTTP 메서드(HTTP method)에서 GET을 선택합니다.

  3. 엔드포인트 URL(Endpoint URL)에서 http://petstore-demo-endpoint.execute-api.com/petstore/pets를 입력합니다.

  4. Save를 선택합니다.

  5. 메서드 실행(Method Execution) 창에서 메서드 요청(Method Request)을 선택한 다음, URL 쿼리 문자열 파라미터(URL Query String Parameters) 옆에 있는 화살표를 선택합니다.

  6. 쿼리 문자열 추가(Add query string)를 선택합니다.

  7. 이름(Name)petType을 입력합니다.

    그렇게 하면 petType 쿼리 파라미터가 API의 메서드 요청에 지정됩니다.

  8. 확인 표시 아이콘을 선택하여 메서드 요청 URL 쿼리 문자열 파라미터의 생성을 완료합니다.

  9. 쿼리 문자열 추가(Add query string)를 다시 선택합니다.

  10. 이름(Name)petsPage를 입력합니다.

    그렇게 하면 petsPage 쿼리 파라미터가 API의 메서드 요청에 지정됩니다.

  11. 확인 표시 아이콘을 선택하여 메서드 요청 URL 쿼리 문자열 파라미터의 생성을 완료합니다.

  12. 메서드 실행(Method Execution)을 선택하고, 통합 요청(Integration Request)을 선택한 다음, URL 쿼리 문자열 파라미터(URL Query String Parameters) 옆에 있는 화살표를 선택합니다.

  13. method.request.querystring.petType에서 매핑된 petType 입력과 method.request.querystring.petsPage에서 매핑된 petsPage 입력을 삭제합니다. 엔드포인트에는 요청 URL에 대해 기본값 대신 typepage라는 쿼리 문자열 파라미터가 필요하기 때문에 이 단계를 수행합니다.

  14. 쿼리 문자열 추가(Add query string)를 선택합니다.

  15. 이름(Name)type을 입력합니다. 그러면 통합 요청 URL에 대한 필수 쿼리 문자열 파라미터가 생성됩니다.

  16. 다음에서 매핑됨(Mapped from)method.request.querystring.petType을 입력합니다.

    그렇게 하면 메서드 요청의 petType 쿼리 파라미터가 통합 요청의 type 쿼리 파라미터에 매핑됩니다.

  17. 확인 표시 아이콘을 선택하여 통합 요청 URL 쿼리 문자열 파라미터의 생성을 완료합니다.

  18. 쿼리 문자열 추가(Add query string)를 다시 선택합니다.

  19. 이름(Name)page를 입력합니다. 그러면 통합 요청 URL에 대한 필수 쿼리 문자열 파라미터가 생성됩니다.

  20. 다음에서 매핑됨(Mapped from)method.request.querystring.petsPage를 입력합니다.

    그렇게 하면 메서드 요청의 petsPage 쿼리 파라미터가 통합 요청의 page 쿼리 파라미터에 매핑됩니다.

  21. 확인 표시 아이콘을 선택하여 통합 요청 URL 쿼리 문자열 파라미터의 생성을 완료합니다.

  22. Method Execution(메서드 실행)을 선택합니다. Client(클라이언트) 상자에서 TEST를 선택합니다. Query Strings(쿼리 문자열) 영역의 petType에서 cat을 입력합니다. petsPage2를 입력합니다.

  23. [Test]를 선택합니다. 올바르게 수행했다면 요청 본문(Response Body)에 다음이 표시됩니다.

    [ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]

두 번째 GET 메서드 설정 및 테스트 방법

이 절차에서는 다음을 설명합니다.

  • GET http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}의 통합 요청과 더불어 GET /petstorewalkthrough/pets/{petId}의 메서드 요청을 생성하고 통합합니다.

  • petId의 메서드 요청 경로 파리미터를 id의 통합 요청 경로 파라미터로 매핑합니다.

  1. 리소스(Resources) 목록에서 /petstorewalkthrough/pets/{petId}를 선택하고, 작업(Actions) 드롭다운 메뉴에서 메서드 생성(Create Method)을 선택한 다음 GET을 해당 메서드의 HTTP 동사로 선택합니다.

  2. 설정(Setup) 창의 통합 유형(Integration type)에서 HTTP를 선택하고 HTTP 메서드(HTTP method)에서 GET을 선택합니다.

  3. 엔드포인트 URL(Endpoint URL)에서 http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}를 입력합니다.

  4. Save를 선택합니다.

  5. 메서드 실행(Method Execution) 창에서 통합 요청(Integration Request)을 선택한 다음, URL 경로 파라미터(URL Path Parameters) 옆에 있는 화살표를 선택합니다.

  6. 경로 추가(Add path)를 선택합니다.

  7. Nameid를 입력합니다.

  8. 다음에서 매핑됨(Mapped from)method.request.path.petId를 입력합니다.

    그렇게 하면 petId의 메서드 요청 경로 파리미터가 id의 통합 요청 경로 파라미터로 매핑됩니다.

  9. 확인 표시 아이콘을 선택하여 URL 경로 파라미터의 생성을 완료합니다.

  10. 메서드 실행(Method Execution)을 선택하고 클라이언트(Client) 상자에서 TEST를 선택합니다. 경로 영역의 petId1을 입력합니다.

  11. [Test]를 선택합니다. 올바르게 수행했다면 요청 본문(Response Body)에 다음이 표시됩니다.

    { "id": 1, "type": "dog", "price": 249.99 }

POST 메서드 설정 및 테스트 방법

이 절차에서는 다음을 설명합니다.

  • POST http://petstore-demo-endpoint.execute-api.com/petstore/pets의 통합 요청과 더불어 POST /petstorewalkthrough/pets의 메서드 요청을 생성하고 통합합니다.

  • 메서드 요청 JSON 페이로드를 수정하지 않고 통합 요청 페이로드에 전달합니다.

  1. 리소스(Resources) 창에서 /petstorewalkthrough/pets를 선택하고, 작업(Actions) 드롭다운 메뉴에서 메서드 생성(Create Method)을 선택한 다음 POST를 해당 메서드의 HTTP 동사로 선택합니다.

  2. 설정(Setup) 창의 통합 유형(Integration type)에서 HTTP를 선택하고 HTTP 메서드(HTTP method)에서 POST를 선택합니다.

  3. 엔드포인트 URL(Endpoint URL)에서 http://petstore-demo-endpoint.execute-api.com/petstore/pets를 입력합니다.

  4. Save를 선택합니다.

  5. 메서드 실행(Method Execution) 창의 클라이언트(Client) 상자에서 TEST를 선택합니다. 요청 본문(Request Body)을 확장하고 다음을 입력합니다.

    { "type": "dog", "price": 249.99 }
  6. [Test]를 선택합니다. 올바르게 수행했다면 요청 본문(Response Body)에 다음이 표시됩니다.

    { "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

3단계: API 배포

이 단계에서는 API를 API Gateway 콘솔 외부에서 호출을 시작할 수 있도록 배포합니다.

API를 배포하려면

  1. 리소스 창에서 API 배포를 선택합니다.

  2. 배포 단계(Deployment stage)에서 test를 선택합니다.

    참고

    입력은 UTF-8로 인코딩된(현지화되지 않은) 텍스트여야 합니다.

  3. Deployment description(배포 설명)Calling HTTP endpoint walkthrough를 입력합니다.

  4. 배포를 선택합니다.

4단계: API 테스트

이 단계에서는 API Gateway 콘솔 외부로 이동하고 API를 사용하여 HTTP 엔드포인트에 액세스합니다.

  1. URL 호출(Invoke URL) 옆에 있는 단계 편집기(Stage Editor) 창에서 URL을 클립보드로 복사합니다. 다음과 같아야 합니다.

    https://my-api-id.execute-api.region-id.amazonaws.com/test
  2. 이 URL을 새 브라우저 탭의 주소 표시줄에 붙여 넣습니다.

  3. /petstorewalkthrough/pets을 추가하여 다음과 같이 되도록 정합니다.

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    해당 URL로 이동합니다. 다음 정보가 표시되어야 합니다.

    [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
  4. petstorewalkthrough/pets 뒤에 ?petType=cat&petsPage=2를 입력하여 다음과 같이 되도록 합니다.

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets?petType=cat&petsPage=2
  5. 해당 URL로 이동합니다. 다음 정보가 표시되어야 합니다.

    [ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]
  6. petstorewalkthrough/pets 뒤의 ?petType=cat&petsPage=2/1으로 교체하여 다음과 같이 되도록 합니다.

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets/1
  7. 해당 URL로 이동합니다. 다음 정보가 표시되어야 합니다.

    { "id": 1, "type": "dog", "price": 249.99 }
  8. 웹 디버깅 프록시 도구 또는 cURL 명령줄 도구를 사용하여 POST 메서드 요청을 이전 절차에서 URL로 전송합니다. /petstorewalkthrough/pets을 추가하여 다음과 같이 되도록 정합니다.

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    다음 헤더를 추가합니다.

    Content-Type: application/json

    다음 코드를 요청 본문에 추가합니다.

    { "type": "dog", "price": 249.99 }

    예를 들어, cURL 명령줄 도구를 사용하는 경우 다음과 비슷한 명령을 실행합니다.

    curl -H "Content-Type: application/json" -X POST -d "{\"type\": \"dog\",\"price\": 249.99}" https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    응답 본문에 다음의 정보가 반환되어야 합니다.

    { "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

이 연습을 마칩니다.

맵 응답 페이로드

이 연습에서는 API Gateway에서 모델 및 매핑 템플릿을 사용하여 API 호출의 출력을 한 데이터 스키마에서 다른 데이터 스키마로 변환하는 방법을 보여줍니다. 이 연습은 Amazon API Gateway 시작하기API Gateway API에 대한 요청 파라미터 매핑의 지침 및 개념을 기반으로 합니다. 아직 연습을 완료하지 못했다면 먼저 완료하는 것이 좋습니다.

이 연습에서는 API Gateway를 사용하여 공개적으로 액세스 가능한 HTTP 엔드포인트 및 생성한 Lambda 함수에서 예제 데이터를 가져옵니다. HTTP 엔드포인트 및 Lambda 함수에서 모두 동일한 예제 데이터를 반환합니다.

[ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

모델 및 매핑 템플릿을 사용하여 이 데이터를 하나 이상의 출력 형식으로 변환합니다. API Gateway에서 모델은 일부 데이터의 형식(스키마 또는 형태라고도 함)을 정의합니다. API Gateway에서 매핑 템플릿은 일부 데이터를 한 형식에서 다른 형식으로 변환하는 데 사용됩니다. 자세한 내용은 모델 및 매핑 템플릿 작업 단원을 참조하십시오.

첫 번째 모델 및 매핑 템플릿을 사용하여 idnumber로, typeclass로, pricesalesPrice로 다음과 같이 변경합니다.

[ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]

두 번째 모델 및 매핑 템플릿을 사용하여 다음과 같이 idtypedescription으로 결합하고 priceaskingPrice로 이름을 변경합니다.

[ { "description": "Item 1 is a dog.", "askingPrice": 249.99 }, { "description": "Item 2 is a cat.", "askingPrice": 124.99 }, { "description": "Item 3 is a fish.", "askingPrice": 0.99 } ]

세 번째 모델 및 매핑 템플릿을 사용하여 다음과 같이 id, typepricelistings 세트로 결합합니다.

{ "listings": [ "Item 1 is a dog. The asking price is 249.99.", "Item 2 is a cat. The asking price is 124.99.", "Item 3 is a fish. The asking price is 0.99." ] }

1단계: 모델 생성

이 단계에서는 4개 모델을 생성합니다. 처음 세 모델은 HTTP 엔드포인트 및 Lambda 함수와 함께 사용할 데이터 출력 형식을 나타냅니다. 마지막 모델은 Lambda 함수와 함께 사용할 데이터 입력 스키마를 나타냅니다.

첫 번째 출력 모델 생성 방법

  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. MyDemoAPI가 표시되면 모델(Models)을 선택합니다.

  3. Create를 선택합니다.

  4. 모델 이름(Model name)PetsModelNoFlatten을 입력합니다.

  5. 콘텐츠 유형application/json을 입력합니다.

  6. 설명Changes id to number, type to class, and price to salesPrice를 입력합니다.

  7. 모델 스키마(Model schema)에서 다음의 JSON 스키마 호환 정의를 입력합니다.

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelNoFlatten", "type": "array", "items": { "type": "object", "properties": { "number": { "type": "integer" }, "class": { "type": "string" }, "salesPrice": { "type": "number" } } } }
  8. 모델 생성을 선택합니다.

두 번째 출력 모델 생성 방법

  1. Create를 선택합니다.

  2. 모델 이름(Model name)PetsModelFlattenSome을 입력합니다.

  3. 콘텐츠 유형application/json을 입력합니다.

  4. 모델 설명Combines id and type into description, and changes price to askingPrice를 입력합니다.

  5. 모델 스키마(Model schema)에서 다음을 입력합니다.

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelFlattenSome", "type": "array", "items": { "type": "object", "properties": { "description": { "type": "string" }, "askingPrice": { "type": "number" } } } }
  6. 모델 생성을 선택합니다.

세 번째 출력 모델 생성 방법

  1. Create를 선택합니다.

  2. 모델 이름(Model name)PetsModelFlattenAll을 입력합니다.

  3. 콘텐츠 유형application/json을 입력합니다.

  4. 모델 설명Combines id, type, and price into a set of listings를 입력합니다.

  5. 모델 스키마(Model schema)에서 다음을 입력합니다.

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsModelFlattenAll", "type": "object", "properties": { "listings": { "type": "array", "items": { "type": "string" } } } }
  6. 모델 생성을 선택합니다.

입력 모델 생성 방법

  1. Create를 선택합니다.

  2. 모델 이름(Model name)PetsLambdaModel을 입력합니다.

  3. 콘텐츠 유형application/json을 입력합니다.

  4. 모델 설명(Model description)GetPetsInfo model을 입력합니다.

  5. 모델 스키마(Model schema)에서 다음을 입력합니다.

    { "$schema": "http://json-schema.org/draft-04/schema#", "title": "PetsLambdaModel", "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer" }, "type": { "type": "string" }, "price": { "type": "number" } } } }
  6. 모델 생성을 선택합니다.

2단계: 리소스 생성

이 단계에서는 4개 리소스를 생성합니다. 처음 세 가지 리소스를 사용하면 세 가지 출력 형식으로 HTTP 엔드포인트에서 예제 데이터를 가져올 수 있습니다. 마지막 리소스를 사용하면 idtypedescription으로 결합하고 price라는 이름을 askingPrice로 변경하는 출력 스키마에서 Lambda 함수의 예제 데이터를 가져올 수 있습니다.

첫 번째 리소스 생성 방법

  1. 링크 목록에서 리소스를 선택합니다.

  2. 리소스(Resources) 창에서 /petstorewalkthrough를 선택한 다음 리소스 생성(Create Resource)을 선택합니다.

  3. 리소스 이름(Resource Name)NoFlatten을 입력합니다.

  4. 리소스 경로(Resource Path)에서 기본값 /petstorewalkthrough/noflatten을 그대로 적용한 다음, 리소스 생성(Create Resource)을 선택합니다.

두 번째 리소스 생성 방법

  1. 리소스(Resources) 창에서 /petstorewalkthrough를 다시 선택한 다음 리소스 생성(Create Resource)을 선택합니다.

  2. 리소스 이름(Resource Name)FlattenSome을 입력합니다.

  3. 리소스 경로(Resource Path)에서 기본값 /petstorewalkthrough/flattensome을 그대로 적용한 다음, 리소스 생성(Create Resource)을 선택합니다.

세 번째 리소스 생성 방법

  1. 리소스(Resources) 창에서 /petstorewalkthrough를 다시 선택한 다음 리소스 생성(Create Resource)을 선택합니다.

  2. 리소스 이름(Resource Name)FlattenAll을 입력합니다.

  3. 리소스 경로(Resource Path)에서 기본값 /petstorewalkthrough/flattenall을 그대로 적용한 다음, 리소스 생성(Create Resource)을 선택합니다.

네 번째 리소스 생성 방법

  1. 리소스(Resources) 창에서 /petstorewalkthrough를 다시 선택한 다음 리소스 생성(Create Resource)을 선택합니다.

  2. 리소스 이름(Resource Name)LambdaFlattenSome을 입력합니다.

  3. 리소스 경로(Resource Path)에서 기본값 /petstorewalkthrough/lambdaflattensome을 그대로 적용한 다음, 리소스 생성(Create Resource)을 선택합니다.

3단계: GET 메서드 생성

이 단계에서는 이전 단계에서 생성한 각 리소스에 대해 GET 메서드를 생성합니다.

첫 번째 GET 메서드 생성 방법

  1. 리소스(Resources) 목록에서 /petstorewalkthrough/flattenall을 선택한 다음 메서드 생성(Create Method)을 선택합니다.

  2. 드롭다운 목록에서 GET을 선택한 다음 확인 표시 아이콘을 선택하여 선택한 메서드를 저장합니다.

  3. 설정 창의 통합 유형(Integration type)에서 HTTP를, HTTP 메서드(HTTP method)에서 GET을 선택하고, 엔드포인트 URL(Endpoint URL)에서 http://petstore-demo-endpoint.execute-api.com/petstore/pets를 입력한 다음 저장(Save)을 선택합니다.

두 번째 GET 메서드 생성 방법

  1. 리소스(Resources) 목록에서 /petstorewalkthrough/lambdaflattensome을 선택한 다음 메서드 생성(Create Method)을 선택합니다.

  2. 드롭다운 목록에서 GET을 선택한 다음 확인 표시를 선택하여 선택 사항을 저장합니다.

  3. 설정 창의 통합 유형(Integration type)에서 Lambda 함수(Lambda Function)를, Lambda 리전(Lambda Region) 드롭다운 목록에서GetPetsInfo Lambda 함수를 생성했던 리전을 선택한 다음, Lambda 함수(Lambda Function)에서 GetPetsInfo를 선택하고, 저장(Save)을 선택합니다. Lambda 함수에 대한 권한을 추가할 것인지를 묻는 메시지가 나타나면 확인(OK)을 선택합니다.

세 번째 GET 메서드 생성 방법

  1. 리소스(Resources) 목록에서 /petstorewalkthrough/flattensome을 선택한 다음 메서드 생성(Create Method)을 선택합니다.

  2. 드롭다운 목록에서 GET을 선택한 다음 확인 표시 아이콘을 선택하여 선택한 메서드를 저장합니다.

  3. 설정 창의 통합 유형(Integration type)에서 HTTP를, HTTP 메서드(HTTP method)에서 GET을 선택하고, 엔드포인트 URL(Endpoint URL)에서 http://petstore-demo-endpoint.execute-api.com/petstore/pets를 입력한 다음 저장(Save)을 선택합니다.

네 번째 GET 메서드 생성 방법

  1. 리소스(Resources) 목록에서 /petstorewalkthrough/noflatten을 선택한 다음 작업(Actions), 메서드 생성(Create Method)을 선택합니다.

  2. 드롭다운 목록에서 GET을 선택한 다음 확인 표시 아이콘을 선택하여 선택한 메서드를 저장합니다.

  3. 설정 창의 통합 유형(Integration type)에서 HTTP를, HTTP 메서드(HTTP method)에서 GET을 선택하고, 엔드포인트 URL(Endpoint URL)에서 http://petstore-demo-endpoint.execute-api.com/petstore/pets를 입력한 다음 저장(Save)을 선택합니다.

4단계: Lambda 함수 생성

이 단계에서는 샘플 데이터를 반환하는 Lambda 함수를 생성합니다.

Lambda 함수를 생성하려면

  1. https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  2. 다음 중 하나를 수행하십시오.

    • 시작 페이지가 나타나면 지금 시작을 선택합니다.

    • Lambda: 함수 목록(Lambda: Function list) 페이지가 나타나면 Lambda 함수 생성(Create a Lambda function)을 선택합니다.

  3. 이름(Name)GetPetsInfo를 입력합니다.

  4. 설명Gets information about pets를 입력합니다.

  5. 코드 템플릿(Code template)에서 없음을 선택합니다.

  6. 다음 코드를 입력합니다.

    console.log('Loading event'); exports.handler = function(event, context, callback) { callback(null, [{"id": 1, "type": "dog", "price": 249.99}, {"id": 2, "type": "cat", "price": 124.99}, {"id": 3, "type": "fish", "price": 0.99}]); // SUCCESS with message };
    작은 정보

    Node.js로 작성된 앞서 설명한 코드에서는 console.log가 Amazon CloudWatch 로그에 정보를 기록합니다. event Lambda 함수에 대한 입력이 포함되어 있습니다. context는 호출 컨텍스트를 포함합니다. callback은 결과를 반환합니다. Lambda 함수 코드 작성 방법에 관한 상세 정보는 AWS Lambda: 사용 방법의 "프로그래밍 모델"과 AWS Lambda 개발자 안내서의 예제 안내를 참조하십시오.

  7. 핸들러 이름의 경우 기본값 index.handler를 그대로 둡니다.

  8. 역할(Role)에서 Lambda 통합을 사용하여 API Gateway REST API 구축에서 생성한 Lambda 실행 역할인 APIGatewayLambdaExecRole을 선택합니다.

  9. Create Lambda function을 선택합니다.

  10. 함수 목록에서 GetPetsInfo를 선택하여 함수의 세부 정보를 표시합니다.

  11. 이 함수를 생성한 AWS 리전을 적어 둡니다. 나중에 필요합니다.

  12. 팝업 목록에서 함수 편집 또는 테스트(Edit or test function)를 선택합니다.

  13. 샘플 이벤트(Sample event)에서 표시되는 모든 코드를 다음으로 대체합니다.

    { }
    작은 정보

    빈 중괄호는 이 Lambda 함수에 대한 입력 값이 없음을 의미합니다. 이 함수는 단순히 반려 동물 정보를 포함하는 JSON 객체를 반환하므로 여기에서는 키-값 페어가 필요하지 않습니다.

  14. 호출을 선택합니다. 실행 결과(Execution result)[{"id":1,"type":"dog","price":249.99},{"id":2,"type":"cat","price":124.99},{"id":3,"type":"fish","price":0.99}]을 나타내는데, 이는 CloudWatch Logs 로그 파일에도 기록됩니다.

  15. 함수 목록으로 이동(Go to function list)을 선택합니다.

5단계: 메서드 설정 및 테스트

이 단계에서는 메서드 응답, 통합 요청 및 통합 응답을 구성하여 HTTP 엔드포인트 및 Lambda 함수와 연결된 GET 메서드에 대한 입력 및 출력 데이터 스키마(또는 모델)를 지정합니다. API Gateway 콘솔을 사용하여 이러한 메서드의 호출을 테스트하는 방법도 알아봅니다.

첫 번째 GET 메서드에 대한 통합을 설정하고 테스트하는 방법

  1. API의 리소스(Resources) 트리에서 /petstorewalkthrough/flattenall 노드 아래의 GET을 선택합니다.

  2. 메서드 실행(Method Execution) 창에서 메서드 응답(Method Response)을 선택한 다음, 200 옆에 있는 화살표를 선택합니다.

  3. 200에 대한 응답 모델(Response Models for 200) 영역의 application/json에서 연필 아이콘을 선택하여 메서드 출력을 위한 모델 설정을 시작합니다. 모델에서 PetsModelFlattenAll을 선택한 다음 확인 표시 아이콘을 선택하여 설정을 저장합니다.

  4. 메서드 실행(Method Execution)통합 응답(Integration Response)을 차례로 선택한 다음, 200 옆에 있는 화살표를 선택합니다.

  5. 본문 매핑 템플릿(Body Mapping Templates) 섹션을 확장하고 Content-Type에서 application/json을 선택합니다.

  6. 모델로부터 템플릿 생성(Generate template from model)에서 PetsModelFlattenAll을 선택하여 PetsModelFlattenAll 모델 이후의 매핑 템플릿을 시작점으로 표시합니다.

  7. 매핑 템플릿 코드를 다음과 같이 수정합니다.

    #set($inputRoot = $input.path('$')) { "listings" : [ #foreach($elem in $inputRoot) "Item number $elem.id is a $elem.type. The asking price is $elem.price."#if($foreach.hasNext),#end #end ] }
  8. Save를 선택합니다.

  9. 메서드 실행(Method Execution)을 선택하고, 클라이언트(Client) 상자에서 TEST를 선택한 다음 테스트를 선택합니다. 올바르게 수행했다면 응답 본문(Response Body)에 다음이 표시됩니다.

    { "listings" : [ "Item number 1 is a dog. The asking price is 249.99.", "Item number 2 is a cat. The asking price is 124.99.", "Item number 3 is a fish. The asking price is 0.99." ] }

두 번째 GET 메서드에 대한 통합을 설정하고 테스트하는 방법

  1. API의 리소스(Resources) 트리에서 /petstorewalkthrough/lambdaflattensome 노드 아래의 GET을 선택합니다.

  2. 메서드 실행(Method Execution)에서 메서드 응답(Method Response)을 선택합니다. 그런 다음 200 옆에 있는 화살표를 선택해 해당 섹션을 확장합니다.

  3. 200에 대한 응답 모델(Response Models for 200) 영역에서 콘텐츠 유형 application/json 열에 있는 연필 아이콘을 선택합니다. 모델(Model)에서 PetsModelFlattenSome을 선택한 다음 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

  4. 메서드 실행(Method Execution)으로 다시 돌아갑니다. 통합 응답(Integration Response)을 선택한 다음, 200 옆에 있는 화살표를 선택합니다.

  5. 본문 매핑 템플릿(Body Mapping Templates) 섹션에서 Content-Type 아래 application/json을 선택합니다.

  6. 템플릿 생성(Generate template)에서 PetsModelFlattenSome을 선택하여 이 메서드의 출력에 대한 매핑 스크립트 템플릿을 표시합니다.

  7. 코드를 다음과 같이 수정한 다음, 저장을 선택합니다.

    #set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description" : "Item $elem.id is a $elem.type.", "askingPrice" : $elem.price }#if($foreach.hasNext),#end #end ]
  8. 메서드 실행(Method Execution)을 선택하고, 클라이언트(Client) 상자에서 TEST를 선택한 다음 테스트를 선택합니다. 올바르게 수행했다면 응답 본문(Response Body)에 다음이 표시됩니다.

    [ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]

세 번째 GET 메서드에 대한 통합을 설정하고 테스트하는 방법

  1. API의 리소스(Resources) 트리에서 /petstorewalkthrough/flattensome 노드 아래의 GET을 선택합니다.

  2. 메서드 실행(Method Execution) 창에서 메서드 응답(Method Response)을 선택합니다.

  3. 200 옆에 있는 화살표를 선택합니다.

  4. 200에 대한 응답 모델(Response Models for 200) 영역의 application/json에서 연필 아이콘을 선택합니다. 모델(Model)에서 PetsModelFlattenSome을 선택한 다음 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

  5. 메서드 실행(Method Execution)으로 되돌아가 통합(Integration)을 선택합니다.

  6. 200 옆에 있는 화살표를 선택해 해당 섹션을 확장합니다.

  7. 본문 매핑 템플릿(Body Mapping Templates) 영역을 확장합니다. Content-Typeapplication/json을 선택합니다. 템플릿 생성(Generate template)에서 PetsModelFlattenSome을 선택하여 이 메서드의 출력에 대한 매핑 스크립트 템플릿을 표시합니다.

  8. 코드를 다음과 같이 수정합니다.

    #set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "description": "Item $elem.id is a $elem.type.", "askingPrice": $elem.price }#if($foreach.hasNext),#end #end ]
  9. Save를 선택합니다.

  10. 메서드 실행(Method Execution)으로 돌아가서 클라이언트(Client) 상자에서 TEST를 선택합니다. 그런 다음 테스트를 선택합니다. 올바르게 수행했다면 응답 본문(Response Body)에 다음이 표시됩니다.

    [ { "description": "Item 1 is a dog.", "askingPrice": 249.99 }, { "description": "Item 2 is a cat.", "askingPrice": 124.99 }, { "description": "Item 3 is a fish.", "askingPrice": 0.99 } ]

네 번째 GET 메서드에 대한 통합을 설정하고 테스트하는 방법

  1. API의 리소스(Resources) 트리에서 /petstorewalkthrough/noflatten 노드 아래의 GET을 선택합니다.

  2. 메서드 실행(Method Execution) 창에서 메서드 응답(Method Response)을 선택한 다음, 200 섹션을 확장합니다.

  3. 200에 대한 응답 모델(Response Models for 200) 영역의 application/json에서 연필 아이콘을 선택하여 이 메서드의 응답 모델을 업데이트합니다.

  4. PetsModelNoFlattenapplication/json의 콘텐츠 유형 모델로 선택한 후 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

  5. 메서드 실행(Method Execution)통합 응답(Integration Response)을 차례로 선택한 다음, 200 옆에 있는 화살표를 선택하여 해당 섹션을 확장합니다.

  6. 매핑 템플릿(Mapping Templates) 섹션을 확장합니다. Content-Typeapplication/json을 선택합니다. 템플릿 생성(Generate template)에서 PetsModelNoFlatten을 선택하여 이 메서드의 출력에 대한 매핑 스크립트 템플릿을 표시합니다.

  7. 코드를 다음과 같이 수정합니다.

    #set($inputRoot = $input.path('$')) [ #foreach($elem in $inputRoot) { "number": $elem.id, "class": "$elem.type", "salesPrice": $elem.price }#if($foreach.hasNext),#end #end ]
  8. Save를 선택합니다.

  9. 메서드 실행(Method Execution)으로 되돌아가 클라이언트(Client) 상자에서 TEST를 선택한 다음 테스트를 선택합니다. 올바르게 수행했다면 응답 본문(Response Body)에 다음이 표시됩니다.

    [ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]

6단계: API 배포

이 단계에서는 API를 API Gateway 콘솔 외부에서 호출을 시작할 수 있도록 배포합니다.

API를 배포하려면

  1. 리소스 창에서 API 배포를 선택합니다.

  2. 배포 단계(Deployment stage)에서 test를 선택합니다.

  3. Deployment description(배포 설명)Using models and mapping templates walkthrough을 입력합니다

  4. 배포를 선택합니다.

7단계: API 테스트

이 단계에서는 API Gateway 콘솔 외부로 이동하여 HTTP 엔드포인트 및 Lambda 함수와 상호 작용합니다.

  1. URL 호출(Invoke URL) 옆에 있는 단계 편집기(Stage Editor) 창에서 URL을 클립보드로 복사합니다. 다음과 같아야 합니다.

    https://my-api-id.execute-api.region-id.amazonaws.com/test
  2. 이 URL을 새 브라우저 탭의 주소 표시줄에 붙여 넣습니다.

  3. /petstorewalkthrough/noflatten을 추가하여 다음과 같이 되도록 정합니다.

    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/noflatten

    해당 URL로 이동합니다. 다음 정보가 표시되어야 합니다.

    [ { "number": 1, "class": "dog", "salesPrice": 249.99 }, { "number": 2, "class": "cat", "salesPrice": 124.99 }, { "number": 3, "class": "fish", "salesPrice": 0.99 } ]
  4. petstorewalkthrough/ 이후에 noflattenflattensome으로 대체합니다.

  5. 해당 URL로 이동합니다. 다음 정보가 표시되어야 합니다.

    [ { "description": "Item 1 is a dog.", "askingPrice": 249.99 }, { "description": "Item 2 is a cat.", "askingPrice": 124.99 }, { "description": "Item 3 is a fish.", "askingPrice": 0.99 } ]
  6. petstorewalkthrough/ 이후에 flattensomeflattenall으로 대체합니다.

  7. 해당 URL로 이동합니다. 다음 정보가 표시되어야 합니다.

    { "listings" : [ "Item number 1 is a dog. The asking price is 249.99.", "Item number 2 is a cat. The asking price is 124.99.", "Item number 3 is a fish. The asking price is 0.99." ] }
  8. petstorewalkthrough/ 이후에 flattenalllambdaflattensome으로 대체합니다.

  9. 해당 URL로 이동합니다. 다음 정보가 표시되어야 합니다.

    [ { "description" : "Item 1 is a dog.", "askingPrice" : 249.99 }, { "description" : "Item 2 is a cat.", "askingPrice" : 124.99 }, { "description" : "Item 3 is a fish.", "askingPrice" : 0.99 } ]

8단계: 정리

이제 이 연습을 위해 생성한 Lambda 함수가 더 이상 필요하지 않은 경우 해당 함수를 삭제할 수 있습니다. 함께 제공되는 IAM 리소스도 삭제할 수 있습니다.

주의

API가 의존하는 Lambda 함수를 삭제할 경우 해당 API가 더 이상 작동하지 않습니다. Lambda 함수 삭제는 실행 취소할 수 없습니다. Lambda 함수를 다시 사용하려면 함수를 재생성해야 합니다.

Lambda 함수가 의존하는 IAM 리소스를 삭제할 경우 Lambda 함수 및 이 함수를 의존하는 모든 API가 더 이상 작동하지 않습니다. IAM 리소스 삭제는 실행 취소할 수 없습니다. IAM 리소스를 다시 사용하려면 리소스를 재생성해야 합니다. 이 연습 및 다른 연습을 위해 만든 리소스를 계속 실험하려는 경우 Lambda 호출 역할이나 Lambda 실행 역할을 삭제하지 마십시오

Lambda 함수를 삭제하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  2. Lambda: 함수 목록(Lambda: Function list) 페이지의 함수 목록에서 GetPetsInfo 옆에 있는 버튼을 선택한 다음, 작업(Actions), 삭제(Delete)를 선택합니다. 확인 메시지가 나타나면 삭제를 다시 선택합니다.

연결된 IAM 리소스를 삭제하려면

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 세부 정보 영역에서 역할을 선택합니다.

  3. APIGatewayLambdaExecRole을 선택한 다음 역할 작업(Role Actions), 역할 삭제(Delete Role)를 선택합니다. 확인 메시지가 나타나면 [Yes, Delete]를 선택합니다.

  4. 세부 정보 영역에서 정책을 선택합니다.

  5. APIGatewayLambdaExecPolicy를 선택한 다음 정책 작업(Policy Actions), 삭제(Delete)를 선택합니다. 확인 메시지가 나타나면 삭제를 선택합니다.

이 연습을 마칩니다.