Amazon API Gateway
개발자 안내서

자습서: 두 개의 AWS 서비스 통합과 하나의 Lambda 비 프록시 통합으로 Calc REST API 생성하기

비 프록시 통합 시작하기 자습서에서는 Lambda Function 통합만 사용합니다. Lambda Function 통합은 AWS Service 통합 유형의 특별한 사례로서, Lambda 함수를 호출하는 데 필요한 리소스 기반 사용 권한을 자동으로 추가하는 등 대부분의 통합 설정을 수행합니다. 여기서 세 가지 통합 중 두 가지는 AWS Service 통합을 사용합니다. 이 통합 유형은 더 많은 제어 권한을 제공하지만, 적절한 권한이 포함된 IAM 역할 생성 및 지정과 같은 작업을 수동으로 수행해야 합니다.

이 자습서에서는 JSON 형식의 입력 및 출력을 수락 및 반환하여 기본 산술 연산을 구현하는 Calc Lambda 함수를 생성합니다. 그런 다음 REST API를 생성하여 다음과 같이 Lambda 함수와 통합합니다.

  1. /calc 리소스에 GET 메서드를 공개하여 Lambda 함수를 호출하고, 입력을 쿼리 문자열 파라미터로 제공합니다(AWS Service 통합).

  2. /calc 리소스에 POST 메서드를 공개하여 Lambda 함수를 호출하고, 입력을 메서드 요청 페이로드에 제공합니다(AWS Service 통합).

  3. 중첩된 /calc/{operand1}/{operand2}/{operator} 리소스에 GET 메서드를 공개하여 Lambda 함수를 호출하고, 입력을 경로 파라미터로 제공합니다(Lambda Function 통합).

이 자습서 외에도, Calc API에 대한 OpenAPI 정의 파일을 검토할 수 있습니다. 이 파일은 REST API를 API Gateway로 가져오기의 지침에 따라 API Gateway로 가져올 수 있습니다.

AWS 계정 만들기

이 자습서를 시작하려면 AWS 계정이 필요합니다.

AWS 계정이 없는 경우 다음 절차에 따라 하나 만드십시오.

AWS에 가입하려면

  1. https://aws.amazon.com/을 열고 [Create an AWS Account]를 선택합니다.

  2. 온라인 지시 사항을 따릅니다.

수임 가능한 IAM 역할 만들기

API가 Calc Lambda 함수를 호출하게 하려면 API Gateway 수임 가능 IAM 역할이 있어야 합니다. 이 역할은 다음과 같은 신뢰할 수 있는 관계를 가진 IAM 역할입니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

생성한 역할은 Lambda InvokeFunction 권한을 가져야 합니다. 이 권한이 없으면 API 호출자가 500 Internal Server Error 응답을 받습니다. 역할에 이 권한을 부여하려면 다음 IAM 정책을 역할에 연결해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "*" } ] }

다음은 이를 수행하는 방법입니다.

API Gateway 수임 가능 IAM 역할 만들기

  1. IAM 콘솔에 로그인합니다.

  2. [Roles]를 선택합니다.

  3. [Create Role]을 선택합니다.

  4. Select type of trusted entity(신뢰할 수 있는 유형의 엔터티 선택) 아래에서 AWS 서비스를 선택합니다.

  5. Choose the service that will use this role(이 역할을 사용할 서비스 선택) 아래에서 Lambda를 선택합니다.

  6. Next: Permissions(다음: 권한)을 선택하십시오.

  7. 정책 생성을 선택합니다.

    새로운 정책 생성 콘솔 창이 열립니다. 이 창에서 다음을 수행합니다.

    1. JSON 탭에서 기존 정책을 다음으로 바꿉니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "*" } ] }
    2. [Review policy]를 선택합니다.

    3. 정책 검토에서 다음을 수행합니다.

      1. 이름에서 lambda_execute 같은 사용자 이름을 입력합니다.

      2. 정책 생성을 선택합니다.

  8. 원래의 역할 만들기 콘솔 창에서 다음을 수행하십시오.

    1. Attach permissions policies(권한 정책 연결)의 드롭다운 목록에서 lambda_execute 정책을 선택합니다.

      목록에 해당 정책이 표시되지 않으면 목록 상단에 있는 새로 고침 버튼을 선택합니다. (브라우저 페이지를 새로 고치지 마십시오.)

    2. 다음: 태그를 선택합니다.

    3. 다음: 검토를 선택합니다.

    4. 역할 이름lambda_invoke_function_assume_apigw_role 등의 이름을 입력합니다.

    5. [Create role]을 선택합니다.

  9. 역할 목록에서 lambda_invoke_function_assume_apigw_role을 선택합니다.

  10. 신뢰 관계 탭을 선택합니다.

  11. 신뢰 관계 편집(Edit trust relationship)을 선택합니다.

  12. 기존 정책을 다음으로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "apigateway.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  13. [Update Trust Policy(신뢰 정책 업데이트)]를 선택합니다.

  14. 방금 생성한 역할의 역할 ARN을 기록해 둡니다. 잠시 후 필요한 정보입니다.

