DevOps/AWS

[AWS] SAM으로 API Gateway와 lambda, dynamoDB 배포

동탄야도란 2023. 2. 3. 01:12
728x90
반응형

이번 포스팅은 aws cli와 aws configure가 미리 준비되어있다는 가정하에 진행하겠다

진행하기 앞서 실습 내용으로는 API Gateway로 POST요청을 보내게된다면 API Gateway를 트리거로 Lambda 함수를 깨워 받은 요청을 DynamoDB로 저장하게된다 또한 API Gateway를 이용해 api-key로 인증하는 방법과 권한을 부여자를 이용해서 인증부여해보겠다

 

SAM 배포

SAM으로 배포 하기위해 템플릿을 준비해보자 이링크를 들어가서 깃클론을 하자 간단하게 확인해보면 미리 람다와 DynamoDB와 세팅이 되어있는걸 확인할수있는데 SAM은 AWS콘솔이 아닌 인프라가 코드화되어있어서 복잡한 콘솔을 클릭하지않고 손쉽게 프로비저닝 할수있다 다운로드 부분에 명령어를 복사하고 터미널에 입력했다면 아래와 같은 파일 구조를 확인 할 수있는데 src폴더의 app.js는 실제 람다로 프로비저닝 되는 코드이며 template.yaml은 위에서 말한 인프라가 코드화되어있는 파일이다

yaml 파일에 Runtime: nodejs12.x 를 nodejs14.x로 바꿔주자

$ sam build #빌드 가능한지 확인
$ sam deploy --guided #배포 명령어 yaml 파일이 있는 경로에서

배포에 성공했다면 위의 그림 처럼 보일탠데 aws 콘솔에서 람다와 dynamoDB를 확인해본다면 테이블과 app.js파일이 람다함수로 만들어진걸 확인 할 수있다 간단하게 CLI 명령어로 잘작동이 되는지 확인해보자 아래의 명령어를 입력하고 202status가 뜬다면 잘 작동된걸 확인할수있다

$ aws lambda invoke --function-name {Lambda함수의Arn를입력} --invocation-type Event \
--payload '{ "Metadata": "Hello" }' \ response.json --cli-binary-format raw-in-base64-out

 

API Gateway 연결

왼쪽에 트리거 추가를 클릭하고 아래의 그림처럼 세팅해 주자 보안을 열어준 이유는 위에서 설명한 인증방식으로 처리하기위해 따로 오픈했다

 

만들어진 게이트웨이를 클릭한다면 아래의 그림을 확인 할 수있는데 필자는 미리 생성해둔 POST메소드가있는데 기본 생성하게된다면 ANY로 설정되어있을거다 리소스 옆에 작업을 클릭해서 메소드 생성해주자 API Gateway를 변경했다면 꼭 작업을 다시눌러서 API 배포를 눌러주자 

 

 

먼저 이상태에서 게이트웨이의 엔드포인트로 POST요청으로 바디안에 json타입으로 데이터를 보내게된다면 응답으로 200상태코드와 OK라는 문자가 바디에 들어온걸 확인할수있다

 

 DynamoDB를 확인해본다면 테이블에 잘 들어간걸 확인할수있다

 

API 키를 이용해서 인증

왼쪽 사이드에 API 키를 클릭해주자 작업을 클릭해서 키생성을 위해 이름을 정해주고 키는 자동생성으로 만들게된다면 아래의 그림 처럼 보이게된다 

 

사용량 계획은 얼만큼 API키를 사용할건지 제한하는거라고 보면되겠다 스테이지추가는 게이트웨이의 엔드포인트를 입력하면된다 입력했다면 위의 그림에서 사용량 계획을 API키에 추가하면되겠다

 

다시 리소스로 돌아와서 POST 메서드를 클릭하고 메서드 요청을 클릭하자 클릭한다면 아래의 그림을 확인 할 수있는데  API 키가 필요함 부분을 true로 바꿔주고 요청 헤더에 아래의 그림처럼 적용해주고 필수를 체크해주자 여기까지 했다면 다시한번 작업을 클릭하고 API 배포를 눌러주자

 

포스트맨으로 API키가 잘 적용되었는지 확인하기위해 위에서 생성했던 키를 복사하자 먼저 헤더에 키를 넣지않은 상태에서 요청을 보내보겠다 보내게된다면 아래의 그림처럼 응답으로 Forbidden이 온걸 확인할수있다

 

이번에는 헤더에 키를 넣는다면 아래의 그림처럼 성공 한걸 확인 할수있다

권한 부여자를 이용한 인증부여

이링크에 접속해서 코드를 복사하자 복사했다면 람다함수를 생성해주자 생성했다면 아래의 권한 부여자로 이동해 이름을 정해주고 방금 만들었던 함수를 연결해주자 아래의 그림처럼 세팅하자

 

세팅을 했다면 테스트를 클릭하고 allow를 넣게된다면 아래의 그림처럼 200 상태코드와 정책이 온걸 확인 할 수있다

 

권한 부여자를 생성했으니 위에 만들었던 리소스로 이동해서 승인을 클릭하고 방금 만들었던 권한부여자를 넣어주고 다시 작업을 클릭하고 API 배포를 진행하자

 

아래의 그림을 확인해본다면 권한이없을때는 Unauthoruzed가 뜨고 권한이 있다면 문제없이 잘 인증이된걸 확인할수있다

728x90
반응형