DevOps/AWS

[AWS] Lambda의 Scaling/동시성/Layers/환경변수/EFS/Step Function

세리둥절 2023. 5. 7. 23:54
반응형

Cold Start

- 10분 지나도 아무런 새로운 트리거가 없으면 만들어놓은 서버(EC2)를 닫아버린다. <아껴쓰기>
- 10분 이내에 새로운 트리거가 생기면 이미 만들어놓은 서버를 계속 사용한다.
- Cold Start의 문제가 생겨서 이걸 해결하기 위한 개념이 2019년에 나왔다. 그런데 이게 Serverless가 맞나?
- 이런 경우에는 EC2가 더 저렴하지 않나요?

 

 

 

 

버전과 Alias

- lambda 함수를 하나 새로 만든다
- 작업 dropbox에서 "새 버전 발행"을 할 수 있다
- colon 뒤에는 버전의 이름이 붙는다

 

 

환경변수 

- 환경변수를 사용하는 이유는 노출되면 안되는 정보를 담기 위해서
- lambda는 MSA보다 얕고 가볍다
- CLI에서 이것저것 코드 짜는게 아니라 그냥 콘솔(GUI)에서 지정하는 정도
- 구성 > 환경 변수 > 편집에서 key과 value 값으로 지정
- 람다 함수에서 사용할 때에는 os.getenv("key") 함수를 사용하면 된다

 

 

 

Layers

- 람다함수를 쓰면서 불편한 점들이 있을 수 있다.
- 람다함수를 3개를 만들었는데 패키지가 모두 똑같다. 패키지를 zip 파일로 만들어서 업로드해야한다. 
- 불편하고, 코드의 용량이 늘어나고, Cold-start에 오래 걸리고, 환경 셋팅을 각각 다 해줘야 한다.
- Layers라는 창에 환경셋팅을 업로드해두면, 함수 3개와 Layers를 연결하기만 하면 된다.
- 복붙하는 시간 + cold-start 하는 시간이 줄어든다. 
- 람다가 너무 독립적이기 때문에 독립성의 단점을 완화해주기 위해서 Layers가 필요하다

- 람다 함수가 길어지면 오른쪽에서 "업로드" 버튼을 눌러서 zip 파일로 업로드를 해야 한다. (귀찮..)

- 계층 생성
- 폴더에다가 pip install 해서 패키지를 모두 다운로드 받고 -> zip 파일로 묶어준다
- Lambda function에서 Layers를 클릭해서 만든 layer를 선택해줄 수 있다

 

 

 

Step Function

- 일반 운영하고 있는 MicroService들의 관계
- 서비스들간의 통신을 하기 위해서 RabbitHQ를 사용하는데 이것도 굉장히 복잡하다
- 내가 기출문제를 올린다 -> 기출문제인지 셀카인지 검수해야한다(사람) -> 시험지가 맞다면 권한 오픈

- 람다의 특성이 엄청난 독립성
- 연결해주는 Step Function

 

 

 

EFS (Elastic File System)

- 각각의 람다가 각각의 File System을 갖고 있다. Stateless이다. 휘발성이 크다.
- 람다 함수를 Stateful하게, 여러개의 람다가 같은 File System을 사용하도록 하는 것이 EFS이다. 
- 해당 File System을 다른 서비스와도 공유할 수 있다.
- AI로 모델을 만드는 것은 EC2로 만들고, 저장을 EFS에 한 다음에, 예측할 때는 lambda를 활용함

Lambda의 Stateless한 단점을 보완해서 Stateful하게 만들어주기 위해서 계속 기능이 나오고 있다
특히 RDS에 박아두기 어려운 형태 (ex. 모델)을 저장하기에 편하다
(1) EFS를 검색해서 파일 시스템을 생성해준다
(2) 액세스 포인트 생성 (소유자 이름 모두 1001 같은 것으로 통일)
(3) 보안그룹을 람다와 동일하게 맞춰야 한다는 것을 기억하자

 

 

EFS (Elastic File System)와 람다함수 연결하기

(1) 람다함수 하나를 만든다
(2) EFS에 접근할 수 있는 권한을 부여해야 한다. 구성 > 권한 > 실행 역할 ; 역할이름 클릭
(3) IAM 정책 연결을 클릭 (VPCAccess + EFSReadWrite)
(4) 람다의 VPC를 설정해줘야한다. VPC 보안그룹을 선택할 때 EFS의 보안그룹과 맞춰주어야 한다. 3개를 모두 클릭
(5) 파일 시스템에서 아까 만든 EFS와 연결해주어야 한다

 

 

람다 함수에서 EFS에 READ/WRITE하기

- AWS 공식 문서를 그대로 따라하고 있어서 무슨 말인가 싶네

반응형