APIGateway

API Gateway를 통한 REST API 구축 하기

학습내용


1. API Gateway란?

1.1Amazon API Gateway에서 Lambda 통합으로 REST API 생성

[실습] Lambda 통합 API Gateway REST API 생성


1 단계: Lambda 콘솔에서 Lambda 함수 생성

Lambda 콘솔에서 함수 페이지를 엽니다.

  1. 함수 생성을 선택합니다.
  2. 기본 정보에서 다음과 같이 합니다.
    • [함수 이름(Function name)]에 my-function1을 입력합니다.
    • [런타임(Runtime)]에 Node.js 18.x가 선택되어 있는지 확인합니다. Lambda는 .NET(PowerShell, C#) Go, Java, Node.js, Python 및 Ruby용 런타임을 제공합니다.
  3. 함수 생성을 선택합니다.
  4. 함수 코드 창에 나온 코드를 다음 코드로 대체합니다.

    export const handler = async (event) => {
        let name = event.queryStringParameters.from;
        let greeing = `Hello ${name}, from Lambda.`;
        const response = {
            statusCode: 200,
            body: JSON.stringify(greeting)
        };
        return response;
    };
    
  5. [Deploy]를 선택합니다.

2 단계: API Gateway 콘솔에서 REST API 생성

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

  1. API Gateway를 처음 사용하는 경우, 서비스의 기능을 소개하는 페이지가 나타납니다. REST API에서 구축 선택합니다. 예제 API 생성 팝업이 나타나면 확인을 선택합니다.
    • API Gateway를 처음 사용하는 것이 아닌 경우 API 생성을 선택합니다. REST API에서 [구축]를 선택합니다.
  2. 다음과 같이 비어 있는 API를 생성합니다.
    • REST API 생성에서 새 API를 선택합니다.
    • 설정에서 다음과 같이 합니다.
      • API 이름에서 LambdaApi을(를) 입력합니다.
      • 필요한 경우 설명 필드에 설명을 입력합니다. 설명을 입력하지 않으려면 비워 둡니다.
      • 엔드포인트 유형(Endpoint Type) 설정을 지역(Regional)으로 그대로 둡니다.
    • API 생성(Create API)을 선택합니다.
  3. 다음과 같이 greeting 리소스를 만듭니다.
    • 리소스 트리에서 루트 리소스(/)를 선택하고, 리소스 생성을 클릭합니다.
    • 리소스 이름greeting을 입력합니다.
    • 오리진 간 리소스 공유(CORS)를 선택 해제된 상태로 둡니다.
    • Create Resource(리소스 생성)을 클릭합니다.
  4. greeting 리소스에 대한 GET 메소드를 설정합니다.
    • 리소스 목록에서 /greeting을 선택합니다.
    • 메서드 섹션에서 메서드 생성을 클릭합니다.
    • 메서드 유형의 드롭다운 메뉴에서 GET을 선택합니다.
    • 통합 유형(Integration type) 설정을 Lambda 함수(Lambda Function)로 유지합니다.
    • Lambda 프록시 통합을 활성화합니다.
    • Lambda 함수 에서 my-function1 Lambda 함수를 생성한 리전을 선택하고, 드롭다운 메뉴에서 my-function1 을 선택합니다.
    • Use Default Timeout(기본 제한 시간 사용)이 선택된 상태이어야 합니다.
    • 메서드 생성을 클릭합니다.

3 단계: API Gateway 콘솔에서 REST API 배포

API Gateway 콘솔에서 API 배포

  1. API 배포를 선택합니다.
  2. 스테이지에서 새 단계를 선택합니다.
  3. 단계 이름에 test를 입력합니다.
  4. 필요한 경우 단계 설명을 입력합니다.
  5. 필요한 경우 배포 설명을 입력합니다.
  6. 배포를 클릭합니다.
  7. API의 호출 URL을 클릭하여 테스트해본다.
    • 웹 브라우저의 주소창에 URL을 복사하고, 그 뒤의 패스에 /greeting?from=kwlee을 덧붙인 후 엔터를 쳐본다.
    • “Hello kwlee, from Lambda.” 메시지가 브라우저 창에 출력되는지 확인해 본다.

4 단계: Lambda 콘솔에서 두번째 Lambda 함수 생성

Lambda 콘솔에서 함수 페이지를 엽니다.

  1. 함수 생성을 선택합니다.
  2. 기본 정보에서 다음과 같이 합니다.
    • [함수 이름(Function name)]에 my-function2을 입력합니다.
    • [런타임(Runtime)]에 Node.js 18.x가 선택되어 있는지 확인합니다. Lambda는 .NET(PowerShell, C#) Go, Java, Node.js, Python 및 Ruby용 런타임을 제공합니다.
  3. 함수 생성을 선택합니다.
  4. 함수 코드 창에 나온 코드를 다음 코드로 대체합니다.

     export const handler = async (event) => {
       let name = event.from;
       let greeting = `Hello ${name}, from Lambda.`;
       // TODO implement
       const response = {
         statusCode: 200,
         body: JSON.stringify(greeting),
       };
       return response;
     };	
    
  5. [Deploy]를 클릭합니다.
  6. 새로 생성된 함수를 테스트하려면 Test을 선택하고 Configure test event (테스트 이벤트 구성)을 선택합니다.
    • 이벤트 이름에 GreetingTest를 입력하고
    • 이벤트 JSON에서 아래와 같이 변경한 후, 저장을 클릭합니다.

      { "from": "Kwanwoo" }

  7. 테스트를 선택하여 함수를 호출합니다. 정상 수행되면 다음과 같은 출력이 표시됩니다.

5 단계: API Gateway 콘솔에서 REST API에 리소드, 메소드, 파라미터 추가

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

  1. API 목록에서 * LambdaApi*를 선택합니다.
  2. 다음과 같이 greeting2 리소스를 만듭니다.
    • 리소스 트리에서 루트 리소스(/)를 선택하고, 리소스 생성을 클릭합니다.
    • 리소스 이름greeting2를 입력합니다.
    • 오리진 간 리소스 공유(CORS)를 선택 해제된 상태로 둡니다.
    • Create Resource(리소스 생성)을 클릭합니다.
  3. greeting2 리소스에 대한 GET 메소드를 설정합니다.
    • 리소스 목록에서 /greeting2을 선택합니다.
    • 메서드 섹션에서 메서드 생성을 클릭합니다.
    • 메서드 유형의 드롭다운 메뉴에서 GET을 선택합니다.
    • 통합 유형(Integration type) 설정을 Lambda 함수(Lambda Function)로 유지합니다.
    • Lambda 프록시 통합을 선택 해제한 상태로 유지합니다.
    • Lambda 함수 에서 my-function2 Lambda 함수를 생성한 리전을 선택하고, 드롭다운 메뉴에서 my-function2 을 선택합니다.
    • Use Default Timeout(기본 제한 시간 사용)이 선택된 상태이어야 합니다.
    • 메시드 생성을 선택합니다.
  4. 통합요청을 선택하여, 클라이언트가 제공하는 HTTP Request를 Lambda 함수가 인식하는 형식으로 변환합니다.
    • 화면의 하단의 템플릿 생성을 클릭한다.
    • 콘텐츠 유형 드롭다운 메뉴에서 application/json을 입력
    • 탬플릿 생성 드롭다운 메뉴에서 메서드 요청 패스스루를 선택하고, 템플릿 본문에 다음을 입력합니다.

       {
           "from": "$input.params('from')"
       }
      

      이는 Lambda 함수(my-function2)에 전달될 JSON 문서 형식을 나타내는 것으로, from 속성의 값으로 입력 쿼리 문자열에서 이름이 “from”인 파라미터의 값을 지정한다는 의미입니다.

    • 탬플릿 생성을 클릭합니다.
  5. 마지막으로 API 배포를 진행합니다.
    • 스테이지 드롭다운 메뉴에서 test를 선택하고, 배포를 선택합니다.
  6. API는 다음과 같이 테스트 합니다.
    • 웹 브라우저의 주소창에 URL을 복사하고, 그 뒤의 패스에 /greeting2?from=kwlee을 덧붙인 후 엔터를 쳐본다.
    • {“statusCode”:200,”body”:”\“Hello kwlee, from Lambda.\””} 메시지가 브라우저 창에 출력되는지 확인해 본다.

2. REST API 설계

2.1 디바이스 목록 조회

2.4 디바이스 로그 조회


3. API Gateway를 통한 Device Shadow 액세스 하기

AWS IoT 플랫폼에서는 원하는 프로그래밍 언어를 기반으로 AWS SDK를 사용하여 디바이스 섀도에 액세스 할 수 있습니다. 이 장에서는 Java용 AWS SDK를 사용하여 Device Shadow를 액세스하는 Lambda 함수를 정의하고, 이 Lambda 함수를 API Gateway와 통합하여 2절에서 정의한 REST API를 구축하는 방법을 설명합니다.

  1. 디바이스 목록 조회 REST API 구축하기
  2. 디바이스 상태 조회 REST API 구축하기
  3. 디바이스 상태 변경 REST API 구축하기
  4. 디바이스 로그 조회 REST API 구축하기