목차
1. 람다 서비스란?
2. 비용 비교
3. Lambda 와 API Gateway로 서비스하기
4. Cold start/ Warm start
5. Step formatioin
1. 람다 서비스란?
보통은 어떤 코드를 작동시키기 위해서 컴퓨터가 필요하다. 서버 코드를 작동시키고 싶다면 서버 컴퓨터를 만들어서 도메인을 만들고 포트를 열고 접속한다. AWS Lambda는 이런 컴퓨터가 없이 오로지 코드만 실행시킬 수 있다. 코드를 작동시키는 데에 필요한 요소들을 알아서 구성하고 유지시켜준다.
2. 비용 비교
100ms 단위로 코드가 실행되는 시간을 측정하여 요금을 부과한다. 메모리 크기에 따라서도 요금이 달라진다.
128MB 가장 작은 단위로 1달을 작동시키면 약 6천원 정도이고 512MB는 한 달 약 24천원이 나온다.
보통 EC2 온디맨드 요금과 비교하는데 서비스 서버를 올린다면 RI와 비교하는 것이 가장 적합할 것 같다.
RI EC2는 Reserved Instance 의 약자로 서버를 키거나 끄며 이용한 만큼만 요금을 지불하는 온디맨드에 비해 1~3년 약정을 하고 사용하는 인스턴스이다. 온디맨드에 비해 가격이 최대 70%까지 할인이 된다. 서비스를 한다면 서버를 끄지 않으니 더 좋을 것이라고 예상된다. ( 앞으로 만드는 서비스 서버는 RI 1년~2년 정도로 작업할 생각이다. )
아래는 람다 128MB 와 512MB 가격 비교이다.
그런데 만약 항상 서버를 켜놔야 하지 않고, 이벤트를 발생시켜 작업을 하고 싶다면 인프라 관리가 따로 필요하지 않는 람다 서비스가 효율적이다. 서버가 없으므로 접근할 수 있는 URL를 열기 위해 API Gateway와 함께 사용하면 이벤트 함수를 발생시킬 수 있는 URL를 만들 수 있다. API Gateway는 월별 호출 요청수에 비례해 요금을 책정한다. 현재 서울 API 요금은 다음과 같다.
3. Lambda 와 API Gateway로 서비스하기 (Lambda를 이용해 S3에 사진 업로드하기)
여러가지를 고려해서 Lambda로 이벤트 매서드를 호출하기로 결정했다면, API Gateway와 함께 설정을 하면 된다. 구체적인 설정방법을 자세히 설명하기보다는 어떤 것들을 설정해야하는 지 전체적인 키워드와 함께 실행 방법이 자세히 적힌 링크를 첨부하려고 한다.
1) IAM 설정
AWS는 각 계정에 구체적인 권한을 명시한 역할(Role)을 부여한다. S3. Lambda, Gateway에 접근할 수 있는 관련 권한을 가진 역할을 만들고 내 계정이 역할을 설정한다.
2) S3 버킷 만들기
S3 버킷을 만들고 퍼블릭 객체를 허용한다. 이렇게 하면 S3 사진을 URL로 접근해서 랜더링 할 수 있다.
람다 함수를 테스트할 수 있도록 S3에 사진을 하나 업로드 하고 URL 로 접근해서 볼 수 있는 지 확인한다.
3) 람다 함수를 만든다. 우선 S3와 잘 통신하는 지 확인한다
람다 함수를 만든다. 테스트를 설정해서 input 에 대해 원하는 대로 S3로 업로드가 되는 지 확인한다. 업로드가 된 사진의 URL을 리턴하는 지 확인한다. 변화가 있을 때마다 Deploy 버튼을 눌러 배포한다.
4) API Gateway를 설정한다. Lambda와 API Gateway를 연결한다.
기존의 함수와 API Gateway를 연결한다. API 와 람다 연결정보는 lambda-> 개별함수 ->트리거 에서 확인할 수 있다. API 엔드포인트, 리소스 경로, 매서드 등 정보가 모여있어 편리하다. 변화가 있을 때마다 API 배포를 꼭 해줘야한다.
5) Postman으로 로컬에서 Lambda를 테스트 한다.
나는 이미지를 따로 압축하거나 리사이징하지 않고 가장 기본적인 업로드를 했다.
https://devlog-wjdrbs96.tistory.com/331 (Iam 부터 lambda까지, 압축)
https://1-7171771.tistory.com/147 (비슷한데 리사이징)
https://blog.outsider.ne.kr/1205 (아싸님 글 1: api gateway에 대해 자세하게 적혀있어서 따라가기 좋다)
https://blog.outsider.ne.kr/1206 (아싸님 글 2)
https://velog.io/@wlgus2134/TIL14-POSTMAN-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 (Postman 로컬사용)
4. Cold start/ Warm start
람다에 대해 조사하면서 몇가지 제약 사항들을 알게 되었다.
- 람다를 처음 호출 할 때 cold start문제가 있다.
여기서 cold start는 서비스를 처음 시작할 때 프로비저닝이나 로딩, 보안적인 요소를 체크하면서 서비스 제공 시간이 늦어지는 것을 말한다. nodeJS는 짧은 편이지만 Java는 긴 편이다. 다시 호출이 초기화 되는 데까지 5분. 계속 호출되면 큰 문제가 없겠지만 서비스가 드문드문 있는 밤에는 문제가 될 수 있다. 쉬운 해결방법으로 5분이 리셋되기 전에 한 번씩 호출해줄 수 있다. CloudWatch를 통해 람다를 주기적으로 호출하거나 Route53 Health Check를 API Gateway Endpoint로 설정할 수 있다. (레퍼런스 1번 링크 글의 해결방법) 이러한 호출도 비용으로 계산이 되며 이 때 드는 요금도 비용으로 계산을 해야한다.
- VPC를 Private으로 구성한다. Lambda를 public에서 접속해야하므로 따로 Private VPC를 구성하고 NAT Gateway를 구성하면 바로 접근해서 사용할 수 있다.
- 30분 내외의 작업이 defualt로 설정되어있다.
람다는 한 번 연결되어 사용하는 시간에 제한이 있다. 따라서 오랜 시간 걸리는 작업은 EC2를 설정해서 서비스를 사용하는 것이 나을 수 있다.
5. Step formatioin
람다는 함수 형태이므로 기본적으로 상태값을 설정하지 않는다. 기본 상태값이 필요한 경우에는 Step Function을 사용할 수 있다. Step functiond이란 AWS 서비스를 통합해주는 서버리스 오케스트레이터로, 실행되는 워크플로우를 설정하고 실행한다. 위에서 말한 Lambda의 한계 중 시간 제한이 있는 경우, 처리할 lambda function을 각각 만든 뒤 원하는 대로 flow를 만들어 순서대로 실행시켜서 문제를 해결 할 수 있다.
https://ap-northeast-2.console.aws.amazon.com/states/home?region=ap-northeast-2#/homepage (AWS 공식 자료)
https://blog.leedoing.com/184 (관련 블로그 글)
'AWS_k8s' 카테고리의 다른 글
#026. AWS의 VPC, NAT, 서브네팅: 네트워크 구성 (0) | 2021.11.20 |
---|---|
#032. AWS ELB(로드밸런서): 서버작업 부하분산 (0) | 2021.11.09 |
#017. AWS 서비스(3): 컴퓨팅 (0) | 2021.10.22 |
#015. 간단한 AWS 서비스 종류(2) (0) | 2021.10.22 |
#014. 간단한 AWS 서비스 종류(1) (0) | 2021.10.22 |