Calc Lambda 함수를 만듭니다.

그런 다음 Lambda 콘솔을 사용하여 Lambda 함수를 만듭니다.

  1. Lambda 콘솔에서 함수 생성을 선택합니다.

  2. 새로 작성을 선택합니다.

  3. NameCalc를 입력합니다.

  4. 런타임Node.js 8.10로 설정합니다.

  5. 함수 생성을 선택합니다.

  6. 다음의 Lambda 함수를 복사한 다음, Lambda 콘솔에서 코드 편집기에 붙여 넣습니다.

    console.log('Loading the Calc function'); exports.handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); if (event.a === undefined || event.b === undefined || event.op === undefined) { callback("400 Invalid Input"); } var res = {}; res.a = Number(event.a); res.b = Number(event.b); res.op = event.op; if (isNaN(event.a) || isNaN(event.b)) { callback("400 Invalid Operand"); } switch(event.op) { case "+": case "add": res.c = res.a + res.b; break; case "-": case "sub": res.c = res.a - res.b; break; case "*": case "mul": res.c = res.a * res.b; break; case "/": case "div": res.c = res.b===0 ? NaN : Number(event.a) / Number(event.b); break; default: callback("400 Invalid Operator"); break; } callback(null, res); };
  7. 실행 역할에서 기존 역할 선택을 선택합니다.

  8. 앞에서 만든 lambda_invoke_function_assume_apigw_role 역할의 ARN을 입력합니다.

  9. Save를 선택합니다.

이 함수에는 a 입력 파라미터의 두 피연산자(bop) 및 연산자(event)가 필요합니다. 입력은 다음 형식의 JSON 객체입니다.

{ "a": "Number" | "String", "b": "Number" | "String", "op": "String" }

이 함수에서 계산된 결과(c) 및 입력을 반환합니다. 입력이 잘못된 경우 함수에서 널 값 또는 "Invalid op" 문자열을 결과로 반환합니다. 출력은 다음 JSON 형식입니다.

{ "a": "Number", "b": "Number", "op": "String", "c": "Number" | "String" }

다음 단계에서 함수를 API와 통합하기 전에 Lambda 콘솔에서 함수를 테스트해야 합니다.

Calc Lambda 함수 테스트

다음은 Lambda 콘솔에서 Calc 함수를 테스트하는 방법입니다.

  1. 저장된 테스트 이벤트 드롭다운 메뉴에서 테스트 이벤트 구성을 선택합니다.

  2. 테스트 이벤트의 이름에 calc2plus5를 입력합니다.

  3. 테스트 이벤트 정의를 다음과 같이 바꿉니다.

    { "a": "2", "b": "5", "op": "+" }
  4. Save를 선택합니다.

  5. [Test]를 선택합니다.

  6. 실행 결과: 성공을 확장합니다. 다음과 같은 모양이어야 합니다.

    { "a": 2, "b": 5, "op": "+", "c": 7 }

Calc API를 만듭니다.

다음 절차는 방금 만든 Calc Lambda 함수에 대한 API를 만드는 방법을 보여줍니다. 그 다음 단원에서는 이 API에 리소스와 메서드를 추가할 것입니다.

Calc API 만들기

  1. API Gateway 콘솔에서 API 생성(Create API)을 선택합니다.

  2. APILambdaCalc를 입력합니다.

  3. 설명을 공란으로 놔두고 엔드포인트 유형Regional(지역별)로 설정합니다.

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

통합 1: Lambda 함수를 호출하기 위해 쿼리 파라미터를 사용하여 GET 메서드 만들기

