Amazon API Gateway

API Gateway는 API를 생성/게시/유지관리/모니터링/보안 적용할 수 있는 서비스이다.
API Gateway를 완전 관리형 서비스로 제공한다.
REST API를 제공하여 AWS 서비스를 활용할 수 있도록 한다.
Gateway로서 트래픽 관리, 인증과 엑세스 제어, 모니터링, API 버전 관리, 다중 API 호출 처리 등의 작업을 처리한다.

메세지 변환 및 검증

메시지 변환 및 검증 기능을 제공한다.
요청/응답 메시지에 대한 스키마를 정의하기 위해 모델을 생성할 수 있다.
요청/응답 페이로드 및 헤더는 모델을 기준으로 적절한 형식인지 검증할 수 있다.
매핑 템플릿을 사용해서 하나의 모델에서 다른 모델로 변환할 수 있다.

백엔드 리소스 노출

외부에서 직접적으로 서비스 서버에 접근하지 않고 gateway를 통해서 백엔드를 감출 수 있다.
현관문 역할을 하는 API를 생성할 수 있다.

캐시

API 응답을 클라이언트에 더 가깝게 가져와서 캐시한다.
캐시를 이용해서 컴퓨팅 리소스를 사용하지 않고 성능을 개선할 수 있음.

API 엑세스 제어

단일 단말에서의 초당 요청 개수, 일일 요청 개수 등을 조절할 수 있다.
하나의 클라이언트가 백엔드 시스템 용량을 과다하게 차지하는 것을 방지할 수 있다.

API 메서드 호출에 보안 적용

API 엑세스에 보안을 적용할 수 있다.

리소스 정책: 사용자가 API를 호출할 수 있는지 여부를 제어하기 위해 API에 연결하는 Json 정책 문서
IAM 권한 정책: API의 생성과 배포, 메서드 호출의 권한 정책을 생성. VPC: Virtual Private Cloud 클라이언트를 통해서 액세스할 수 있는 API 엔드포인트 생성.
Amazon Cognito, Lambda 권한부여자: Lambda 권한부여자나 Cognito와 통합하여 백엔드 리소스에 액세스 하기 전에 클라이언트를 인증.

Gateway 활용

CloudWatch에 로그 메시지 및 상세 지표를 전송하여 API 로깅을 할 수 있음.

Lambda 함수를 CRUD 백엔드로 붙여서 해당 데이터를 DynamoDB에 저장할지 S3에 저장할지 구분.

SNS와 SQS

프로세스는 sync(바로 처리 후 응답) 방식과 async(queue에 넣어 순차 처리) 방식으로 나뉜다.

SQS (Simple Queue Service)

async 처리를 하는 완전관리형 서비스이다.
처리를 할 리소스를 기다리는 메시지를 저장하는 Queue의 역할을 한다.
사용자가 메시지 저장/관리에 신경쓰지 않고 메시지를 활용하는 애플리케이션만 집중할 수 있다.
EC2 와 결합하여 사용되며 EC2가 죽어도 메시지가 남아 보다 안정적이다.
수신측이 폴링을 통해 메시지를 가져가며 수신과 1대1 관계이다. sendMessageBatch로 최대 10개의 메세지를 한 번에 보낼 수 있다.

표준 대기열과 FIFO 대기열을 지원한다.

표준 대기열:
메시지 순서가 보장되지 않음.
메시지가 중복될 수 있음.
처리량이 비교적 많음.

FIFO 대기열:
메시지 순서가 유지됨.
메시지가 중복 없이 한 번만 수신됨.
처리량에 제한. (초당 300개의 트랜잭션)

메시지는 최대 256KB의 크기이고 제한 시간 초과(기본 30초, 최대 12시간), 메시지 보존 기간(기본 4일, 최소 60초, 최대 14일)를 갖는다.
제한 시간 초과:
하나의 Queue는 생산자/소비자가 가져가는게 규칙인데, 멀티 스레드나 여러 프로그램에서 Queue를 쳐다볼 수 있다는 것이고 이거를 막는것이 제한 시간 초과이다.
예를 들면 여러 EC2 인스턴스가 동시에 처리하는 문제가 생길 수 있음.
SQS가 송수신이 1대1이라는 것은 수신이 처리를 하고 메시지를 지워서 혼자만 보기 때문에 1대1이라고 하는 것이고, 보기 전까지 문제가 발생할 수 있는 부분에 대한 내용.

메시지를 수신하면 처리했다는 것을 알리기 위해 메시지를 지워야 한다.

SQS 작업 API 참고.

SNS (Simple Notification Service)

메시지가 들어오는 순간 구독자에게 메시지를 알려주는 서비스이다.
push 방식으로 알림이 전송되기 때문에 새로운 정보/업데이트를 정기적으로 확인할 필요가 없다.
구독자에는 Lambda, SQS, http, email, SMS, mobile을 등록할 수 있다.
수신측이 푸시를 통해 수동적으로 메시지를 받으며, 1대 다수의 관계이다.

메시지의 순서는 보장되지 않으며 게시된 후에는 삭제할 수 없다.(남한테 보내는거니까)
SNS 전송 정책에서 메시지 전송 실패시 재시도를 제어할 수 있다.

SNS API 참고.

팬아웃

메시지를 SNS로 받아와서 SNS가 여러 대의 SQS로 메시지를 전달하는 것.
각 SQS는 서로 다른 작업을 하는 EC2와 연결될 수 있는 방식이다.

예를들어 팬아웃 방식을 이미지 처리에 사용할 수 있다.
SNS로 메세지를 받으면 SNS는 썸네일 생성/모바일용 이미지 생성/웹용 이미지 생성의 각각의 SQS에 메시지를 보내도록 처리할 수 있다.

Amazon MQ

Apache ActiveMQ를 위한 관리형 메시지 브로커 서비스.
메시지 브로커를 클라우드에서 쉽게 설정하고 운영할 수 있도록 한다.
기존 애플리케이션의 메시지 기능을 클라우드로 마이그레이션 할 때 사용이 권장된다.