[AWS] Lambda

홍승보·2023년 3월 1일
0

AWS

목록 보기
7/7

AWS Lambda

  • AWS 람다는 서버리스 컴퓨팅 Faas 상품이다.

  • 여기서 서버리스란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다.

  • 즉, 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리 등을 대신 처리해주기 때문에 개발자는 비즈니스 로직 작성에만 집중할 수 있게 된다.

  • AWS Lambda 또한 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하게 해주는 서버리스 컴퓨팅 서비스로서 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행 가능하다.

  • 사용자는 람다에다가 원하는 함수를 작성하고, 필요할 때 그 함수를 사용할 수 있다.

  • 또한 다른 AWS 서비스들과 연동이 용이하다는 특징을 가지고 있다.
    - 예를 들어 이미지를 S3에서 읽어올 때, 람다 함수를 통해 필요한 크기로 Resize하는 기능에도 사용할 수 있다.

  • 이처럼 다른 AWS 서비스에서 코드를 자동으로 트리거 하도록 설정하거나 웹 또는 모바일 앱에서 직접 코드를 호출할수도 있다.


Lambda의 Spec

람다 지원 언어

  • Lambda는 다음과 같은 파이썬, Node.js, Ruby, Java, C#, PowerShell, Go Lang으로 작성된 런타임을 지원한다.

람다 실행 환경

  • 람다는 실행 환경 스펙 제한이 있다.
  • 하드웨어 적으로도 비용 측면이나 공간 측면이나 업그레이드 할 수있는 메모리나 cpu에 제한이 있듯이 람다에도 똑같이 적용된다고 보면 된다.

Lambda의 장단점

Lambda의 장점

  1. 비용절감 : 필요한때만 함수가 호출되어 처리한다는 점에서 항상 서버를 켜두고 있지 않아도 되므로 비용을 절약할 수 있다. 요금은 람다함수의 요청 수와 람다코드의 실행시간에 따라서 요금이 부과된다.
  2. 인프라 운영관리 부담절감 : 성능이나 보안 등 서버 자체의 관리는 AWS가 알아서 해주기 때문에 서버를 관리할 필요가 없으니 운영관리에 대한 부담이 줄어든다.
    예를들어, 트래픽이 증가하면 Auto-Scailing이 자동으로 동작한다.

💡Tip
참고로 람다는 컨테이너 개념으로 스케일링 된다.
EC2의 오토 스케일링 같이 가상OS가 생성되는게 아니라, OS 위에 독립적인 하나의 프로그램을 키는 방식이기 때문에 훨씬 가볍게 확장이 가능하다.

  1. 빠른 개발 배포 : 람다를 이용하게 되면 개발 및 배포에 대한 소요시간이 매우 짧아지게 된다.
    AWS 자체에서 많은 기능을 제공해주고 있어서 API연동이 쉬우며, Serverless의 강점인 배포방법도 정말 쉬운편이다. 그저 함수를 수정해주기만 하면 되기 때문이다.
  2. 언제 Lambda를 쓰면 좋을까? : 코드를 계속 실행시키기보다는 특정한 시기에만 실행시키는 경우
    • 서버를 띄우지 않고 간단한 코드를 실행시키고 싶은 경우
    • 특정 기간 또는 특정 주기로 코드를 실행시켜야 하는 경우
    • 트리거가 실행될때만 코드를 실행시키고 싶은 경우