쿼리 문자열 파라미터를 Lambda 함수에 전달하는 GET 메서드를 생성하여, API가 브라우저에서 호출될 수 있도록 합니다. 이 방법은 오픈 액세스를 허용하는 API에 특히 유용합니다.

쿼리 문자열 파라미터를 사용하여 GET 메서드를 설정하려면

  1. API Gateway 콘솔의 LambdaCalc API 리소스에서 /를 선택합니다.

  2. 작업 드롭다운 메뉴에서 리소스 생성을 선택합니다.

  3. 리소스 이름calc를 입력합니다.

  4. Create Resourc(리소스 생성)을 선택합니다.

  5. 방금 생성한 /calc 리소스를 선택합니다.

  6. 작업 드롭다운 메뉴에서 메서드 생성을 선택합니다.

  7. 표시되는 메서드 드롭다운 메뉴에서 GET를 선택합니다.

  8. 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

  9. 설정 창에서 다음을 수행합니다.

    1. Integration type(통합 유형)에서 AWS 서비스를 선택합니다.

    2. AWS 리전에서 Lambda 함수를 생성한 리전(예: us-west-2)을 선택합니다.

    3. AWS 서비스에서 Lambda를 선택합니다.

    4. Lambda 함수가 AWS 하위 도메인에 호스팅되지 않기 때문에 AWS 하위 도메인(AWS Subdomain)은 비워 둡니다.

    5. HTTP method(HTTP 메서드)에서 POST를 선택하고 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다. Lambda 함수의 경우 임의의 Lambda 함수를 호출할 때 POST 요청을 사용해야 합니다. 이 예제에서는 프런트엔드 메서드 요청에서의 HTTP 메서드가 백엔드에서의 통합 요청과 다를 수 있다는 것을 보여 줍니다.

    6. 작업 유형에서 Use path override를 선택합니다. 이 옵션을 사용하면 호출 작업의 ARN을 지정하여 Calc 함수를 실행할 수 있습니다.

    7. 경로 재정의/2015-03-31/functions/arn:aws:lambda:region:account-id:function:Calc/invocations를 입력합니다. region은 Lambda 함수를 만든 리전이고, account-id는 AWS 계정의 계정 번호입니다.

    8. 실행 역할앞에서 만든 lambda_invoke_function_assume_apigw_role IAM 역할의 역할 ARN을 입력합니다.

    9. Content Handling(콘텐츠 처리)Passthrough(패스스루) 로 설정하는데, 이 메서드에서 이진 데이터는 취급하지 않을 것이기 때문입니다.

    10. Use default timeout(기본 제한 시간 사용)이 선택된 상태이어야 합니다.

    11. Save를 선택합니다.

  10. 메서드 요청(Method Request)을 선택합니다.

    이제 /calc에서 GET 메서드에 대한 쿼리 파라미터를 설정하면 백엔드 Lambda 함수를 대신하여 입력을 수신할 수 있습니다.

    1. Request Validator(요청 검사기) 옆의 연필 아이콘을 선택하고 드롭다운 메뉴에서 Validate query string parameters and headers(쿼리 문자열 파라미터 및 헤더 검사)를 선택합니다. 이렇게 설정하면 클라이언트가 필수 파라미터를 지정하지 않은 경우 필수 파라미타가 누락되었다는 오류 메시지가 반환됩니다. 백엔드에 대한 호출에 대해서는 요금이 청구되지 않습니다.

    2. 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

    3. URL 쿼리 문자열 파라미터(URL Query String Parameters) 섹션을 확장합니다.

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

    5. Nameoperand1를 입력합니다.

    6. 확인 표시 아이콘을 선택하여 파라미터를 저장합니다.

    7. 이전 단계를 반복하여 operand2operator라는 이름의 파라미터를 생성합니다.

    8. 각 파라미터에 대해 필수 옵션에 체크 표시를 하여 확인이 이루어지도록 합니다.

  11. Method Execution(메서드 실행)을 선택한 다음 Integration Request(통합 요청)을 선택하여 클라이언트에서 제공한 쿼리 문자열을 Calc 함수에 따라 통합 요청 페이로드로 변환하도록 매핑 템플릿을 설정합니다.

    1. 매핑 템플릿(Mapping Templates) 섹션을 확장합니다.

    2. Request body passthrough(요청 본문 패스스루)에서 When no template matches the request Content-Type header(요청의 Content-Type 헤더와 일치하는 템플릿이 없는 경우)를 선택합니다.

    3. Content-Type에서 Add mapping template(매핑 템플릿 추가)를 선택합니다.

    4. application/json을 입력하고 확인 표시 아이콘을 선택하여 템플릿 편집기를 엽니다.

    5. 예, 이 통합 보호(Yes, secure this integration)를 선택하여 계속 진행합니다.

    6. 다음 매핑 스크립트를 복사하여 매핑 템플릿 편집기에 붙여 넣습니다.

      { "a": "$input.params('operand1')", "b": "$input.params('operand2')", "op": "$input.params('operator')" }

      이 템플릿은 Method Request(메서드 요청)에서 선언된 세 쿼리 문자열 파라미터를 백엔드 Lambda 함수에 대한 입력으로서 JSON 객체의 지정 속성 값에 매핑합니다. 변환된 JSON 객체는 통합 요청 페이로드로 포함됩니다.

    7. Save를 선택합니다.

  12. Method Execution(메서드 실행)을 선택합니다.

  13. 이제 GET 메서드를 테스트하여 Lambda 함수를 호출하도록 적절히 설정되었는지 확인할 수 있습니다.

    1. Query Strings(쿼리 문자열)operand1=2&operand2=3&operator=+를 입력합니다.

    2. [Test]를 선택합니다.

      다음과 같은 결과가 나타납니다.

      
                                API를 Lambda 프록시로 API Gateway에 생성

