API Gateway와 Lambda를 이용한 서버리스 애플리케이션
본문 바로가기
DevOps 부트캠프/etc.

API Gateway와 Lambda를 이용한 서버리스 애플리케이션

by liveloper jay 2022. 4. 17.

Summary


API Gateway - Lambda - DynamoDB 아키텍처로 구성된 서버리스 애플리케이션을 만들고, DynamoDB에 레코드를 추가하는 간단한 람다 함수를 하나 만들고, API Gateway를 통해 이를 호출하고, API Gateway의 인증 기능을 이용해서  HTTP 요청에 특정 API Key를 사용하는 과정까지 진행해보겠습니다.

 

 

 

 

 

 

 

API Gateway - Lambdb 배포


Lambda와 API Gateway 세팅을 한꺼번에 진행하기 위해 SAM을 이용하며, SAM에 대한 참고자료는 다음과 같습니다.

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html

https://serverlessland.com/patterns/lambda-dynamodb

 

Serverless Land

Your resource for learning serverless technology.

serverlessland.com

 

Installing the AWS SAM CLI - AWS Serverless Application Model

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

참고자료를 이용하여 SAM 설치 및 템플릿 작성을 모두 마친 후 과정은 다음과 같습니다.

  1.  현재 로컬 환경에 nodejs 런타임을 설치합니다. (필자의 경우 템플릿 런타임 수정 후 node 14.x 버전 설치를 진행)
  2.  sam build 명령을 통해 빌드가 정상적으로 진행되는지 확인합니다.
  3.  sam deploy --guided를 통해 배포를 진행합니다. (최초배포시 guided 사용, 재배포시에는 생략 가능)
  4.  Lambda 및 DynamoDB에 리소스들이 정상적으로 생성되었는지 확인합니다. 
  5. 정상적으로 생성되었으면 다음 명령을 통해 정상적으로 작동하는지 확인합니다.(status 202 확인 시 성공!)
aws lambda invoke --function-name {Lambda Arn 입력} --invocation-type Event \
--payload '{ "Metadata": "Hello" }' \ response.json --cli-binary-format raw-in-base64-out

202 정상적으로 확인됨

 

 

 

 

 

 

Lambda - API Gateway


Lambda의 함수 에서 방금 추가한 함수로 들어와 트리거 추가를 해주고 다음과 같이 설정해줍니다.

이렇게 설정하고 추가 눌러줌

 

그 다음 생성된 API gateway 트리거의 엔드포인트에 HTTP 요청을 보내면, 함수를 호출할 수 있습니다. 요청의 상세 내용이 DynamoDB에 저장됩니다.

이 화면에서 API 엔드포인트 확인가능

 

 

 

 

 

 

 

API gateway에 제한추가


API gateway에 POST 전용으로만 동작 하게하고, API key 및 권한 부여자를 이용한 인증을 부여하는 3가지의 제한을 추가해보겠습니다.

 

 

POST 전용으로 동작

 먼저 API gateway의 리소스에서 메서드 생성을 진행하고 POST 선택 후 생성을 진행합니다.

해당 사진에서 메서드 생성 선택

 

생성이 완료되었으면 POST 를 클릭하고 다음과 같이 설정해줍니다.

Lambda 함수에는 생성한 Lambda함수를 넣어주면 됩니다.

 

 이 과정을 통해 POST 설정이 완료되었습니다.

 

 

API key 추가

먼저 POST의 메서드 요청에 들어가서 API 키 필요 에 대한 설정을 true로 바꾸어 줍니다.

true로 변경

그 다음 API key 생성을 진행해 줍니다.

API 키 생성 클릭
이름 설정해주고 생성

API key 생성이 완료되면 해당 key에 대한 사용량 계획을 추가해줍니다.

사용량 계획 생성화면(요청수와 할당량 설정 후 다음)
현재 작업중인 API 선택 후 스테이지 default 선택하고 다음
방금 만든 API 키 이름 작성 후 생성완료

 

이 과정까지 모두 마치면 API key 키를 이용한 인증 구현이 완료되었습니다. 이 과정 이후 postman등을 이용하여 request header에 x-api-key를 이용하여 POST 요청을 진행하면 정상적으로 수행되는 것을 확인할 수 있습니다.

 

 

권한 부여자를 통한 인증

API gateway에서 권한 부여자로 가서 권한 부여자 생성을 클릭해서 다음과 같이 생성해줍니다.(필자는 미리 생성해놓은 것이 있어 화면 대체)

lambda 함수의 경우 권한 부여자 위한 함수 하나 생성

 그 다음 테스트를 클릭하고 allow를 입력하여 테스트를 진행해보면 status code가 200이 정상적으로 오는 것을 확인할 수 있습니다.

응답코드 200 확인

 이 과정까지 모두 마쳤으면 다시 리소스로 이동하여 메서드 요청에서 아래 그림과 같이 설정을 바꾸어줍니다.

승인 auth로 변경

이렇게 설정을 완료해주면 인증에 대한 모든 설정이 완료되었습니다.

 

 

 

 

 

Postman을 이용한 Test


이제 postman을 이용하여 직접 테스트를 진행해보겠습니다.

Header에 API 키 값과 authorizationToken 추가
요청 body에 데이터 추가

 그 다음 POST 요청을 보낸 후 응답을 확인해보면

200 OK! 확인

정상적으로 응답이 온 것을 확인할 수 있습니다.

DynamoDB 항목 확인

dynamoDB에도 레코드가 정상적으로 추가된 것을 확인할 수 있습니다.

 

 

 

참고자료 :

https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/api-gateway-create-api-from-example.html

https://velog.io/@jm1225/AWS-API-Gateway-for-Lambda

댓글