Amazon API Gateway 엔드포인트를 사용하여 간접적으로 Lambda 함수 호출 - AWS Lambda

Amazon API Gateway 엔드포인트를 사용하여 간접적으로 Lambda 함수 호출

Amazon API Gateway를 사용하여 웹API와 Lambda 함수의 HTTP 엔드포인트를 생성할 수 있습니다. API Gateway는 HTTP 요청을 Lambda 함수로 라우팅하는 웹 API를 생성하고 문서화하는 도구를 제공합니다. 인증 및 승인 제어를 통해 API에 대한 액세스를 보호할 수 있습니다. API는 인터넷을 통해 트래픽을 처리하거나 VPC 내에서만 액세스할 수 있습니다.

API의 리소스는 GET 또는 POST와 같은 하나 이상의 메서드를 정의합니다. 메서드에는 요청을 Lambda 함수 또는 다른 통합 유형으로 라우팅하는 통합이 있습니다. 각 리소스와 메서드를 개별적으로 정의하거나 특수 리소스 및 메서드 유형을 사용하여 패턴에 맞는 모든 요청을 일치시킬 수 있습니다. 프록시 리소스는 리소스 아래의 모든 경로를 포착합니다. ANY 메서드는 모든 HTTP 메서드를 포착합니다.

API 유형 선택

API Gateway는 Lambda 함수를 간접 호출하는 세 가지 유형의 API를 지원합니다.

  • HTTP API: 가볍고 대기 시간이 짧은 RESTful API입니다.

  • REST API: 사용자 지정 가능하고 기능이 풍부한 RESTful API입니다.

  • WebSocket API: 전이중 통신을 위해 클라이언트와의 지속적인 연결을 유지하는 웹 API입니다.

HTTP API와 REST API는 모두 HTTP 요청을 처리하고 응답을 반환하는 RESTful API입니다. HTTP API는 최신 버전이며 API Gateway 버전 2 API로 빌드되었습니다. HTTP API의 새로운 기능은 다음과 같습니다.

HTTP API 기능
  • 자동 배포 – 경로 또는 통합을 수정하면 자동 배포가 활성화된 단계에 변경 내용이 자동으로 배포됩니다.

  • 기본 단계 – API URL의 루트 경로에서 요청을 처리하는 기본 단계($default)를 만들 수 있습니다. 명명된 단계의 경우 경로 시작 부분에 단계 이름을 포함해야 합니다.

  • CORS 구성 – CORS 헤더를 함수 코드에 수동으로 추가하는 대신 발신 응답에 추가하도록 API를 구성할 수 있습니다.

REST API는 출시 이후 API Gateway가 지원한 클래식 RESTful API입니다. REST API에는 현재 더 많은 사용자 지정, 통합 및 관리 기능이 있습니다.

REST API 기능
  • 통합 유형 – REST API는 사용자 지정 Lambda 통합을 지원합니다. 사용자 지정 통합을 사용하면 요청 본문만 함수로 전송하거나 변환 템플릿을 요청 본문에 적용한 후에 함수로 전송할 수 있습니다.

  • 액세스 제어 – REST API는 인증 및 승인에 대한 더 많은 옵션을 지원합니다.

  • 모니터링 및 추적 – REST API는 AWS X-Ray 추적 및 추가 로깅 옵션을 지원합니다.

자세한 비교는 API Gateway 개발자 안내서HTTP API와 REST API 중에서 선택을 참조하세요.

또한 WebSocket API는 API Gateway 버전 2 API를 사용하고 유사한 기능 세트를 지원합니다. 클라이언트와 API 간의 지속적인 연결을 활용하는 애플리케이션에 대해 WebSocket API를 사용합니다. WebSocket API는 전이중 통신을 제공하므로 클라이언트와 API 모두 응답을 기다리지 않고 지속적으로 메시지를 전송할 수 있습니다.

HTTP API는 간소화된 이벤트 형식(버전 2.0)을 지원합니다. HTTP API의 이벤트 예제는 API Gateway에서 HTTP API에 대한 AWS Lambda 프록시 통합 생성을 참조하세요.

자세한 내용은 API Gateway에서 HTTP API에 대한 AWS Lambda 프록시 통합 생성을 참조하세요.

Lambda 함수에 엔드포인트 추가

Lambda 함수에 퍼블릭 엔드포인트를 추가하려면
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수를 선택합니다.

  3. 함수 개요(Function overview)에서 트리거 추가(Add trigger)를 선택합니다.

  4. API 게이트웨이(API Gateway)를 선택합니다.

  5. API 생성(Create an API) 혹은 기존 API 사용(Use an existing API)을 선택합니다.

    1. 새 API:API 유형에서 HTTP API를 선택합니다. 자세한 내용은 API 유형 선택 단원을 참조하십시오.

    2. 기존 API: 드롭다운 목록에서 API를 선택하거나 API ID(예: r3pmxmplak)를 입력합니다.

  6. Security(보안)에서 Open(열기)을 선택합니다.

  7. 추가를 선택합니다.

프록시 통합

API Gateway API는 스테이지, 리소스, 메서드 및 통합으로 구성됩니다. 스테이지와 리소스가 엔드포인트의 경로를 결정합니다.

API 경로 형식
  • /prod/prod 스테이지 및 루트 리소스입니다.

  • /prod/userprod 스테이지 및 user 리소스입니다.

  • /dev/{proxy+}dev 스테이지의 모든 경로입니다.

  • / – (HTTP API) 기본 스테이지 및 루트 리소스입니다.

