람다
AWS Lambda는 서버리스를 구현하는데 핵심이다. 이벤트가 발생하면 람다가 실행되고 람다 함수에 있는 코드가 실행된다.
람다는 NodeJS, Python, Java, GO 등 다양한 언어를 지원한다.
매달 최초 100만회까지의 함수 호출은 무료로 제공한다고 한다. PoC 진행할 때 좋을 것 같다.
람다는 최대 300초까지만 실행될 수 있고 최대 512MB 만큼의 일시적인 디스크 공간을 제공한다. 또한 최대 50MB의 Deployment Package를 허용한다고 한다. 그래서 50MB가 넘으면 S3에 넣고 람다함수에 경로를 지정해주면 된다고 한다.
서버리스
온프레미스는 서버를 구축하는 초기 비용이 많이 든다. 그리고 사용량의 증감에 유연하게 대처할 수 없다. 클라우드는 이러한 온프레미스의 단점을 극복하기 위해 나온 방식이며 각광받고 있지만, 최근에는 비용 문제가 대두되고 있다.
클라우드 컴퓨팅에서 비용문제를 해결하기 위해 나온 방식이 서버리스 방식이다.
또한 클라우드가 서버를 돌려주고 생성하며 리소스들을 서버의 사용량에 맞게 할당하기 때문에 개발자가 관리해주지 않아도 된다. -> 개발에만 집중 가능
서버리스는 자원을 사용한 만큼 비용을 내는 것이다. 람다에 구현한 함수가 작동한 만큼만 비용을 내면 된다.
주간에는 사용자가 많지만 야간에는 사용자가 없는 경우, 서버리스를 사용하지 않는다면 24시간 구동된 만큼의 비용이 필요하지만, 서버리스 방식을 채택했을 경우, 야간에 함수 호출 빈도가 줄어들 것이고 최종적으로 지불해야할 비용은 낮아지게 될 것이다.
어떠한 이벤트가 발생하면 람다를 호출하고, 호출된 람다가 종료되면 어떠한 상황을 또 발생시킬 수 있기 때문에 보통 AWS 아키텍처 중간중간에 구현한다고 한다.
하나의 서비스를 작은 함수들로 쪼개서 서버리스를 구현하여 MSA 방식에 어울리는 방식이다. 빠른 구현, 빠른 테스트가 가능할 것이다.
다만 함수가 수면 상태에서 활성화 될 때까지의 시간이 소모되고 stateless이기 때문에 로컬 데이터를 사용할 수 없다는 단점이 있다.
네이버 클라우드: cloud fuctions / amazon: aws lambda / ms: azure functions / google: google cloud functions
S3에 파일을 올려놓은 경우
1. S3에 PutObject 이벤트 발생
2. 람다에서 데이터를 읽어와서 데이터를 변환하거나 필요없는 데이터를 삭제한다.
3. 깔끔한 데이터를 DB에 올린다.
람다 만들기
만들기 전에 대시보드에 보면 concurrency라고 써있는데, 같은 요청이 들어왔을 때 얼마나 많은 함수를 돌릴 수 있는지 보여주는 지표이다. 한국어로는 동시성이라고도 한다.
Author from scratch : 사용자가 처음부터 끝까지 다 구현하는 방식
Use a blueprint : AWS에서 자주 사용되는 기능들을 템플화 시켜 구현해놓은 것들. 선택해보면 다양한 기능들이 있다.
Container image : 람다함수가 들어있는 컨테이너 레포지토리의 주소를 넣어주면 사용 가능하다.
- Use a bluprint를 이용해 간단한 예제를 만들어보았다.
blueprint의 이름을 붙여주고 람다 함수의 이름도 지어준다. 그리고 밑에 보면 python 코드가 자동으로 구현된다.
그 다음 함수 만들기를 클릭하여 함수를 만들어주면 아래와 같이 함수 개요가 보인다.
그리고 밑에 코드와 함께 여러 탭이 보인다.
그리고 옆에 Test로 이동해서 아래와 같이 설정해주었다.
그리고 Test를 눌러주고 Details를 눌러보면 아래와 같은 화면이 나온다.
위 그림에서 Request ID는 테스트를 실행할 때 마다 다르게 생성되는 UUID로 Cloud Watch에서 해당 Request ID를 검색해 로그를 찾아볼 수 있다.
그리고 코드를 수정하면 아래 Deploy 버튼을 눌러줘야 실행이 가능하다.
S3와 람다를 연결하기
이번에는 S3와 람다를 연결해보려고 한다. Author from scratch를 이용해 람다를 생성해주고 아래와 같이 S3를 읽기 권한을 가지고 있는 역할을 부여해 줄 것이다. AWS 정책 템플릿에 S3 읽기 권한 템플릿이 있어 이걸 사용해주었다.
만들어주고 s3도 만들어주자.
이름만 짓고 나머지 설정은 다 기본값으로 했다.
그 다음 버킷에서 이벤트 알림 설정을 해줘야 한다.
속성에 들어가서 밑으로 조금 내리다 보면 event notifications라는 탭이 보인다.
create event notifications를 누르고 들어가서 설정을 해준다.
여기서는 이름만 설정하고 아래 object creation만 put으로 지정해주었다.
event name 밑에 prefix와 suffix의 경우 따로 지정해주지 않았다. 지정하게되면 해당되는 경우에만 사용한다는 뜻이다.
그리고 맨 밑에 보면 람다를 지정해 줄 수 있다.
그럼 이 버킷에는 이벤트 1개가 활성화되어있음을 확인 가능하다.
그리고 다시 람다로 넘어가면 S3가 추가되어있음을 알 수 있다.
그리고 S3에 트리거가 될만한 파일을 업로드하고 람다 - 모니터링에서 view cloudWatch logs를 눌러준다.
그럼 로그 하나가 생성되어있고,
안에 들어가보면 설정해준 코드가 실행되어있는 것을 볼 수 있다.
생성했던 s3와 람다는 다 지워주고 마무리..
'IT' 카테고리의 다른 글
맥에서 패키지 관리자 설치하기 (0) | 2024.07.09 |
---|---|
[AWS] CloudFront (0) | 2024.07.04 |
[AWS] S3(Simple Storage Service) (0) | 2024.06.26 |
[AWS] VPC(Virtual Private Cloud) (0) | 2024.06.21 |
[AWS] ELB(Elastic Load Balancer) 만들기 (0) | 2024.06.21 |
댓글