• yundream
  • 2021-04-30 03:30:48
  • 2021-04-29 03:33:24
  • 12001

Contents

AWS Lambda 소개

  • AWS의 Serverless 컴퓨팅 서비스로 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행 할 수 있다.
  • FaaS(Function-as-a-Service)로 분류된다.
  • 각 Lambda 함수는 독립적으로 실행되기 때문에 상태를 저장하지 않는 stateless 서비스다.
  • AWS 콘솔, CLI를 이용해서 생성 할 수 있다.
  • Lambda 함수는 메모리 양에 비례하여 CPU 성능을 할당한다. Lambda 함수는 128MB에서 10,240MB 사이에서 설정할 수 있다. 1,768MB 가 할당은 1vCPU 할당과 동등한 값을 가진다.
  • 지원언어 : Node.js, Python, Ruby, Java, .NET, Go
  • 위의 지원언어 외에도 사용자 고유의 런타임을 지정 할 수 있다.
  • 위의 지원언어 외에 컨테이너 이미지로 Lambda를 실행 할 수 있다.

Lambda 애플리케이션 구성요소

  • Lambda 계층 : 배포를 위해 .zip 파일 아카이브를 사용하는 함수와 함께 계층을 사용한다. 컨테이너 이미지로 정의된 Lambda 함수는 컨테이너 이미지를 생성 할 때, 기본 런타임과 모든 코드 종속을 포함한다. 컨테이너를 통해서 종속성 관리를 단순화하는 것도 좋은 방법이 되겠다. 혹은 종속성을 모두 패키징하는 go를 사용하는 것도 좋은 방법이다.
  • 코드 : Lambda가 실행하는 코드다. 패키지가 50MB 보다 큰 경우 S3 파일 업로드를 선택한다.
  • Lambda 런타임 : Lambda는 런타임을 통해서 여러 언어를 지원한다. 혹은 컨테이너를 사용 할 수 있다. 런타임은 Amazon Linux 혹은 Amazon Linux 2 둘 중 하나의 페어링 된다.
  • 이벤트 소스 : Lambda 함수를 이벤트 소스에 맵핑 할 수 있다. Amazon DynamoDB, Amazon Kinesis, Amazon MQ, AMK, self-managed kafka, Amazon SQS 등의 서비스가 이벤트 소스가 될 수 있다.
  • 트리거 : 함수를 호출하도록 구성한 서비스 및 리소스다. 이벤트 소스 매핑을 생성하거나 다른 서비스에서 트리거를 생성 할 수 있다.
  • 동시성 : 함수가 동시에 실행되는 최대 실행 횟수를 설정할 수 있다.
  • 다운스트림 : 함수가 트리거된 후 호출하는 AWS 서비스.
  • 로그스트림 : 함수의 호출과 실행을 모니터링 하기 위해서 CloudWatch에 로그를 기록할 로그스트림을 작성 한다.

Lambda 함수 호출

  • 동기식 호출 : 함수를 동기식으로 호출하는 경우 Lambda 함수를 실행하고 응답을 기다린다. 함수는 코드에 정의된 앙답을 반환한다.
  • 비동기식 호출 : Amazon S3, Amazon SNS와 같은 AWS 서비스들은 비동기식 함수를 처리한다. 이들 서비스는 Lambda 함수의 응답을 기다리지 않는다. Lambda는 독자적으로 작업을 수행하고 그 결과를 SQS 등을 통해서 비동기적으로 전송한다.
  • 비동기식 호출에서의 에러처리 : 비동기식 Lambda 함수 호출에 실패할 경우, Lambda 함수는 2번 더 함수를 실행하려 한다. 처음 시도에는 1분의 대기시간이 있으며, 다음 시도에는 2분의 대기 시간이 있다.
  • 이벤트 소스 맴핑 : 이벤트 소스에서 AWS Lambda 함수를 호출한다. 이벤트 소스 자원은 아래와 같다.
    • Amazon DynamoDB
    • Amazon Kinesis
    • Amazon MQ
    • Amazon Managed Streaming for Apache Kafka
    • self-managed Apache Kafka
    • Amazon SQS
  • 함수 상태 : 함수를 생성하거나 업데이트를 하면 Lambda 함수를 실행 할 수 있도록 컴퓨팅 및 네트워크 리소스를 프로비저닝 한다. 대부분은 빠르게 진행되지만, 특정한 경우에 더 오랜 시간이 걸릴 수 있다. 예를 들어 VPC에 연결하도록 함수를 구성 할 경우 1분 정도의 시간이 걸릴 수 있다. Lambda 함수를 이용해서 함수 상태를 확인 할 수 있다.
  • 함수규모 조정 : 함수를 최초에 호출하면 AWS Lambda는 함수의 인스턴스를 생성하고 핸들러 메서드를 실행하여 이벤트를 처리한다. 함수가 한번 실행되면, 이 함수는 활성 상태를 유지하고 추가 이벤트를 처리하기 위해서 대기 한다. 첫번째 이벤트를 처리하는 동안, 함수가 다시 호출 될 수 있는데 이 경우 Lambda는 다른 인스턴스를 초기화 해서 동시에 두 개의 이벤트를 처라하게 된다. 요청이 감소하게 되면 Lambda는 미사용 인스턴스를 중단하여 다른 함수를 위해서 용량을 확보한다. 동시에 실행 할 수 있는 함수에는 제한이 있으며, 리전에 따라 달라진다.
    • 3000 : 미국 서부(오레곤), 미국 동부(버지니아 북부), 유럽(아일랜드)
    • 1000 : 아시아 태평양(일본), 유럽(프랑크푸르트), 미국 동부(오하이오)
    • 500 : 기타 리전
  • 429 동시성을 초과해서 요청이 들어올 경우 429 Too Many Requests를 리턴한다.