Lambda 통합은 경로와 HTTP 메서드 조합을 Lambda 함수에 매핑합니다. HTTP 요청의 본문을 있는 그대로 전달하거나(사용자 지정 통합) 헤더, 리소스, 경로 및 메서드를 비롯한 모든 요청 정보가 포함된 문서에 요청 본문을 캡슐화하도록 API Gateway를 구성할 수 있습니다.

자세한 내용은 API Gateway의 Lambda 프록시 통합을 참조하세요.

이벤트 형식

Amazon API Gateway는 HTTP 요청의 JSON 표현을 포함하는 이벤트와 동기적으로 함수를 간접 호출합니다. 사용자 지정 통합의 경우 이벤트는 요청 본문입니다. 프록시 통합의 경우 이벤트의 구조가 정의되어 있습니다. API Gateway REST API의 프록시 이벤트 예제는 API Gateway 개발자 안내서프록시 통합에 대한 Lambda 함수의 입력 형식을 참조하세요.

응답 형식

API Gateway는 함수의 응답을 기다렸다가 결과를 호출자에게 중계합니다. 사용자 지정 통합의 경우 함수의 출력을 HTTP 응답으로 변환하는 통합 응답 및 메서드 응답을 정의합니다. 프록시 통합의 경우 함수는 특정 형식의 응답 표현으로 응답해야 합니다.

다음 예제는 Node.js 함수의 응답 객체를 보여줍니다. 응답 객체는 JSON 문서를 포함하는 성공적인 HTTP 응답을 나타냅니다.

예 index.mjs – 프록시 통합 응답 객체(Node.js)
var response = { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "isBase64Encoded": false, "multiValueHeaders": { "X-Custom-Header": ["My value", "My other value"], }, "body": "{\n \"TotalCodeSize\": 104330022,\n \"FunctionCount\": 26\n}" }

Lambda 런타임은 응답 객체를 JSON으로 직렬화하여 API로 전송합니다. API는 응답을 구문 분석하고 이를 사용하여 HTTP 응답을 만든 다음 원래 요청을 한 클라이언트로 보냅니다.

예 HTTP 응답
< HTTP/1.1 200 OK < Content-Type: application/json < Content-Length: 55 < Connection: keep-alive < x-amzn-RequestId: 32998fea-xmpl-4268-8c72-16138d629356 < X-Custom-Header: My value < X-Custom-Header: My other value < X-Amzn-Trace-Id: Root=1-5e6aa925-ccecxmplbae116148e52f036 < { "TotalCodeSize": 104330022, "FunctionCount": 26 }

권한

Amazon API Gateway는 함수의 리소스 기반 정책에서 함수를 간접 호출하는 권한을 가져옵니다. 전체 API에 간접 호출 권한을 부여하거나 스테이지, 리소스 또는 메서드에 제한된 액세스 권한을 부여할 수 있습니다.

Lambda 콘솔, API Gateway 콘솔 또는 AWS SAM 템플릿을 사용하여 API를 함수에 추가할 때 함수의 리소스 기반 정책이 자동으로 업데이트됩니다. 다음은 함수 정책의 예입니다.

예 함수 정책
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "nodejs-apig-functiongetEndpointPermissionProd-BWDBXMPLXE2F", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:nodejs-apig-function-1G3MXMPLXVXYI", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:execute-api:us-east-2:111122223333:ktyvxmpls1/*/GET/" } } } ] }

다음 API 작업을 사용하여 함수 정책 권한을 수동으로 관리할 수 있습니다.

기존 API에 호출 권한을 부여하려면 add-permission 명령을 사용합니다. 예제:

aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-get --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET/"

다음 결과가 표시됩니다.

{ "Statement": "{\"Sid\":\"apigateway-test-2\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET\"}}}" }
참고

함수와 API가 다른 AWS 리전에 있는 경우 소스 ARN의 리전 식별자는 API의 리전이 아닌 함수의 리전과 일치해야 합니다. API Gateway에서 함수를 간접적으로 간접 호출하면 API의 ARN을 기반으로 하지만 함수의 리전과 일치하도록 수정된 리소스 ARN을 사용합니다.

이 예제의 소스 ARN은 ID mnh1xmpli7과 함께 API의 기본 단계에서 루트 리소스의 GET 메서드에 대한 통합 권한을 부여합니다. 소스 ARN에 별표를 사용하여 여러 단계, 메서드 또는 리소스에 권한을 부여할 수 있습니다.

리소스 패턴
  • mnh1xmpli7/*/GET/* – 모든 단계의 모든 리소스에 대한 GET 메서드.

  • mnh1xmpli7/prod/ANY/userprod 스테이지의 user 리소스에 대한 ANY 메서드.

  • mnh1xmpli7/*/*/* – 모든 단계의 모든 리소스에 대한 모든 메서드.

정책 보기 및 명령문 제거에 대한 자세한 내용은 Lambda에서 리소스 기반 IAM 정책 작업 단원을 참조하세요.

샘플 애플리케이션

Node.js를 사용하는 API Gateway 샘플 앱에는 AWS X-Ray 추적이 활성화된 REST API를 생성하는 AWS SAM 템플릿이 포함된 함수가 포함되어 있습니다. 여기에는 배포, 함수 간접 호출, API 테스트 및 정리를 위한 스크립트도 포함됩니다.