Serverless hosted website: MyBlog.com
- MyBlog.com이라는 서버리스 호스팅 웹사이트
- 요구사항
1) 웹 사이트를 전세계로 확장해야 함
2) 읽기는 많이 해도 쓰기는 거의 하지 않으며 대부분 블로그는 읽힘
3) 웹사이트 대부분이 완전히 정적인 파일로 구성되고 동적 REST API는 일부분
4) 가능하면 캐싱을 실행해 비용을 절감하고 지연 시간을 줄여서 사용하기 좋도록 함
5) 웹사이트나 블로그를 구독하는 신규 구독자에게 환영 인사를 담은 이메일을 서버리스로 보내도록 처리
6) 블로그에 업로드하는 모든 사진에 대한 썸네일이 서버리스로 생성되었으면 함
Serving static content, globally
- 정적 글로벌 컨텐츠를 제공하려고 할 때
- 클라이언트가 있을 때 정적 컨텐츠는 S3에 저장되는데
이 때 특정 리전에 위치하는 S3 버킷을 세계 전역에 노출하기 위해 CloudFront 사용 - CloudFront는 글로벌 배포를 수행하는 CDN이라
클라이언트는 CloudFront에서 엣지 로케이션과 소통하고 S3에서 오는 데이터는 캐시에 바로 저장됨
Adding a public serverless REST API
- 안전하게 작업하기 위해서는 OAI를 사용해 클라이언트와 상호작용 하는 CloudFront의 글로벌 배포를 수행
- CloudFront에서 S3로 가는 원본 액세스 ID가 있을 때
버킷 정책을 추가한 후 OAI에만 권한을 부여해 CloudFront 가능하고 나머지는 불가능하도록 함
이를 통해 클라이언트가 S3 버킷에 직접 접근해 콘텐츠를 얻을 수 없게 되므로 보안을 유지할 수 있음
즉, CloudFront를 거치게 해서 인프라를 보호
Leveraging DynamoDB Global Tables
- 공용 서버리스 REST API 추가하기 위해서는 REST HTTPS가 Amazon API Gateway와 통신할 수 있어야 하고
람다 함수를 호출하여 DynamoDB에서 쿼리 작업과 읽기가 가능해야 함 - 공용 REST API이므로 Cognito가 필요하지 않음
- 읽기를 많이 하므로 캐시 계층으로 DAX를 사용하는 것이 좋음
- 세계 전역을 대상으로 할 때는 DynamoDB 글로벌 데이터베이스를 이용해 일부 지역에서 발생할지 모를 지연 시간을 줄이며
인프라와 아키텍처 속도를 향상시킬 수 있음
+) 오로라 글로벌 데이터베이스는 서버리스가 아님
User Welcome email flow
- 사용자가 새로 구독할 경우 사용자 환영 인사 이메일을 보내고자 할 때
- DynamoDB에서 스트림 변경을 활성화한 후, 스트림이 생성되면 람다 함수를 호출하여 Amazon SES를 사용
람다 함수는 SES(Simple Email Service, 이메일 전송을 허용하는 서비스)를 사용할 수 있는 IAM 역할을 수행 - 람다 함수가 AWS SDK를 사용해 SES에서 이메일을 보내도록 해주면 서러비스 사용자 환영 인사 이메일 플로우가 완성
- 관리할 인프라도 없으며 알아서 잘 작동하고 확장도 잘 됨
Thumbnail Generation flow
- 사용자가 이미지를 업로드할 경우 썸네일이 생성되도록 할 때
- 클라이언트가 CloudFront에 사진을 올리면 CloudFront가 사진을 S3 버킷으로 보내며 이를 S3 전송 가속화라고 함
- S3로 직접 보내든 전송 가속화 기능을 사용하든 S3에 파일이 추가될 때마다 람다 함수가 작동하고
S3로 인해 작동한 람다는 썸네일을 생성해 S3 버킷이나 다른 버킷에 담아둠
- 이외에도 S3에는 SQS, SNS 트리거도 있으며 S3는 람다나 SQS, SNS를 호출할 수 있음
'Cloud > AWS' 카테고리의 다른 글
[SAA] 유료 콘텐츠 배포 (0) | 2022.04.14 |
---|---|
[SAA] 마이크로서비스 아키텍처 (0) | 2022.04.14 |
[SAA] 모바일 애플리케이션 : MyTodoList (0) | 2022.04.14 |
[SAA] 서버리스 애플리케이션 모델(SAM) 개요 (0) | 2022.04.14 |
[SAA] Cognito 개요 (0) | 2022.04.14 |