통합 2: Lambda 함수를 호출하기 위해 JSON 페이로드를 사용하여 POST 메서드 만들기

Lambda 함수를 호출하는 JSON 페이로드로 POST 메서드를 생성하면 클라이언트가 요청 본문의 백엔드 함수에 필요한 입력을 제공해야 합니다. 클라이언트가 올바른 입력 데이터를 업로드하도록 하기 위해 페이로드에서 요청 확인을 활성화합니다.

JSON 페이로드로 POST 메서드를 설정하여 Lambda 함수를 호출하려면

  1. API Gateway 콘솔로 이동합니다.

  2. API(APIs)를 선택합니다.

  3. 앞에서 만든 LambdaCalc API를 선택합니다.

  4. 리소스 창에서 /calc 리소스를 선택합니다.

  5. 작업 메뉴에서 메서드 생성을 선택합니다.

  6. 메서드 드롭다운 목록에서 POST를 선택합니다.

  7. 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

  8. 설정 창에서 다음을 수행합니다.

    1. Integration type(통합 유형)에서 AWS 서비스를 선택합니다.

    2. AWS 리전에서 Lambda 함수를 생성한 리전(예: us-west-2)을 선택합니다.

    3. AWS 서비스에서 Lambda를 선택합니다.

    4. Lambda 함수가 AWS 하위 도메인에 호스팅되지 않기 때문에 AWS 하위 도메인(AWS Subdomain)은 비워 둡니다.

    5. HTTP 메서드(HTTP method)에 대해 POST를 선택합니다. 이 예제에서는 프런트엔드 메서드 요청에서의 HTTP 메서드가 백엔드에서의 통합 요청과 다를 수 있다는 것을 보여 줍니다.

    6. 작업에서 작업 유형으로 Use path override를 선택합니다. 이 옵션을 사용하면 호출 작업의 ARN을 지정하여 Calc 함수를 실행할 수 있습니다.

    7. 경로 재정의/2015-03-31/functions/arn:aws:lambda:region:account-id:function:Calc/invocations를 입력합니다. region은 Lambda 함수를 만든 리전이고, account-id는 AWS 계정의 계정 번호입니다.

    8. 실행 역할앞에서 만든 lambda_invoke_function_assume_apigw_role IAM 역할의 역할 ARN을 입력합니다.

    9. Content Handling(콘텐츠 처리)Passthrough(패스스루) 로 설정하는데, 이 메서드에서 이진 데이터는 취급하지 않을 것이기 때문입니다.

    10. Use Default Timeout(기본 제한 시간 사용)이 선택된 상태이어야 합니다.

    11. Save를 선택합니다.

  9. API Gateway 콘솔의 기본 탐색 창에서 LambdaCalc API 아래에 있는 모델을 선택하여 메서드의 입력 및 출력을 위한 데이터 모델을 생성합니다.

    1. 모델 창에서 생성을 선택합니다. 모델 이름Input을 입력하고, 콘텐츠 유형application/json를 입력하고, 모델 스키마 상자에 다음 스키마 정의를 복사하여 붙여 넣습니다.

      { "type":"object", "properties":{ "a":{"type":"number"}, "b":{"type":"number"}, "op":{"type":"string"} }, "title":"Input" }

      이 모델은 입력 데이터 구조를 설명하며, 수신되는 요청의 본문을 확인하는 데 사용됩니다.

    2. 모델 생성을 선택합니다.

    3. 모델 창에서 생성을 선택합니다. 모델 이름Output을 입력하고, 콘텐츠 유형application/json를 입력하고, 모델 스키마 상자에 다음 스키마 정의를 복사하여 붙여 넣습니다.

      { "type":"object", "properties":{ "c":{"type":"number"} }, "title":"Output" }

      이 모델은 백엔드로부터 계산된 출력의 데이터 구조를 설명합니다. 통합 응답 데이터를 다른 모델에 매핑하는 데 사용할 수 있습니다. 이 자습서에서는 패스스루 동작에 의존하며 이 모델을 사용하지 않습니다.

    4. 콘솔 화면의 상단에서 API에 대한 API ID를 찾아서 메모합니다. API 이름 뒤의 괄호 안에 표시됩니다.

    5. 모델 창에서 생성을 선택합니다.

    6. 모델 이름Result를 입력합니다.

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

    8. 다음 스키마 정의를 복사하여 모델 스키마 상자에 붙여 넣습니다. restapi-id는 앞에서 메모해 둔 REST API ID입니다.

      { "type":"object", "properties":{ "input":{ "$ref":"https://apigateway.amazonaws.com/restapis/restapi-id/models/Input" }, "output":{ "$ref":"https://apigateway.amazonaws.com/restapis/restapi-id/models/Output" } }, "title":"Output" }

      이 모델은 반환된 응답 데이터의 데이터 구조를 설명합니다. 지정된 API에 정의된 InputOutput 스키마(restapi-id)를 둘 다 참조합니다. 다시 말씀드리지만, 이 자습서에서는 패스스루 동작을 활용하기 때문에 이 모델은 사용하지 않습니다.

    9. 모델 생성을 선택합니다.

  10. 기본 탐색 창의 LambdaCalc API에서 리소스를 선택합니다.

  11. 리소스 창에서 API에 대한 POST 메서드를 선택합니다.

  12. 메서드 요청(Method Request)을 선택합니다.

  13. 메서드 요청(Method Request) 구성 설정에서 다음을 수행하여 수신되는 요청의 본문에 대한 요청 확인을 활성화합니다.

    1. 요청 검사기(Request Validator) 옆에 있는 연필 아이콘을 선택하고 Validate body를 선택합니다. 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

    2. 요청 본문(Request Body) 섹션을 확장하고 모델 추가를 선택합니다.

    3. Content-Type 입력 필드에서 application/json을 입력하고 모델 이름 열의 드롭다운 목록에서 Input을 선택합니다. 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

  14. POST 메서드를 테스트하려면 다음과 같이 합니다.

    1. Method Execution(메서드 실행)을 선택합니다.

    2. [Test]를 선택합니다.

  15. 다음 JSON 페이로드를 Request Body(요청 본문)에 복사해 넣습니다.

    { "a": 1, "b": 2, "op": "+" }
  16. [Test]를 선택합니다.

    Request Body(요청 본문)에 다음 출력이 표시됩니다.

    { "a": 1, "b": 2, "op": "+", "c": 3 }

