이번 포스팅에서는 SAM 을 이용하여 API Gateway로 Lambda 함수를 이용 요청한 내용을 DynamoDB로 저장하게 되는 과정에 대해 진행한다.
로컬 PC에 aws cli 와 aws configure, node.js 설치 및 설정 되어있어야 한다
먼저 SAM 으로 배포하기 위한 템플릿을 받아야된다. 앞선 시간에는 AWS 에서 제공해주는 템플릿으로 진행하였지만 이번에는 여기서 다운받아 진행하자 Lambda to DynamoDB
git clone 하게 되면 위와 같이 디렉토리가 생성되며 template.yaml
파일이 보이는데 수정해주자.
아마 Runtime 버전이 12.x 일텐데 람다는 14.x 을 지원해주므로 위에 사진처럼 바꿔주자.
sam build 명령어를 실행하여 build 준비를 하자
sam deploy --guided 명령어 실행하여 soobin-sam 스택이름으로 배포하자.
진행하다 중간에 y 눌러줘야 된다.
정상적으로 배포성공했다.
AWS Lambda 이동하면 sam 을 이용해서 만든 함수가 출력된다. 눌러보자.
누른 다음 트리거 추가 버튼을 눌러 API Gateway 를 생성해주자.
와 같이 설정해주고 추가 누르면 생성된다.
위와 같이 API Gateway에 endpoint 가 생성되었고 웹사이트로 접속하게되면 아래와 같은 화면이 나온다.
정상 이다.
이제 이 리소스에 포스트만 접근가능하도록 설정을 바꿔보자.
API Gateway 이름을 선택해서 아래와 같은 화면으로 이동하자.
다음과 같이 any 설정인걸 볼 수 있다. 나는 저 any 를 삭제하고 post로 새로 생성해줬다.
여기서 메소드 생성을 누르자.
post를 선택하고 체크표시 선택해서 저장하자.
그러면 옵션 설정과 어떤 함수를 연결시켜줄지 설정해주자. 나는 위에서 생성한 soobin-sam 으로 지정하고 저장을 누르자.
저장을 누른 후 해당 메소드를 배포시켜야 하므로 작업에서 API 배포를 눌러 배포하자.
배포 기록을 확인해서 잘 배포되었는지 확인한다.
postman 을 이용하여 이 endpoint 로 post 명령을 보내 디비로 보내보자.
나는 soobinworld 로 데이터를 보냈고 성공적인 전송이다. 정말로 들어간건지 db 로 이동해 확인해보자.
dynamoDB 로 이동 테이블 -> 항목 탐색을 눌러 데이터가 들어갔것을 확인했다.
❓ 여기서 궁금한점 정말 post 만 되나? postman을 이용해서 get 메서드를 실행해보았다.
다음과 같이 403 에러를 보여준다. post 만 되는 것을 확인했다.
앞 시간에 post 전용으로 만든 함수에다 api 키를 추가하여 키를 알고있는 사람만 가능하게 만들어보자.
나는 다음과 같이 soobinkey 를 생성해주었고, 사용량 계획을 추가해줘야 된다. 좌측 메뉴에서 사용량 계획으로 이동해서 생성해주자.
생성해준 후 API 스테이지 추가 버튼을 눌러 내가 생성한 API 를 연결해주자.
두번째 탭 API 키 탭으로 이동하여 위에서 추가해준 키 이름을 입력하고 저장해주자.
키의 준비는 끝났다. 리소스 메뉴에서 설정을 바꿔주자.
post 에서 메서드 요청을 누른다.
다음과 같이 화면이 나오는데 API 키가 필요함 False 부분을 True 로 바꿔주자.
true 바꿔주면 우측에 느낌표가 사라지는걸 볼 수 있다.
모든 설정이 완료되었다. API 배포하자.
정상배포된걸 확인 할 수 있다.
postman 으로 post 보냈다. 안된다... 왜? API 키를 설정해줘야 하기 때문이다.
키내용은 보여주면 안되니까 포스트맨에서 Headers 값의 key 를 x-api-key 입력하고 value 부분에 나의 키 값을 넣자. 키값은 API 키 메뉴에서 확인할 수 있다.
성공적이다.
db 에도 정상적으로 들어간 것을 볼 수 있다.