Summary
API Gateway - Lambda - DynamoDB 아키텍처로 구성된 서버리스 애플리케이션을 만들고, DynamoDB에 레코드를 추가하는 간단한 람다 함수를 하나 만들고, API Gateway를 통해 이를 호출하고, API Gateway의 인증 기능을 이용해서 HTTP 요청에 특정 API Key를 사용하는 과정까지 진행해보겠습니다.
API Gateway - Lambdb 배포
Lambda와 API Gateway 세팅을 한꺼번에 진행하기 위해 SAM을 이용하며, SAM에 대한 참고자료는 다음과 같습니다.
https://serverlessland.com/patterns/lambda-dynamodb
참고자료를 이용하여 SAM 설치 및 템플릿 작성을 모두 마친 후 과정은 다음과 같습니다.
- 현재 로컬 환경에 nodejs 런타임을 설치합니다. (필자의 경우 템플릿 런타임 수정 후 node 14.x 버전 설치를 진행)
- sam build 명령을 통해 빌드가 정상적으로 진행되는지 확인합니다.
- sam deploy --guided를 통해 배포를 진행합니다. (최초배포시 guided 사용, 재배포시에는 생략 가능)
- Lambda 및 DynamoDB에 리소스들이 정상적으로 생성되었는지 확인합니다.
- 정상적으로 생성되었으면 다음 명령을 통해 정상적으로 작동하는지 확인합니다.(status 202 확인 시 성공!)
aws lambda invoke --function-name {Lambda Arn 입력} --invocation-type Event \
--payload '{ "Metadata": "Hello" }' \ response.json --cli-binary-format raw-in-base64-out
Lambda - API Gateway
Lambda의 함수 에서 방금 추가한 함수로 들어와 트리거 추가를 해주고 다음과 같이 설정해줍니다.
그 다음 생성된 API gateway 트리거의 엔드포인트에 HTTP 요청을 보내면, 함수를 호출할 수 있습니다. 요청의 상세 내용이 DynamoDB에 저장됩니다.
API gateway에 제한추가
API gateway에 POST 전용으로만 동작 하게하고, API key 및 권한 부여자를 이용한 인증을 부여하는 3가지의 제한을 추가해보겠습니다.
POST 전용으로 동작
먼저 API gateway의 리소스에서 메서드 생성을 진행하고 POST 선택 후 생성을 진행합니다.
생성이 완료되었으면 POST 를 클릭하고 다음과 같이 설정해줍니다.
이 과정을 통해 POST 설정이 완료되었습니다.
API key 추가
먼저 POST의 메서드 요청에 들어가서 API 키 필요 에 대한 설정을 true로 바꾸어 줍니다.
그 다음 API key 생성을 진행해 줍니다.
API key 생성이 완료되면 해당 key에 대한 사용량 계획을 추가해줍니다.
이 과정까지 모두 마치면 API key 키를 이용한 인증 구현이 완료되었습니다. 이 과정 이후 postman등을 이용하여 request header에 x-api-key를 이용하여 POST 요청을 진행하면 정상적으로 수행되는 것을 확인할 수 있습니다.
권한 부여자를 통한 인증
API gateway에서 권한 부여자로 가서 권한 부여자 생성을 클릭해서 다음과 같이 생성해줍니다.(필자는 미리 생성해놓은 것이 있어 화면 대체)
그 다음 테스트를 클릭하고 allow를 입력하여 테스트를 진행해보면 status code가 200이 정상적으로 오는 것을 확인할 수 있습니다.
이 과정까지 모두 마쳤으면 다시 리소스로 이동하여 메서드 요청에서 아래 그림과 같이 설정을 바꾸어줍니다.
이렇게 설정을 완료해주면 인증에 대한 모든 설정이 완료되었습니다.
Postman을 이용한 Test
이제 postman을 이용하여 직접 테스트를 진행해보겠습니다.
그 다음 POST 요청을 보낸 후 응답을 확인해보면
정상적으로 응답이 온 것을 확인할 수 있습니다.
dynamoDB에도 레코드가 정상적으로 추가된 것을 확인할 수 있습니다.
참고자료 :
'DevOps 부트캠프 > etc.' 카테고리의 다른 글
쿠버네티스(Kubernetes)란? + workload (0) | 2022.04.25 |
---|---|
IaC(Infrastructure as Code)란? _ Terraform (0) | 2022.04.24 |
마이크로서비스(MicroService)란? _MicroService와 Serverless (0) | 2022.04.06 |
Cloud Computing 이란? (0) | 2022.03.15 |
DevOps란?_DevOps와 CI/CD (0) | 2022.02.08 |
댓글