Amazon Web Services 한국 블로그
AWS Lambda 신규 기능 – Python 지원, VPC 지원, 함수 실행 시간 연장 및 스케줄링
작년 re:Invent 2014에서 AWS Lambda를 공개한 이후, 놀라운 변화가 있었습니다. 먼저 많은 개발자 및 시스템 아키텍트들이 서버 없는(Serverless) 시스템에 대한 신 개념을 빠르게 파악하는 것을 보았습니다. 이를 통해 대용량 요청을 처리하기 위한 확장 및 관리가 전혀 없는 형태의 놀라울 만한 방법으로 이를 클라우드 아키텍쳐에 도입하였습니다.
이제 그동안 추가되어 온 Lambda 함수가 처리할 수 있는 각종 이벤트를 한번 다시 한번 살펴보겠습니다.
- Amazon S3 버킷 변경 시
- Amazon DynamoDB 테이블 업데이트 시
- Amazon Kinesis 스트림에 메시지 도착 시
- Amazon Simple Notipication Service(SNS) 토픽 알림 시
- Amazon API Gateway를 통해 HTTP 호출 시
- AWS CloudFormation 템플릿 확인 시
- Amazon Cognito 이벤트가 들어올 시
- Alexa Silk 활성화 될 시
- Amazon Simple Workflow Service(SWF) 활동 호출 시
- Amazon Simple Email Service(SES) 메일 도착 시
지난 1년간 Lambda에 많은 기능을 추가해 왔는데, 우선 세 개의 AWS 리전(US West, US East, Europe)에 더하여 올해 초 동경 리전을 추가하였습니다. 시작할 때 Node.js에 더불어 자바 함수 지원도 시작했습니다. 위의 목록에서 보듯이 많은 AWS 자원의 이벤트를 지원하고 있고, AWS Compute Blog에서 이를 사용하는 다양한 예제를 보실 수 있으며 그 중에서도 가장 멋진 글은 바로 (개인적인 취향이지만) Microservices Without the Servers입니다.
AWS Lambda 신규 기능
오늘 re:Invent 2015에서는 AWS Lambda의 새로운 추가 기능들을 발표하게 되었습니다.
- VPC 지원
- Python 함수 지원
- 함수 실행 시간 증가
- 함수 버전 지원
- 함수 스케쥴링 지원
보시면 아시겠지만, 모두 함수에 대한 새로운 기능들로 좀 더 자세히 하나씩 살펴보도록 하겠습니다.
1. 람다 함수에서 VPC내 자원 접근
많은 고객들이 Amazon VPC내에서 마이크로서비스를 운영하고 있고, 람다 함수에서 이를 접근할 수 있기를 바라고 있습니다. 만약 MongoDB 클러스터를 운영하면서, 데이터를 조회하거나 Amazon ElastiCache를 상태 저장소로 사용하거나 할때 람다 함수가 필요할 수 있는데, 이들은 인터넷 상에 노출되는 자원이 아닙니다.
이제 여러분이 정한 VPC 안의 보안 그룹을 설정함으로서 이러한 리소스를 접근할 수 있게 됩니다. 람다를 통한 인바인드 트래픽 접근을 허용하고 타겟 VPC 서브넷에 첨부 하면 됩니다. 여러분이 람다 함수를 만들거나 기존 함수를 사용할 때, 특정 VPC, 서브넷 그리고 보안 그룹을 지정해야 합니다. 또한, IAM 역할을 통해 함수 권한을 실행해서, 유연한 네트워킹 설정을 위한 몇가지 EC2 함수 접근을 주면 됩니다.
본 기능은 올해 말 지원을 할 예정이고, 더 자세한 것은 본 블로그를 통해 계속 알려드리겠습니다.
2. Python 기반 람다 함수 지원
여러분은 Node.js 및 Java로 람다 함수 작성이 가능하며, 이에 추가적으로 오늘부터 Python 2.7 프로그래밍 지원을 시작합니다. AWS SDK for Python에도 함께 포함되었습니다. Python 언어는 쉽게 배우고 사용할 수 있는 인기 있는 언어로서 이에 대한 많은 지원 요청을 받았습니다. 그래서 오늘 여러분께 선보이기 되어서 매우 기쁩니다.
아래는 Python을 통한 함수 지원 스크린샷입니다.
3. 람다 함수 실행 시간 증가
람다는 추출-변환-읽기(Extract-Transform-Load, ETL)과 같은 작업에 딱 맞습니다. 영구적인 인프라가 필요 없이 쉽게 대용량 데이터를 수집 및 처리하는데 쉽게 확장이 가능합니다. 이를 지원하기 위해 람다 함수는 5분까지 실행할 수 있게 되었습니다. 이러한 경우에 대해 함수를 만들 때 타임아웃을 지정하기만 하면 됩니다. 여러분의 함수가 얼마나 오래 실행되는지 확인을 하셔도 됩니다.
아래는 Python을 활용하여 잔여 시간을 확인할 수 있는 로그를 남기는 방법입니다.
print(" Remaining time (ms): " + str(context.get_remaining_time_in_millis()) + "\n")
대부분 경우처럼, 정해진 함수 실행 시간을 모도 소모하면 종료됩니다.
4. 람다 함수 버전 및 별칭 지원
람다 함수를 통해 복잡한 시스템을 만들 때, 함수 기능을 계속 추가하면서 이를 제어할 필요가 있습니다. 개발 및 테스트 측면에서도 중요한 이런 부분을 단순화 하기 위해 신규 버전 기능을 공개합니다.
특정 함수의 새로운 코드를 매번 올릴 때 마다 람다가 새로운 버전 숫자를 지정하게 됩니다.(예, 1,2,3 등) 함수에 대한 ARN(Amazon Resource Name)에 옵션으로 버전 지시자가 추가 됩니다. (즉, “:”뒤에 버전 번호) ARN에 지시자가 없으면 최신 버전임을 의미하며 하위 호환성을 쉽게 활용할 수 있습니다. 버전 2의 ARN 지시자는 “arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:2” 형식입니다.
버전 기능에 대해 알아 두셔야 할 몇 가지 점을 함께 알려드립니다.
- 각 함수 버전은 자체 설정 정보를 포함합니다. (언어, 런타임, 메모리 크기 및 타임아웃, IAM 역할 등)
- 각 버전은 자체적인 CloudWatch 측정값를 생성합니다.
- CloudWatch 로그는 스트림 이름에 함수 버전을 포함합니다.
- Lambda에서는 각 함수마다 다중 버전을 저장하고, 각 람다 계정은 1.5기가바이트까지 코드를 저장한 뒤, 이전 버전은 삭제합니다.
또한, 각 함수 및 버전 이름에 대한 별칭(aliasing)을 지정할 수도 있습니다. (예를 들어, version 3에 “prod”, version 5에 “test” 그리고 version 7에 “dev”같은 방식) 또한 ARN에서 별칭을 확인 할 수도 있습니다.
- Production – “arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:prod”
- Testing – “arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:test”
- Development – “arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:dev”
ARN에 있는 버전 및 별칭을 이용하여 어디서나 기존 ARN에 사용할 수 있으며, 모범 활용 방법으로 추천드립니다.
이 기능을 통해 문제 발생 시 쉽게 코드를 개발 단계에서 이전 버전으로 롤백을 할 수 있습니다. 예를 들어, 클라이언트 애플리케이션의 변경이나 이벤트 소스에 대한 함수 재실행 없이도 서비스 환경에서 버전 3을 변경해서 기능 변화를 줄 수 있습니다.
5. 람다 함수 스케쥴링(Cron)
새롭게 주기적으로 람다 함수를 실행할 수 있는 기능을 추가합니다. 실행 날짜, 시간 및 분 단위로 주기를 정할 수 있고 이는 기존 Cron 작업과 비슷합니다.
이러한 기능들은 오늘 부터 바로 AWS 관리 콘솔에서 사용할 수 있으며 바로 활용할 수 있습니다.
— Jeff;
이 글은 AWS Lambda Update – Python, VPC, Increased Function Duration, Scheduling, and More의 한국어 번역이며, re:Invent 2015의 신규 서비스 소식입니다.