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

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

자습서: Lambda 프록시 통합을 사용하여 Hello World REST API 빌드

Lambda 프록시 통합은 API 메서드나 전체 API를 Lambda 함수와 통합할 수 있는 유연하고 간단한 API Gateway API 통합 유형입니다. Lambda 함수는 Lambda가 지원하는 어떤 언어로도 작성할 수 있습니다. 이것은 프록시 통합이기 때문에 API를 다시 배포할 필요 없어 언제든지 Lambda 함수 구현을 변경할 수 있습니다.

이 자습서에서는 다음 작업을 수행합니다.

  • "Hello, World!" 만들기 API의 백엔드가 될 Lambda 함수를 만듭니다.

  • "Hello, World!" 만들기 및 테스트 Lambda 프록시 통합을 사용하여 API를 만들고 테스트합니다.

"Hello, World!" 만들기 Lambda 함수

“Hello, World!”를 생성하려면 Lambda 콘솔의 Lambda 함수
  1. https://console.aws.amazon.com/lambda에서 Lambda 콘솔에 로그인합니다.

  2. AWS 탐색 막대에서 지역 (예: 미국 동부 (버지니아 북부)) 을 선택합니다.

    참고

    Lambda 함수를 생성한 리전을 적어 둡니다. 이 리전은 API를 생성할 때 필요합니다.

  3. 탐색 창에서 함수를 선택합니다.

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

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

  6. 기본 정보에서 다음과 같이 합니다.

    1. 함수 이름GetStartedLambdaProxyIntegration을 입력합니다.

    2. 런타임에서 지원되는 최신 Node.js 또는 Python 런타임을 선택합니다.

    3. 권한(Permissions)에서 기본 실행 역할 변경(Change default execution role)을 확장합니다. 실행 역할 드롭다운 목록에서 AWS 정책 템플릿에서 새 역할 생성을 선택합니다.

    4. 역할 이름GetStartedLambdaBasicExecutionRole을 입력합니다.

    5. [Policy templates] 필드를 비워둡니다.

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

  7. 다음 코드를 복사하여 인라인 코드 편집기의 함수 코드에 붙여 넣습니다.

    Node.js
    export const handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; var greeter = 'World'; if (event.greeter && event.greeter!=="") { greeter = event.greeter; } else if (event.body && event.body !== "") { var body = JSON.parse(event.body); if (body.greeter && body.greeter !== "") { greeter = body.greeter; } } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") { greeter = event.queryStringParameters.greeter; } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") { greeter = event.multiValueHeaders.greeter.join(" and "); } else if (event.headers && event.headers.greeter && event.headers.greeter != "") { greeter = event.headers.greeter; } res.body = "Hello, " + greeter + "!"; callback(null, res); };
    Python
    import json def lambda_handler(event, context): print(event) greeter = 'World' try: if (event['queryStringParameters']) and (event['queryStringParameters']['greeter']) and ( event['queryStringParameters']['greeter'] is not None): greeter = event['queryStringParameters']['greeter'] except KeyError: print('No greeter') try: if (event['multiValueHeaders']) and (event['multiValueHeaders']['greeter']) and ( event['multiValueHeaders']['greeter'] is not None): greeter = " and ".join(event['multiValueHeaders']['greeter']) except KeyError: print('No greeter') try: if (event['headers']) and (event['headers']['greeter']) and ( event['headers']['greeter'] is not None): greeter = event['headers']['greeter'] except KeyError: print('No greeter') if (event['body']) and (event['body'] is not None): body = json.loads(event['body']) try: if (body['greeter']) and (body['greeter'] is not None): greeter = body['greeter'] except KeyError: print('No greeter') res = { "statusCode": 200, "headers": { "Content-Type": "*/*" }, "body": "Hello, " + greeter + "!" } return res
  8. [Deploy]를 선택합니다.

"Hello, World!" 만들기 API

이제 API Gateway 콘솔을 사용하여 “Hello, World!” Lambda 함수에 대한 API를 만듭니다.

“Hello, World!”를 생성하려면 API
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

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

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

  3. API 이름에서 LambdaProxyAPI을(를) 입력합니다.

  4. (선택 사항) 설명에 설명을 입력합니다.

  5. API 엔드포인트 유형 설정을 지역으로 유지합니다.

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

