API Gateway
- 대부분의 어플리케이션은 RESTful API 기반으로 운용됨
- 매우 힘든 RESTful API 관리
- Authentication & Authorization (인증 받은 사람만 보이는)
- API 요청을 모니터링 해야함
- 더나은 성능을 위해 API요청 캐시 시스템 필요
API Gateway란?
- 뛰어난 확장성 제공 및 API를 만들고 운영하고 모니터링 가능 (CloudWatch)
- Back-end 서비스 (웹 어플리케이션, EC2)에 들어있는 데이터 접근 허용
- Pay As You Go (API 사용할떄, API요청이 얼마나 오래 걸리는지, 얼마나 많은 데이터를 처리하는지에 따라 비용을 책정)
- 인증 인가 서비스
- 라우팅과 로드밸런싱
- 서비스 디스커버리(원하는 서비스의 IP, 포트 주소를 찾아주는 역할)
API Gateway 실습
![](https://velog.velcdn.com/images/black2code/post/83d1fcfc-4a87-400f-b176-c67529196542/image.png)
- API Gateway 에서 요청을 받아 Lambda -> 데이터를 DynamoDB에 삽입
1. DynamoDB 생성
![](https://velog.velcdn.com/images/black2code/post/5bb86700-e981-4c4d-b740-e8f0d97dcee9/image.png)
![](https://velog.velcdn.com/images/black2code/post/c12ba35d-fc0b-41e3-a735-a82919694f8a/image.png)
2. Lambda 함수 생성
![](https://velog.velcdn.com/images/black2code/post/da087758-5d21-432c-899a-5a67ac53c1e4/image.png)
- 기존에 만들어 놓은 역할 선택(Dynamodb 데이터 추가, Lambda 기본 권한)
![](https://velog.velcdn.com/images/black2code/post/2ffae361-6ffd-4b07-8678-4a1717c75ffe/image.png)
- event는 딕셔너리 형태의 데이터를 받음 -> String 형태로 변환
3. API Gateway 생성
![](https://velog.velcdn.com/images/black2code/post/918307a7-6870-4bce-a8aa-aab680b71e9d/image.png)
![](https://velog.velcdn.com/images/black2code/post/7a5a6d5e-7fa2-4685-9043-39325c684f1a/image.png)
- 엔드포인트 유형
- 프라이빗(VPC내에 구축할떄 사용)
- 최적화된 에지(요청하는 고객의 위치에 가까운 엣지 로케이션에서 처리)
- 지역 ( 설정된 지역내에서만 사용 ex.서울)
![](https://velog.velcdn.com/images/black2code/post/84f80fdc-9db7-46ac-8aac-791e3cf8fa56/image.png)
- 작업 -> 리소스 생성
- 리소스는 API의 머리에 해당, 머리를 만들고 머리안에서 다양한 메소드를 만들어야 함
- 메소드(POST, GET, 등)
![](https://velog.velcdn.com/images/black2code/post/6a68c15e-53e4-417f-bbe2-0d261617fd63/image.png)
![](https://velog.velcdn.com/images/black2code/post/26fa7d58-f2b5-4c6e-8589-227afe475987/image.png)
- 사용자가 POST 요청시 Lambda함수를 호출할 것을 허용한다는 의미
![](https://velog.velcdn.com/images/black2code/post/3bfff369-63aa-4b12-9fa8-eb60f4c9b2db/image.png)
- 클라이언트가 요청(POST)를 받는다면 LAMBDA 함수 addCustomer를 호출하겠다는 전체적인 화면 구성이 나온다.
- 제일 왼쪽의 테스트 클릭하게 되면 API 콜을 테스트할 수 있다.
![](https://velog.velcdn.com/images/black2code/post/6b7e80b1-c5a5-4db2-beb3-9c50548b960d/image.png)
- JSON 형식으로
![](https://velog.velcdn.com/images/black2code/post/d46aa3d9-1870-4109-8415-df49e160a8e2/image.png)
- 정상 로그 확인, 결과값 확인
- Lambda 함수에서 return(str(event))로 작성했기 때문에 응답값을 확인할 수 있다.
4. Lambda 함수 코드 수정
import boto3
resource = boto3.resource('dynamodb') //dynamodb를 리소스로 정의
table = resource.Table('customers') // 테이블 이름 부여
def lambda_handler(event, context):
table.put_item(Item=event) // 테이블 안의 이벤트를 받아서 데이터를 넣음
return {"code":200, "message": "Data Successfully Inserted!"}
![](https://velog.velcdn.com/images/black2code/post/d2044cc8-a714-41ef-aa54-36c414b9efde/image.png)
![](https://velog.velcdn.com/images/black2code/post/f1ffb52d-b09e-4738-823c-4a47ea70c102/image.png)
![](https://velog.velcdn.com/images/black2code/post/25c6628a-453b-4c7e-ad61-aa83595843bd/image.png)
- 요청 본문은 동일하게 하여 테스트 진행, 결과 확인
5. DynamoDB 확인
![](https://velog.velcdn.com/images/black2code/post/51fdb34f-1930-46f3-aa08-89f5fc90e22f/image.png)
- API Gateway -> Lambda -> DynamoDB로 데이터 삽입 내역 확인
https://www.inflearn.com/course/aws-%EC%9E%85%EB%AC%B8/dashboard
깔끔하게 정리하셨네요 좋은 글 감사합니다.