AWS

[Lambda] Lambda 환경의 몇 가지 고유한 특성

1. 콜드 스타트 (따로 작성 예정)

- 람다 함수는 사용하지 않으면 일정 시간 동안 유휴 상태였다가 호출이 발생할 때, 다시 함수의 새 인스턴스를 초기화한다. 이 초기화 과정에서 지연 시간이 발생하는데 이를 "콜드스타트"라고 한다.

- 이를 완화하기 위해서는 함수를 주기적으로 호출해서(AWS CloudWatch 이벤트 사용)으로 Warm up할 수 있으며, 이로 콜드스타트의 지연시간을 피할 수 있다.

 

2. Statelessness

람다 함수는 상태를 저장하지 않는다. 다시 말해, 호출이 독립적이기 때문에 Amazon S3 또는 데이터베이스와 같은 외부 스토리지 서비스에 명시적으로 저장해야 한다. (그렇지 않으면 호출 간에 데이터가 보존 되지 않기 때문)

 

3. 실행 시간 제한

- 람다 함수에는 15min 이라는 최대 실행 시간 제한이 있다. 이 시간을 초과하는 기능은 종료된다. 

- 그렇기 때문에 이 기간 내에 완료되도록 코드를 최적화해야 하며, 더 긴 작업의 경우 더 작은 Lambda 함수로 나누거나 AWS Step Functions와 같은 다른 AWS 서비스를 사용해야 한다.

 

4. 메모리 및 CPU

- 람다 함수에 할당되는 CPU 및 메모리 양은 비례한다. 메모리 할당을 늘리면 함수에 더 많은 메모리가 제공되며 또 더 많은 CPU 성능도 제공된다.

- 최적의 메모리 설정을 찾기 위해 기능을 프로파일링 하자. 실행당 비용이 높더라도 메모리ㄴ를 늘리면 실행 시간과 비용이 줄어 들 수 있기 때문에 고려해볼 만 하다.

 

5. 동시성 및 제한 (따로 작성 예정)

- AWS는 자체적으로 Lambda 함수에 동시성 제한을 적용한다. 이러한 제한을 초과하면 제한이 발생하여 추가 호출이 지연되거나 거부될 수 있다.

- 동시성을 모니터링하며, 필요하다면 AWS Lambda 예약 동시성을 사용해서 계정의 사용 가능한 동시성 중 일부를 중요한 기능에 할당하자.

 

6. dependency 관리 (관련 글)

- 배포 패키지의 크기를 최소화하여 AWS Lambda가 함수를 전송하고 임시 디렉터리에 압축을 푸는 데 걸리는 시간을 줄이자.

- 종속성이 크거나 초기화가 많이 필요한 함수의 경우 Lambda 레이어를 사용하여 함수 간에 코드와 데이터를 공유하는 것이 좋다.

 

7. API gateway Integration

- API gateway와 같이 사용할 때, API gateway의 타임아웃은 29초이기 때문에 이 시간안에 람다가 response를 줄 수 있도록 주의가 필요하다.

- API gateway의 캐싱을 사용하여 Lambda invocation 요청 주기를 늘리자.

 

8. Networking and VPC (따로 작성 예정)

- Lambda 함수가 VPC 내의 리소스에 액세스해야 하는 경우 초기 설정으로 인해 콜드 스타트 시간이 추가될 수 있다. VPC 구성을 최적화하고 VPC 연결 수를 최소화 해야 한다.

 

9. 모니터링 및 로깅 (따로 작성 예정)

- Amazon CloudWatch를 사용하여 호출 횟수, 오류 및 실행 기간과 같은 함수 지표를 모니터링 합니다.

- 성능 병목 현상을 디버깅하고 식별하기 위해 자세한 로깅(AWS CloudWatch Log 사용)을 구현합니다.

 

10. 비동기 호출 사용

- Lambda 함수가 다른 서비스나 API를 호출하는 경우 비동기 호출 및 non-blocking I/O를 사용하여 성능을 향상시킬 수 있다.

'AWS' 카테고리의 다른 글

[Lambda] AWS Lambda Dependency  (0) 2023.12.11