API를 생성한 후에는 리소스를 생성합니다. 일반적으로 API 리소스는 애플리케이션 로직에 따른 리소스 트리로 정리되어 있습니다. 이 예시에서는 /helloworld 리소스를 생성합니다.

리소스를 생성하려면
  1. / 리소스를 선택한 다음 리소스 생성을 선택합니다.

  2. 프록시 리소스는 꺼진 상태로 둡니다.

  3. 리소스 경로/로 유지합니다.

  4. 리소스 이름helloworld을 입력합니다.

  5. 오리진 간 리소스 공유(CORS)를 꺼진 상태로 둡니다.

  6. 리소스 생성을 선택합니다.

프록시 통합에서는 전체 요청이 HTTP 메서드를 나타내는 catch-all ANY 메서드를 통해 백엔드 Lambda 함수로 그대로 전송됩니다. 실제 HTTP 메서드는 실행 시 클라이언트가 지정합니다. ANY 메서드를 통해 지원되는 모든 HTTP 메서드인 DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT에 대해 단일 API 메서드 설정을 사용할 수 있습니다.

ANY 메서드를 생성하려면
  1. /helloworld 리소스를 선택한 다음 메서드 생성을 선택합니다.

  2. 메서드 유형에서 ANY를 선택합니다.

  3. 통합 유형에서 Lambda 함수를 선택합니다.

  4. Lambda 프록시 통합을 켭니다.

  5. Lambda 함수의 경우, Lambda 함수를 생성한 위치를 선택한 다음 AWS 리전 함수 이름을 입력합니다.

  6. 기본 제한 시간 값인 29초를 사용하려면 기본 제한 시간을 활성화된 상태로 유지합니다. 사용자 지정 제한 시간을 설정하려면 기본 제한 시간을 선택하고 50 ~ 29000밀리초 사이의 제한 시간 값을 입력합니다.

  7. 메서드 생성을 선택합니다.

API 배포 및 테스트

API를 배포하려면
  1. Deploy API(API 배포)를 선택합니다.

  2. 스테이지에서 새 스테이지를 선택합니다.

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

  4. (선택 사항) 설명에 설명을 입력합니다.

  5. 배포를 선택합니다.

  6. 스테이지 세부 정보에서 복사 아이콘을 선택하여 API의 호출 URL을 복사합니다.

브라우저와 cURL을 사용하여 API의 Lambda 프록시 통합 테스트

브라우저 또는 cURL을 사용하여 API를 테스트할 수 있습니다.

쿼리 문자열 파라미터를 사용하여 GET 요청을 테스트하려면, API의 helloworld 리소스에 대한 URL을 브라우저 주소 표시줄에 입력합니다. 예: https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?name=John&city=Seattle

다른 메서드의 경우 POSTMAN 또는 cURL 등의 고급 REST API 테스트 유틸리티를 사용해야 합니다. 이 자습서에서는 cURL을 사용합니다. 아래의 cURL 명령 예제는 컴퓨터에 cURL이 설치되어 있다고 전제합니다.

cURL을 사용하여 배포된 API를 테스트하려면 다음과 같이 합니다.
  1. 터미널 창을 엽니다.

  2. 다음 cURL 명령을 복사하여 터미널 창에 붙여 넣습니다. 호출 URL을 이전 단계에서 복사한 것으로 바꾸고 URL 끝에 /helloworld를 추가합니다.

    참고

    Windows에서 이 명령을 실행할 경우 다음 구문을 사용하십시오.

    curl -v -X POST "https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld" -H "content-type: application/json" -d "{ \"greeter\": \"John\" }"
    1. ?greeter=John이라는 쿼리 문자열 파라미터와 함께 API를 직접적으로 호출하려면 다음과 같이 합니다.

      curl -X GET 'https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?greeter=John'
    2. greeter:John이라는 헤더 파라미터와 함께 API를 직접적으로 호출하려면 다음과 같이 합니다.

      curl -X GET https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -H 'greeter: John'
    3. {"greeter":"John"}이라는 본문과 함께 API를 직접적으로 호출하려면 다음과 같이 합니다.

      curl -X POST https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -d '{ "greeter": "John" }'

    이 모든 경우에 출력되는 것은 다음과 같은 응답 본문이 있는 200 응답입니다.

    Hello, John!