BLOG

AWS Lambda 제대로 활용하기 – 모범 사례 소개
작성일: 2019년 8월 9일

바로 어제자 포스팅에선 AWS 람다 함수를 호출할 수 있는 다양한 방법을 다루었습니다. 오늘은 AWS 람다 함수를 작성할 때 사용할 수 있는 몇 가지 팁과 모범 사례에 대해 알려드리겠습니다.

 

Lambda 사용의 장점 중 하나는 서버 및 인프라 관리에 대해 걱정할 필요가 없다는 점입니다. 이는 람다 함수를 실행하는데 필요한 과도한 작업을 AWS가 대신 처리한다는 것을 의미합니다. 이러한 아키텍처를 이제 소개해 드릴 팁과 함께 활용해 보세요!

 

 

첫 번째 팁, VPC 활성화 Lambda 함수 설정하기

 

람다 함수는 항상 AWS 소유의 VPC내에서 실행됩니다. 기본적으로 함수는 모든 공용 인터넷 주소에 대한 네트워크 요청을 할 수 있는 완전한 기능이 있습니다. 여기에는 공용 AWS API에 대한 액세스도 포함됩니다. 예를 들어, 함수는 PutItem에 대한 AWS DynamoDB API 또는 레코드에 대한 쿼리와 상호 작용할 수 있습니다. 서브넷에 있는 개인 리소스와 상호 작용해야 하는 경우에만 VPC 액세스를 위한 함수를 실행합니다. RDS 인스턴스가 그에 대한 좋은 예입니다.

 

 

함수가 VPC를 사용하도록 설정하면 함수의 모든 네트워크 트래픽에 VPC/ 서브넷의 라우팅 규칙이 적용됩니다. 함수가 공용 리소스와 상호 작용해야 하는 경우, 공용 서브넷에서 NAT 게이트웨이를 통한 경로가 필요합니다.

 

 

두 번째 팁, 공통 코드를 Lambda 레이어(즉, AWS SDK)에 배포하기

 

2개 이상의 함수에서 코드를 재사용하려는 경우, 레이어를 생성한 후 그곳에 배포하는 방법을 고려해 보세요. 그에 대한 훌륭한 선택안으로 사용자의 팀이 표준화해야하는 로깅 패키지 또는 SDK가 있습니다. AWS에는 NodeJS 및 Python 함수용 AWS SDK가 포함되며 이 SDK는 주기적으로 업데이트됩니다. 하지만 자신의 SDK를 번들링하고 테스트한 SDK 버전에 함수를 고정해야 하는 작업은 진행해야 합니다.

 

 

세 번째 팁, 패키지 크기와 종속성 확인하기

 

Lambda 함수를 사용하려면 필요한 모든 종속성을 패키징하거나 한 레이어로 연결해야 합니다. 배포 패키지가 클수록 함수 시작이 느려집니다. 문서 및 사용되지 않는 라이브러리와 같은 불필요한 항목을 모두 제거하십시오. AWS SDK와 함께 Java 함수를 사용하는 경우엔 전체 SDK가 아닌 실제로 사용해야 하는 모듈만 번들로 묶어줍니다.

 

좋은 예

<dependency>

    <groupId>software.amazon.awssdk</groupId> <artifactId>dynamodb</artifactId>

    <version>2.6.0</version>

</dependency>

 

나쁜 예

<!– https://mvnrepository.com/artifact/software.amazon.awssdk/aws-sdk-java –>

<dependency>

    <groupId>software.amazon.awssdk</groupId>

    <artifactId>aws-sdk-java</artifactId>

    <version>2.6.0</version>

</dependency>

 

 

네 번째 팁, 동시성 모니터링 및 알람 설정하기

 

해당 주제와 관하여 이전에 동시성이 다운 스트림 시스템에 미치는 영향에 대해 설명해 드린 적 있었습니다. Lambda 함수는 매우 빠르게 확장될 수 있기 때문에 동시성이 급증할 때 이를 알려주는 컨트롤이 있어야 합니다. 따라서 ConcurrentExecutions 또는 Invocations와 같은 기능 지표가 임계값을 초과 할 때, 이를 팀에 알려주는 CloudWatch 알람을 배포하는 것이 좋습니다. 또한 비용을 매일 모니터링 할 수 있도록 AWS 예산을 만들어야 합니다. 자동화된 비용 관리를 설정하는 좋은 예를 확인하고 싶으시면 여기를 방문해 주세요.

 

 

다섯 번째 팁, 오버 프로비저닝 메모리이지만 타임아웃은 안되게 설정하기

 

Lambda는 함수에 할당하는 메모리에 비례하여 컴퓨팅 성능을 할당합니다. 즉, 메모리를 오버 프로비저닝하여 함수를 더 빠르게 실행하고 잠재적으로 비용을 줄일 수 있습니다. 따라서 사용사례를 벤치마킹하여 많은 메모리를 쓰면서 빨리 실행할 때와 적은 메모리로 느리게 실행할 때의 손익 분기점이 어디에 있는지를 결정해야 합니다.

 

그러나 함수 타임 아웃 설정은 오버 프로비저닝하지 않는 것이 좋습니다. 항상 코드 성능을 이해하고 그에 따라 함수 타임아웃을 설정하십시오. 오버 프로비저닝 함수 타임아웃은 람다 함수의 실행 시간을 지연시키고 예기치 않은 비용을 발생시키는 경우가 종종 있습니다.

 

 

 

 

 

원문 URL: https://aws.amazon.com/ko/blogs/architecture/best-practices-for-developing-on-aws-lambda/

 

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.