통합 3: Lambda 함수를 호출하기 위해 경로 파라미터를 사용하여 GET 메서드 만들기

이제 백엔드 Lambda 함수를 호출하는 경로 파라미터 시퀀스가 지정한 리소스에 GET 메서드를 만들어 보겠습니다. 경로 파라미터 값은 Lambda 함수에 대한 입력 데이터를 지정합니다. 받는 경로 파라미터 값을 필수 통합 요청 페이로드에 매핑하는 매핑 템플릿을 사용합니다.

이번에는 API Gateway 콘솔에서 기본으로 제공하는 Lambda 통합 기능을 사용하여 메서드 통합을 설정합니다.

이렇게 만들어진 API 리소스 구조는 다음과 같습니다.


                API를 Lambda 프록시로 API Gateway에 생성

URL 경로 파라미터를 사용하여 GET 메서드를 설정하려면

  1. API Gateway 콘솔로 이동합니다.

  2. API에서, 위의 단계에서 만든 LambdaCalc API를 선택합니다.

  3. API의 리소스 탐색 창에서 /calc를 선택합니다.

  4. 작업 드롭다운 메뉴에서 Create Resource(리소스 생성)를 선택합니다.

  5. 리소스 이름{operand1}를 입력합니다.

  6. Resource Path(리소스 경로){operand1}을 입력합니다.

  7. Create Resourc(리소스 생성)을 선택합니다.

  8. 방금 생성한 /calc/{operand1} 리소스를 선택합니다.

  9. 작업 드롭다운 메뉴에서 Create Resource(리소스 생성)를 선택합니다.

  10. 리소스 이름{operand2}를 입력합니다.

  11. Resource Path(리소스 경로){operand2}을 입력합니다.

  12. Create Resourc(리소스 생성)을 선택합니다.

  13. 방금 생성한 /calc/{operand1}/{operand2} 리소스를 선택합니다.

  14. 작업 드롭다운 메뉴에서 Create Resource(리소스 생성)를 선택합니다.

  15. Resource Path(리소스 경로){operator}을 입력합니다.

  16. 리소스 이름{operator}를 입력합니다.

  17. Create Resourc(리소스 생성)을 선택합니다.

  18. 방금 생성한 /calc/{operand1}/{operand2}/{operator} 리소스를 선택합니다.

  19. 작업 드롭다운 메뉴에서 메서드 생성을 선택합니다.

  20. 메서드 드롭다운 메뉴에서 GET를 선택합니다.

  21. 설정(Setup) 창의 통합 유형(Integration type)에서 Lambda Function을 선택하여 콘솔에서 활성화되는 간소화 설정 프로세스를 활용합니다.

  22. Lambda 리전에서 리전(예: us-west-2)을 선택합니다. 이는 Lambda 함수가 호스팅되는 리전입니다.

  23. Lambda 함수에서 기존 Lambda 함수(예: Calc)를 선택합니다.

  24. 저장을 선택한 다음 확인을 선택하여 Lambda 함수에 권한 추가(Add Permissions to Lambda Function)에 동의합니다.

  25. 통합 요청(Integration Request)을 선택합니다.

  26. 매핑 템플릿을 다음과 같이 수정합니다.

    1. 매핑 템플릿(Mapping Templates) 섹션을 확장합니다.

    2. 요청의 Content-Type 헤더와 일치하는 템플릿이 없는 경우 설정을 그대로 둡니다.

    3. 매핑 템플릿 추가(Add mapping template)를 선택합니다.

    4. Content-Type에서 application/json을 입력한 다음 확인 표시 아이콘을 선택하여 템플릿 편집기를 엽니다.

    5. 예, 이 통합 보호(Yes, secure this integration)를 선택하여 계속 진행합니다.

    6. 다음 스크립트를 복사하여 매핑 템플릿 편집기에 붙여 넣습니다.

      { "a": "$input.params('operand1')", "b": "$input.params('operand2')", "op": #if($input.params('operator')=='%2F')"/"#{else}"$input.params('operator')"#end }

      이 템플릿은 /calc/{operand1}/{operand2}/{operator} 리소스가 생성될 때 선언된 URL 경로 파라미터를 JSON 객체의 지정 속성 값에 매핑합니다. URL 경로가 URL로 인코딩되어야 하므로 나눗셈 연산자는 %2F가 아닌 /로 지정해야 합니다. 이 템플릿은 %2F를 ''/'로 변환한 후 Lambda 함수에 전달합니다.

    7. Save를 선택합니다.

    메서드를 올바르게 설정한 경우 설정이 다음과 비슷할 것입니다.

    
                        경로 파라미터를 사용하여 Lambda 함수를 호출하는 GET 메서드 설정
  27. GET 함수를 테스트하려면 다음을 수행합니다.

    1. Method Execution(메서드 실행)을 선택합니다.

    2. [Test]를 선택합니다.

    3. {operand1}, {operand2}{operator} 필드에 각각 1, 2+를 입력합니다.

    4. [Test]를 선택합니다.

    5. 결과는 다음과 같아야 합니다.

      
                                메서드 요청 URL 경로 파라미터를 통합 요청 페이로드에 매핑하여 Lambda 함수를 호출하는 방법

    매핑 템플릿이 없기 때문에 이 테스트의 결과는 매핑 없이 통합 응답을 통해 전달된 백엔드 Lambda 함수의 원래 출력을 나타냅니다. 그런 다음 Result 스키마 이후 메서드 응답 페이로드의 데이터 구조를 모델링합니다.

  28. 기본적으로 메서드 응답 본문에는 빈 모델이 지정됩니다. 이 때문에 통합 응답 본문이 매핑되지 않고 통과합니다. 그러나 Java 또는 Objective-C와 같은 강력한 형식의 언어 중 하나에 대한 SDK를 생성하는 경우 결과적으로 SDK 사용자가 빈 객체를 수신하게 됩니다. REST 클라이언트 및 SDK 클라이언트 모두 원하는 결과를 수신하도록 하려면 사전 정의된 스키마를 사용하여 응답 데이터를 모델링해야 합니다. 여기에서는 메서드 응답 본문에 대한 모델을 정의하고 통합 응답 본문을 메서드 응답 본문으로 변환하는 매핑 템플릿을 구성하겠습니다.

    1. /calc/{operand1}/{operand2}/{operator}을 선택합니다.

    2. GET을 선택합니다.

    3. Method Execution(메서드 실행)을 선택합니다.

    4. 메서드 응답을 선택합니다.

    5. 200 응답을 확장합니다.

    6. Response Body for 200(200에 대한 응답 본문)에서 application/json 콘텐츠 유형에 대한 모델 옆에 있는 연필 모양 아이콘을 선택합니다.

    7. 모델 드롭다운 목록에서 Result를 선택합니다.

    8. 확인 표시 아이콘을 선택하여 선택 사항을 저장합니다.

    메서드 응답 본문에 대한 모델을 설정하여 응답 데이터가 주어진 SDK의 Result 객체에 캐스팅되도록 합니다. 통합 응답 데이터가 적절히 매핑되게 하려면 매핑 템플릿이 필요합니다.

  29. 매핑 템플릿을 만들려면 다음과 같이 합니다.

    1. Method Execution(메서드 실행)을 선택합니다.

    2. 통합 응답(Integration Response)을 선택하고 200 메서드 응답 입력을 확장합니다.

    3. 매핑 템플릿(Mapping Templates) 섹션을 확장합니다.

    4. Content-Type 목록에서 application/json을 선택합니다.

    5. 템플릿 생성(Generate template) 드롭다운 목록에서 Result를 선택하여 Result 템플릿 블루프린트를 불러옵니다.

    6. 템플릿 블루프린트를 다음으로 변경합니다.

      #set($inputRoot = $input.path('$')) { "input" : { "a" : $inputRoot.a, "b" : $inputRoot.b, "op" : "$inputRoot.op" }, "output" : { "c" : $inputRoot.c } }
    7. Save를 선택합니다.

  30. 매핑 템플릿을 테스트하려면 다음과 같이 합니다.

    1. Method Execution(메서드 실행)을 선택합니다.

    2. [Test]를 선택합니다.

    3. 피연산자1, 피연산자2, 연산자 입력 필드에 1 2, +를 각각 입력합니다.

      Lambda 함수의 통합 응답이 이제 Result 객체에 매핑되었습니다.

    4. 테스트를 선택하면 콘솔의 응답 본문에 다음이 나타납니다.

      { "input": { "a": 1, "b": 2, "op": "+" }, "output": { "c": 3 } }
  31. 이 시점에서는, API Gateway 콘솔에서 호출 테스트를 통해서만 API를 호출할 수 있습니다. 클라이언트가 호출할 수 있게 하려면 다음과 같이 배포해야 합니다.

    1. 작업 드롭다운 메뉴에서 API 배포를 선택합니다.

    2. 배포 단계 드롭다운 메뉴에서 [새 단계]를 선택합니다.

    3. 단계 이름test를 입력합니다.

    4. 배포를 선택합니다.

    5. 콘솔 창 상단에 표시된 호출 URL을 기록해 둡니다. 이 URL을 PostmancURL과 같은 도구에서 사용하여 API를 테스트할 수 있습니다.

참고

리소스 또는 메서드를 추가, 수정, 삭제하거나, 데이터 매핑을 업데이트하거나, 단계 설정을 업데이트할 때마다 항상 API를 다시 배포하십시오. 다시 배포하지 않으면 API의 클라이언트가 새 기능 또는 업데이트를 사용할 수 없습니다.