Lambda의 단점

  1. 리소스 제한 : 람다는 메모리(최대 10GB), 처리시간 (최대 900초, 즉 15분)으로 제한되어 있다.
    즉, 하나의 함수가 한번 호출될때 AWS에서는 최대 10GB의 메모리까지 사용이 가능하며, 처리시간은 최대 15분이라는 말이다.

  2. Stateless : 람다는 함수가 호출되면 새로운 컨테이너를 띄우는 방식이기 때문에 별도의 상태를 저장하지 않는다.
    이는 Lambda함수가 이벤트에 의해 트리거 될 때마다 완전히 새로운 환경에서 호출된다는 것을 의미한다.
    그래서 이전 이벤트의 실행 컨텍스트에 대한 엑세스 권한이 없다보니, db connection을 유지하는 것 같은 기능은 수행하지 못한다.

  3. ColdStart : 람다는 리소스를 효율적으로 사용하기 위해서 오랫동안 사용하지 않고 있을 경우 잠시 컴퓨팅 파워를 꺼둔다. 그래서 다시 사용하려고 하면 람다 컨테이너를 띄우기 위해 서버가 켜지고 실행환경을 구성하기 위해 약간의 시간이 걸린다. 즉, 요청이 와서 람다함수를 실행하게 되면 어느정도 딜레이가 발생하게 된다.

    하지만 EC2같은 경우 항상 가동된 상태에서 요청을 받을 준비가 되었기 때문에 딜레이가 없다. 이를 반댓말인 WarmStart라고 불리운다.

[ 콜드스타트 해결방법 ]
1. 람다를 계속 호출해준다.: 사실 항상 컨테이너가 준비되어 있게 하도록 람다를 지속적으로 호출해주는게 가장 좋다. 하지만 호출이 될때마다 비용이 산정되는 방식이기 때문에 그만큼 비용이 더 들수도 있다.
2. 람다의 메모리를 늘려 스펙을 높인다. : 메모리를 더 할당할수록 컴퓨팅 스펙이 높아지기 때문에 딜레이가 줄어든다.
3. 프로비저닝된 동시성 활성화 : 2019년 콜드스타트 문제를 해결하기 위해 나온 옵션으로 함수의 호출에 바로 응답할 수 있게 미리 준비하는 옵션이다. 이를 활성화 하면 미리 함수의 환경을 세팅해주는 딜레이가 줄어들지만, 추가적인 비용이 발생한다.


Lambda 실무 사용 사례

Operation Automation (시스템 운영 자동화)


1. CloudWatch Alarm을 모든 리소스에 걸어둔다.
2. Memory Full이나 CPU가 높아져서 대응이 필요할 때, 즉 리소스 상태불량일때 CloudWatch Alarm이 실행되면 자동으로 Lambda Function이 실행된다.
3. 람다 함수가 Email이나 Slack Notification으로 관련자들에게 알려준다.
4. 람다 함수가 Ansible과 결합해서 Memory Full이 났을때 로컬인스턴스에서 메모리를 리셋해준다던지 리소스를 교체해준다던지 장애 발생시 automatic하게 복구할 수 있다.

Web application

AWS Lambda를 다른 AWS 서비스와 결합하면, 확장성, 백업 또는 여러 데이터 센터 중복에 필요한 별도의 관리작업없이 개발자가 자동으로 확장 및 축소되고 여러 데이터 센터에 걸쳐 가용성이 높은 구성에서 실행하는 강력한 웹 애플리케이션을 구축할 수 있다.


1. 클라이언트가 접속을 했을때 정적 컨텐츠는 S3에 저장.
2. S3 앞단에 CloudFront를 달아서 전세계 어디서든 빠르게 서빙할 수 있음
3. 인증으로는 Cognito를 별도로 사용할 수 있음
4. Dynamic Contents, 프로그램 작업이 필요한 경우에는 Lambda와 API Gateway로 서비스를 하고 백단에서는 DB로 DynamoDB를 운영할 수 있음.

DynamoDB와 연동

AWS Lambda를 사용하여 DynamoDB 테이블의 모든 데이터 변경에 대한 데이터 검증, 필터링, 정렬 또는 기타 변환 작업을 수행하고 변환된 데이터를 다른 데이터 스토어로 로드할 수 있다.

Reference

https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-%EB%9E%8C%EB%8B%A4Lambda-%EA%B0%9C%EB%85%90-%EC%9B%90%EB%A6%AC

profile
Junior BE Developer

0개의 댓글