[AWS] Lambda

김아름·2022년 3월 28일
0

AWS

목록 보기
25/25

EC2에서는 컴퓨터 한대를 인스턴스라고 함
S3라는 파일서버에서는 버킷이라고 함
람다에서는 함수라고 함

Lambda

  • 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있도록 도와주는 Serverless 서비스
  • 람다 함수를 실행할 수 있는 이벤트 ( = 트리거가 되는 )
    --> 데이터변화: DB 데이터가 바뀌면 람다 함수 실행
    --> API Endpoint와 결합을 시켜서 직접 또는 Endpoint로 호출
    --> 리소스 상태 변화: (CloudWatch를 통해) 리소스 상태가 어떻게 변화가 되었다면 람다 함수를 실행해서 이벤트에 대응 할 수O
    --> Cron 주기별로 실행: 정기적인 작업이 있을 경우 람다 활용O
  • API로 접근 가능한 모든 서비스/기능 호출 가능하기 때문에 외부 서비스 호출 가능

Lambda의 Execution Model

  1. 동기식
  • 람다 함수 앞단에다가 API Gateway Endpoint를 결합시켜놓으면
    myapi.com/call 이런식으로 URL을 호출시에 람다함수를 실행 할 수 O
  1. 비동기식
  • SNS, CloudWatch, S3를 트리거로 사용을 하면 람다함수를 실행 할 수 O
  1. 스트림 베이스
  • Kinesis(실시간으로 데이터 스트림을 수집, 처리, 분석해주는 서비스)나 dynamodb와도 함께 사용 가능

Use Case

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

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

2.Web application

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

3. Serverless batch processing

  • S3에 어떤 Object 같은게 들어왔을 경우 Lambda Splitter가 Mapper에다가 작업을 분배를 하고 Mapper들은 작업이 끝난 후 DynamoDB에 저장
  • Lambda Reducer가 S3로 다시 아웃풋


Lambda의 장점


Lambda SLA 와 가격정책



실습

1. Lambda의 생성

  • 함수생성 버튼 눌러, 새로작성으로 함수이름 적음
  • 런타임은 어떤 언어로 람다 함수를 만들거냐에 따라 달라짐
  • 언어를 선택하고 생성을 하면 작성할 코드를 저장할 공간이 만들어짐

2. 코드 작성

  • 함수코드로 가보면 샘플코드가 들어가있음
  • lambda_handler라는 약속된 이름의 디폴트 함수가 있는데, 람다를 실행했을 때 lambda_handler가 실행 됨
  • 이 함수는 event와 context라는 두개의 파라미터를 받는다.

3. 실행

  • 코드를 저장 후 Deploy 버튼 클릭하면 실행가능한 상태가 됨
  • 실행 방법은 다양함

(1) 클라우드 콘솔

  • 테스트 버튼을 클릭하면 실행 됨
  • 그전에 테스트 이벤트를 선택해서, 이 함수가 실행될 때 어떠한 값들을 입력할 것인가를 세팅
  • 그러면 아래의 화면이 나옴, 샘플 json이 들어있음
  • 이벤트 이름과 입력값을 작성하고 저장 버튼을 누르면 이벤트가 생성이 됨
  • 이벤트를 체크하고 테스트 버튼을 누르면 작성했던 람다 함수가 실행이 됨
  • 리턴값, 실행시간, 로그 등이 찍혀나옴

(2) 커맨드 라인

(3) 트리거를 통해 다른 서비스에서 변화가 생겼을 때 람다 실행

4. 디버깅

  • print문으로 찍은 것은 클라우드 콘솔에서 실행할 때마 로그를 볼수 있음
  • 다른 서비스와 연동해서, 자동으로 실행되게 하면 이 로그를 볼 수 X
  • 그럼 어떻게 확인을 하지?
    --> 모니터링을 눌러서 'CloudWatch에서 로그보기'를 클릭
    --> 로그 그룹이라는 서비스로 들어가짐
    --> 로그 스트림이라는 것이 있는데 가장 위에 있는 것이 최신 로그 데이터를 담고 있음
  • 람다 코드를 수정을 하고 저장을 하면 새로운 로그스트림이 생긴다.
  • 코드 수정을 안하고 람다를 실행시키면 로그스트림 안에 로그가 쌓인다.

5. Trigger

  • 람다가 파워풀 한 이유는 다른 AWS 서비스들과 연동 된다는 것
  • Trigger: 방아쇠 --> 람다 함수를 실행시키는 방아쇠
  • 트리거 추가 버튼을 누르면 AWS의 다른 서비스들을 선택 할 수 있다.
  • API 게이트웨이는 어떤 URL로 접속했을 때 람다가 실행되도록 하는 것
  • DynamoDB는 DynamoDB에 어떤 일이 발생 했을 때 람다 함수를 호출하는 것
  • S3는 파일이 업로드 되었을 때 람다함수를 실행시킬 수 O

6. S3 + Lambda

  • S3: 파일 서버 서비스
  • S3 버킷 안에 파일을 업로드 했을 때 람다함수가 실행되게 해보자.
    그리고 실행 되면서 업로드한 파일의 이름을 알아보자
  • 트리거에 S3를 선택하고 생성한 버킷을 지정한다.
  • 이벤트 유형은 파일이 업로드되거나 카피되거나 하는 경우에 람다함수가 호출되도록 '모든 객체 생성 이벤트'를 선택
  • 재귀 호출을 체크 하고, 추가 버튼 클릭
  • S3의 속성에 들어가보면 '이벤트 알림'에 람다함수가 추가되어있다.
  • S3에 파일을 업로드 시킨 후, 람다함수가 실행되는지 확인해보고 이벤트에 어떤 데이터가 들어오는지 찍어보자

7. 성능과 가격정책

  • 람다 기본설정 편집에 들어가보면 128MB ~ 3008MB 메모리의 컴퓨터 까지 빌릴 수 있다.
  • 메모리에 비례해서 CPU가 할당 됨
  • 메모리에 따른 가격정책을 보자
    --> 람다는 함수 요청 수기간에 따라 요금이 책정된다.



참고

profile
쿄쿄쿄

0개의 댓글