VPC로 연결 할 수 있도록 Lambda 함수 구성

AWS Lambda는 Service VPC에서 실행이 된다. 고객 VPC와는 격리 되어 있기 때문에, 고객 VPC에 있는 AWS 리소스(RDS, EC2) 등에 접근하기 위해서는 VPC 연결을 활성화 해야 한다.

Lambda 함수를 VPC에 연결하면, 고객 VPC에 ENI(Elastic Network Interface)가 생성되며, 이를 이용해서 고객 리소스에 접근 할 수 있다.

 Lambda VPC

Lambda 함수 생성시
  1. VPC 를 활성화
  2. VPC, Subnet, Security Group 선택
하면 된다.

Lambda 함수 관리

  • 환경변수를 이용하면 코드를 업데이트하지 않고 함수의 동작을 조정 할 수 있다. 예를 들어 동일한 코드이지만 개발환경과 프러덕트 환경에서 함수의 동작이 달라질 수 있는데, 환경변수를 이용해서 각 환경에 맞게 동작하도록 할 수 있다.
  • 동시성 : 각 함수가 동시에 처리 할 수 있는 요청의 수다. 두 가지 유형의 동시성이 있다.
    • 예약된 동시성 : 말 그대로 함수의 동시실행 크기를 예약한다. 한 함수가 동시성을 예약하면, 다른 함수는 해당 동시성을 사용 할 수 없다. 또한 예약된 동시성은 함수 전체에 적용이 된다.
  • 프로비저된 동시성 : 지연 시간의 변동 없이 함수를 확장하려면 프로비저닝된 동시성을 사용한다.
  • 버전 : 버전을 사용하여 함수 배포를 관리 할 수 있다. 예를 들어, 안정적인 프로덕션 버전에 영향을 주지 않고 베타 테스터를 위한 새 버전의 함수를 게시 할 수 있다. 함수를 게시 할 때 마다 Lambda 함수의 새 버전이 만들어진다.
  • 메모리 : Lambda는 구성된 메모리 양에 비례하여 CPU 성능을 할당한다.

Lambda 소개 영상

Lambda@Edge

CDN은 초기에는 정적 컨텐츠만을 고속으로 제공하기 위해서 사용했으나, 지금은 컴퓨팅 자원도 고속으로 제공하기 위해서 사용한다. Lambda@Edge는 애플리케이션 코드가 사용자와 더 가까운 위치에서 실행하여 성능을 개선하고 지연시간을 단축 할 수 있게 해준다.

 Lambda@Edge

Lambda Quota

  • 동시 실행 : 기본 할당량 1,000 ~ 최대 한도 증가(수십만)
  • 함수및 계층 스토리지 크기(.zip) : 75GB
  • 함수 메모리 할당 : 128MB ~ 10,240 MB,
  • 함수 제한 시간 : 900초
  • 환경변수 크기 : 4K
  • 계층 크기 : 5개
  • 함수 버스트 동시성 : 500 ~ 3000
  • 호출 페이로드 : 6M(동기식), 256KB(비동기식)
  • 배포 패키지 크기
    • 50 MB(직업 업로드용 압축파일)
    • 250 MB(계층을 포함해 압축 해제됨)
    • 3MB (콘솔 편집기), 개별 파일당 최대 512KB
  • 컨테이너 이미키 크기 : 10GB