Amazon API Gateway 단계 변수 사용 - Amazon API Gateway

Amazon API Gateway 단계 변수 사용

API Gateway 단계 변수를 사용하여 다양한 API 배포 단계의 HTTP 및 Lambda 백엔드에 액세스할 수 있습니다. 또한 단계 변수를 사용하여 스테이지별 구성 메타데이터를 HTTP 백엔드에는 쿼리 파라미터로 전달하고 Lambda 함수에는 입력 매핑 템플릿에서 생성되는 페이로드로 전달할 수도 있습니다.

Prerequisites

url 변수가 두 가지 HTTP 엔드포인트로 설정된 두 단계를 생성해야 합니다. 즉, 두 가지 Lambda 함수에 할당된 function 단계 변수 및 단계별 메타데이터가 포함된 version 단계 변수를 말합니다. Amazon API Gateway 콘솔을 사용하여 단계 변수 설정의 지침을 따르세요.

단계 변수를 사용하여 API를 통해 HTTP 엔드포인트 액세스

  1. 단계 탐색 창에서 베타를 선택합니다. [beta Stage Editor]에서 [Invoke URL] 링크를 선택합니다. 그러면 API의 루트 리소스에 대한 [beta] 단계 GET 요청이 시작됩니다.

    참고

    [Invoke URL] 링크는 [beta] 단계에서 API의 루트 리소스를 가리킵니다. 링크를 선택하여 URL을 탐색하면 루트 리소스에서 링크 베타 단계 GET 메서드를 호출합니다. 루트 리소스 자체가 아닌 하위 리소스에 메서드가 정의된 경우, Invoke URL(URL 호출) 링크를 선택하면 {"message":"Missing Authentication Token"} 오류 응답이 반환됩니다. 이 경우 특정 하위 리소스의 이름을 URL 호출(Invoke URL) 링크에 추가해야 합니다.

  2. [beta] 단계 GET 요청에서 받은 응답은 다음에 표시됩니다. 브라우저로 [http://httpbin.org/get] 페이지를 탐색해 결과를 확인할 수도 있습니다. 이 값은 [beta] 단계의 url 변수에 할당되었습니다. 이 두 응답은 동일합니다.

  3. 단계(Stages) 탐색 창에서 prod 단계를 선택합니다. prod 단계 편집기(prod Stage Editor)에서 URL 호출(Invoke URL) 링크를 선택합니다. 그러면 API의 루트 리소스에 대한 prod 단계 GET 요청이 시작됩니다.

  4. [prod] 단계 GET 요청에서 받은 응답은 다음에 표시됩니다. 브라우저로 http://petstore-demo-endpoint.execute-api.com/petstore/pets 페이지를 탐색해 결과를 확인할 수 있습니다. 이 값은 [prod] 단계의 url 변수에 할당되었습니다. 이 두 응답은 동일합니다.

쿼리 파라미터 표현식에서 스테이지 변수를 통해 HTTP 백엔드에 스테이지별 메타데이터 전달

이 절차에서는 쿼리 파라미터 표현식에서 스테이지 변수 값을 사용하여 스테이지별 메타데이터를 HTTP 백엔드로 전달하는 방법에 대해 설명합니다. version에 설명된 Amazon API Gateway 콘솔을 사용하여 단계 변수 설정 단계 변수를 사용하겠습니다.

  1. 리소스 탐색 창에서 GET 메서드를 선택합니다. 메서드의 URL에 쿼리 문자열 파라미터를 추가하려면 메서드 실행(Method Execution)에서 메서드 요청(Method Request)을 선택합니다. 파라미터 이름에 version를 입력합니다.

  2. Method Execution(메서드 실행)에서 Integration Request(통합 요청)를 선택합니다. Endpoint URL(엔드포인트 URL) 값을 편집하여 이전에 정의한 URL 값에 ?version=${stageVariables.version}을 추가합니다. 이 경우에는 url 단계 변수로도 표현됩니다. Deploy API(API 배포)를 선택하여 이 변경 사항을 배포합니다.

  3. Stages(단계) 탐색 창에서 베타 단계를 선택합니다. beta Stage Editor(베타 단계 편집기)에서 현재 단계가 가장 최신 배포에 포함되어 있는지 확인한 다음, Invoke URL(URL 호출) 링크를 선택합니다.

    참고

    url 변수 "http://httpbin.org/get"에서 지정한 바와 같이 HTTP 엔드포인트가 쿼리 파라미터 표현식을 수락하고 응답으로 args 객체로 반환하기 때문에 베타 스테이지를 사용합니다.

  4. 다음에 응답이 표시됩니다. v-beta 단계 변수에 할당된 version는 백엔드에 version 인수로 전달됩니다.

    
              beta 단계에 url 단계 변수와 함께 HTTP 엔드포인트에 대한 프록시를 사용한 API의 GET 메서드로부터 받은 응답

단계 변수를 사용하여 API를 통해 Lambda 함수 호출

이 절차에서는 스테이지 변수를 사용하여 Lambda 함수를 API 백엔드로 호출하는 방법을 설명합니다. 앞서 설명한 function 단계 변수를 사용하겠습니다. 자세한 내용은 Amazon API Gateway 콘솔을 사용하여 단계 변수 설정 단원을 참조하세요.

  1. 리소스 창에서 루트 디렉터리 아래에 /lambdasv1 하위 리소스를 생성한 후 하위 리소스에 GET 메서드를 생성합니다. Integration type(통합 유형()Lambda 함수로 설정하고 Lambda 함수${stageVariables.function}을 입력합니다. 저장(Save)을 선택합니다.

    
              function 단계 변수에서 지정한 대로 Lambda 함수와 통합된 GET 메서드를 생성합니다.
    작은 정보

    Lambda 함수에 대한 권한 추가 프롬프트가 표시되면 AWS CLI 명령을 기록한 후 확인을 선택합니다. 새로 생성된 각 API 메서드에 대한 function 단계 변수에 할당되었거나 앞으로 할당될 각 Lambda 함수에서 명령을 실행해야 합니다. 예를 들어 $stageVariables.function 값이 HelloWorld이고 아직 이 함수에 권한을 추가하지 않았다면 다음 AWS CLI 명령을 실행해야 합니다.

    aws lambda add-permission --function-name arn:aws:lambda:us-east-1:account-id:function:HelloWorld --source-arn arn:aws:execute-api:us-east-1:account-id:api-id/*/GET/lambdasv1 --principal apigateway.amazonaws.com --statement-id statement-id-guid --action lambda:InvokeFunction

    그렇지 않으면 메서드 호출 시 500 Internal Server Error 응답이 반환됩니다. ${stageVariables.function}을 단계 변수에 할당된 Lambda 함수 이름으로 바꾸어야 합니다.

    
                AWS CLI 명령을 실행하여 방금 생성한 메서드에서 호출할 Lambda 함수에 권한을 추가합니다.
  2. API를 사용 가능한 단계에 배포합니다.

  3. Stages(단계) 탐색 창에서 베타 단계를 선택합니다. [beta Stage Editor]에 최신 배포가 포함되어 있는지 확인합니다. Invoke URL(URL 호출) 링크를 복사하여 브라우저의 주소 표시줄에 붙여 넣은 후 이 URL에 /lambdasv1을 추가합니다. 그러면 GET 메서드를 통해 API의 LambdaSv1 하위 리소스에 기본 Lambda 함수를 호출합니다.

    참고

    HelloWorld Lambda 함수는 다음 코드를 구현합니다.

    exports.handler = function(event, context, callback) { if (event.version) callback(null, 'Hello, World! (' + event.version + ')' ); else callback(null, "Hello, world! (v-unknown)"); };

    이 구현 작업에서는 다음 응답이 반환됩니다.

    "Hello, world! (v-unknown)"

단계 변수를 통해 Lambda 함수에 단계별 메타데이터 전달

이 절차에서는 단계 변수를 사용하여 Lambda 함수로 단계별 구성 메타데이터를 전달하는 방법을 설명합니다. POST 메서드 및 입력 매핑 템플릿에 앞서 설명한 version 단계 변수를 사용하여 페이로드를 생성하겠습니다.

  1. 리소스 창에서 /lambdasv1 하위 리소스를 선택합니다. 하위 리소스에서 POST 메서드를 생성하고 Integration type(통합 유형)Lambda 함수로 설정한 다음, Lambda 함수${stageVariables.function}을 입력합니다. 저장(Save)을 선택합니다.

    작은 정보

    이 단계는 GET 메서드를 생성하는 데 사용하는 단계와 비슷합니다. 자세한 내용은 단계 변수를 사용하여 API를 통해 Lambda 함수 호출 단원을 참조하세요.

  2. Method Execution(메서드 실행) 창에서 통합 요청Integration Request(통합 요청)을 선택합니다. 다음과 같이 통합 요청(Integration Request) 창에서 매핑 템플릿(Mapping Templates)을 확장한 다음 매핑 템플릿 추가(Add mapping template)를 선택해 application/json 콘텐츠 유형에 템플릿을 추가합니다.

    
              version 단계 변수 값으로 표현되는 단계별 구성 메타데이터를 포함한 POST 메서드 페이로드를 백엔드 Lambda 함수의 입력으로 생성합니다.
    참고

    매핑 템플릿에서 스테이지 변수는 따옴표 안에 참조되어야 합니다("$stageVariables.version" 또는 "${stageVariables.version}"에서와 같이). 다른 곳에서는 따옴표 없이 참조해야 합니다(${stageVariables.function}에서와 같이).

  3. API를 사용 가능한 단계에 배포합니다.

  4. 단계 탐색 창에서 베타를 선택합니다. beta Stage Editor(베타 스테이지 편집기)에서 현재 스테이지에 최신 배포가 포함되어 있는지 확인합니다. Invoke URL(URL 호출) 링크를 복사하여 REST API 클라이언트의 URL 입력 필드에 붙여 넣고, 이 URL에 /lambdasv1을 추가한 다음, 기본 Lambda 함수에 POST 요청을 제출합니다.

    참고

    응답은 다음과 같습니다.

    "Hello, world! (v-beta)"