Category: AWS Lambda


AWS Lambda 신규 기능 – Python 지원, VPC 지원, 함수 실행 시간 연장 및 스케줄링

작년 re:Invent 2014에서 AWS Lambda를 공개한 이후, 놀라운 변화가 있었습니다. 먼저 많은 개발자 및 시스템 아키텍트들이 서버 없는(Serverless) 시스템에 대한 신 개념을 빠르게 파악하는 것을 보았습니다. 이를 통해 대용량 요청을 처리하기 위한 확장 및 관리가 전혀 없는 형태의 놀라울 만한 방법으로 이를 클라우드 아키텍쳐에 도입하였습니다.

이제 그동안 추가되어 온 Lambda 함수가 처리할 수 있는 각종 이벤트를 한번 다시 한번 살펴보겠습니다.

지난 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의 신규 서비스 소식입니다.

Amazon SNS를 통해 AWS IP 대역 변경 사항 알림 받기

작년 AWS IP 대역 JSON 형식으로 공개하였습니다. 이 글은 금요일 오후에 올렸지만 주말 내내 인기 글이 되었습니다. 많은 AWS 사용자들이 아이피 대역을 활용하여 AWS 네트워크 성장함에 따라 자체 방화벽의 규칙을 관리하는데 잘 이용할 수 있게 되었습니다. 만약 AWS Direct Connect를 사용하는 고객이라면, 이 파일을 통해 접속을 위한 라우팅 테이블을 반영에 도움을 얻을 수 있습니다.

오늘은 좀 더 쉽게 이 파일 목록을 이용할 수 있도록 Amazon Simple Notification Service (SNS) 토픽을 생성해서 업데이트 내역에 대한 알림을 받을 수 있는 기능을 알려드리겠습니다. 프로그램 코드를 통해 좀 더 쉽게 업데이트 내역을 파악하여 빠르게 적용 가능합니다.

arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged 토픽에 가입하고 원하는 방식대로 이용하면 됩니다. (SNS 지원 프로토콜 활용 가능)

아래와 같은 형식으로 알림을 받게 됩니다.

{
  "create-time":"yyyy-mm-ddThh:mm:ss+00:00",
  "synctoken":"0123456789",
  "md5":"6a45316e8bc9463c9e926d5d37836d33",
  "url":"https://ip-ranges.amazonaws.com/ip-ranges.json"
}

AWS Lambda 함수를 통해 변경 사항을 받으실 수도 있습니다.

이제 AWS IP 대역 파일 업데이트 내역을 쉽게 받아서 파싱 후, 원하는 정보로 가공 할 수 있게 되었습니다. 좀 더 자세한 사항은 AWS IP Address Ranges 문서를 참고하시기 바랍니다.

Jeff;

PS – 2015년 8월 25일 현재 EC2의 IP 대역은 13,065,550개의 주소를 가지고 있습니다.

이 글은 Subscribe to AWS Public IP Address Changes via Amazon SNS의 한국어 번역입니다.

Amazon S3 기능 추가 – 알람 기능 및 버킷 측정 기준 향상

2006년 봄에 Amazon Simple Storage Service (S3)간단한 블로그 공지로부터 시작했습니다. 그동안 간편하지만 강력한 서비스 모델을 유지해 오면서, 가격 인하를 포함하여 중복을 감소한 스토리지, VPC 엔드 포인트, 리전간 복제 기능이벤트 노티피게이션 기능 등을 추가해 왔습니다.

작년에 이벤트 알림 기능을 추가한 이후 다양한 객체 이벤트에 대한 알림을 지원해 왔습니다. 예를 들어, PUT, POST, Copy, Multipart Upload 등의 이벤트가 있을 때 알람을 지원합니다. 이러한 알람 통지 기능은 모든 버킷의 객체가 대상입니다. 오늘 부터 객체들이 삭제 되었을 때, 접두사 및 접미사(prefixes 및 suffixes) 필터링을 지원합니다. 또한, 버킷 수준에서 Amazon CloudWatch 메트릭 지원합니다.

알림 통지 기능 향상
또한, S3 버킷에서 객체가 삭제 된 경우에 알람을 통지하도록 설정할 수 있습니다. 다른 형식의 통지와 마찬가지로, 삭제 통지는 SQS 큐(Queue)나 SNS 토픽(Topic), AWS Lambda function에 연결해서 보낼 수 있습니다. 이러한 객체 삭제 알림은 DELETE 수행이 될 때 S3 객체를 관리하기 위한 인덱스 업데이트 및 데이터 추적 등에 사용할 수 있습니다.

또한, 객체 이름의 접두사와 접미사를 사용한 필터를 사용할 수 있습니다. 다음 예제에서는 특정 버킷에서 “images /” 접두사 “.png” 접미사의 객체가 삭제 된 경우에 알람을 통지 할 수 있습니다.

관리 콘솔에서 여러 개의 알람 통지를 생성 및 편집 할 수 있습니다.

CloudWatch 스토리지 측정 기준
Amazon CloudWatch는 AWS 서비스 및 여러분이 추가한 응용 프로그램의 측정 값 추적 및 알람 기능을 가지고 있습니다. 알람 설정은 경과 시간 동안 임계값을 초과 할 때 발생합니다. S3의 모니터 및 알람 기능을 S3에 대해서도 할 수 있습니다. 지원되는 측정 지표는 버킷 당 총 바이트 수 (표준 및 RRS)과 총 객체 수입니다. 측정 기준에 따른 결과는 AWS 관리 콘솔에서 볼 수 있습니다.

측정 기준은 빌링과 함께 마찬가지로 매일 업데이트 합니다. 또한, 스토리지 라이프 사이클 규칙 등에 의해 Glacier로 이동하도록 설정 된 객체는 제외됩니다.

지금 사용 가능
이 기능들은 오늘 부터 바로 사용이 가능합니다.

Jeff;

이 글은 Amazon S3 Update – Notification Enhancements & Bucket Metrics의 한국어 번역입니다.

DynamoDB 신규 기능 – 스트림 및 Lambda 데이터 트리거 + 리전간 복제

Amazon DynamoDB에 여러 가지 새로운 소식이 있습니다. 먼저 DynamoDB 스트림 기능이 추가되었으며, AWS Lambda를 통해 스트림 데이터 활용이 가능합니다. 두 번째는 하나의 DynamoDB 테이블에서 다른 테이블로 복제가 가능하고, 리전(Regions)을 넘어서도 가능해졌습니다.

지금 부터 자세히 살펴 보겠습니다.

DynamoDB Streams
지난 가을에 re:Invent 행사 며칠 전 DynamoDB 스트림에 대한 미리 보기 기능을 출시했습니다. 많은 사용자들이 DynamoDB 테이블의 변경을 추적하기를 원하셨기 때문이었습니다.

이 기능은 오늘부터 정식으로 사용할 수 있으며, 바로 DynamoDB 테이블에 기능을 활성화하면 모든 변경 사항(put, update, delete)를 24시간 언제든지 stream record로서 실시간으로 스트리밍으로 받을 수 있습니다. 여러 개의 스트림 레코드는 빠르고 효율적인 처리를 위해 샤드(shard)에 그룹으로 만들어서 하나의 단위로 변환됩니다.

테이블 변경 순서의 상대적인 위치는 하나의 고유키로 만들어서 샤드안에 저장됩니다. 이를 통해 항목 변화를 정확히 추적할 수 있도록 샤드 내에 스트림 레코드를 쉽게 처리할 수 있게 됩니다.

“Interactive Intelligence는 Amazon DynamoDB의 리전간 복제 기능을 처음 테스트 해보고 매우 놀라웠습니다. PureCloud 플랫폼이 이 기능을 처음 도입을 해보고, 빠르고 쉽게 AWS 리전간 데이터가 쉽게 복제되어서 운영 및 기술 지원 비용을 확실히 감소할 수 있게 되었습니다.”
Mike Szilagyi, PureCloud Service Technology 부사장
Interactive Intelligence

프로그램 코드를 사용해서 샤드에서 레코드를 추출한 후, 변환 받은 다음 필요한 기능을 수행할 수 있습니다. 각 레코드는 미리 생성된 테이블 쓰기 용량 내에서 두 번 정도에 변환 받을 수 있습니다.

스트림 기능을 활성화하려면, 테이블을 만들 때 CreateTable를 호출하여 스트림에 대한 파라미터를 넣어 만들 수 있습니다. 기존 테이블에서도 UpdateTable에서 비슷한 파라미터를 넣으시면 됩니다. 각각의 경우, 표준 스펙에 스트림을 시작할지 말지에 대한 플래그(flag)와 보기 형식(저장 및 반환 항목키 만, 새로운 이미지, 예전 이미지 혹은 둘 다)를 포함해야 합니다.

좀 더 자세한 사항은 신규 기능에 대한 DynamoDB Streams Developer Guide를 참고하시기 바랍니다.

추가 비용 없이 여러분의 테이블에 스트리밍 기능을 바로 만드실 수 있으며, 스트림에서 데이터를 읽을 때만 과금이 되는데 GetRecords를 통한 호출 시 1MB까지 데이터를 꺼내 올 수 있습니다. 좀 더 자세한 것은 요금 정책을 참고하시면 됩니다.

DynamoDB 스트림 + Lambda = 데이터베이스 트리거
AWS Lambda는 (현재 Node.js와 자바)를 통해 만든 프로그래밍 코드를 클라우드 내에서 실행하는 신개념의 클라우드 함수입니다.  장애나 확장성에 대한 고려 없이도 100 밀리초 단위로 실행한 시간 만큼만 과금을 하는 경제적인 모델을 가진 서비스입니다.

오늘 DynamoDB 스트림 기능을 정식 출시함으로서 테이블이 더 커지거나 쿼리가 많아질 때, 확장성을 고려하지 않고도 기존의 프로그래밍 코드보다 훨씬 적은 노력만으로 (Lambda를 이용하여) 스트림 레코드를 처리할 수 있습니다.

즉,  이 두 가지를 조합해서 간단한 NoSQL 스타일의 데이터베이스 트리거를 만들 수 있습니다. 예전에 관계형 DB의 트리거는 엔진 내에서 구현되었고, 때문에 엔진에서 정의된 동작만 수행할 수 있는 제한이 있었습니다. Lambda를 이용하면, 데이터 추가, 삭제 및 테이블 항목 변경이 일어날 때 마다 관련되는 동작을 원하는 대로 구현할 수 있습니다. 신규 혹은 과거 이미지의 변경 사항을 분석하고, 데이터 양식을 변경하거나 특정 비지니스 로직을 동기 혹은 비동기로 강제하는 것도 가능합니다. 여러분이 좀 더 애플리케이션 개발에 중요한 부분에 집중하도록 Lambda를 통해 호스팅과 확장 문제를 관리하게 만들어 둘 수도 있습니다.

Lambda 코드를 설정해서 스트림 변경을 확인하는 것도 간단합니다. 새 테이블을 통해 하는 방법을 간단히 살펴 보겠습니다. 먼저 Lambda를 위한 IAM 역할을 만들고, 관리 콘솔에서 Create Lambda function을 실행해 봅니다. 예제들 중 dynamodb-process-stream를 선택해 보겠습니다.

먼저 Lambda 함수 예제 코드와 이벤트 소스를 설정합니다.콘솔 화면에 이벤트 소스로 user_table이라는 테이블을 연결해서, 100개까지의 스트림 레코드를 받아서 새로운 레코드로 처리하는 기능을 수행해 보겠습니다.

예제에는 현재 상태를 테스트해 보는 목적의 코드가 있으며, 간단한 이름을 정한 후 (ProcessUserTableRecords) DynamoDB에 접근할 수 있는 IAM 역할을 선택합니다.

이제 이벤트 소스를 활성화 해보겠습니다. (Lambda 코드를 테스트해 본 후에 실제 동작 하도록 하는 게 좋습니다.)

Create function을 눌러서 이벤트 소스로서 테이블 업데이트 스트림을 처리하는 함수를 만듭니다. Lambda 콘솔의 Event sources탭에서 상태와 다른 이벤트 소스도 보실 수 있습니다.

자, 이제 설정이 다 끝났고 여기서 테이블의 업데이트 스트림을 연결 한 후, 레코드를 처리해 봅시다. 이를 위해 DynamoDB 콘솔로 옮겨가서 데이터를 몇 개 추가해서 스트림에 변화가 생기도록 해 보겠습니다.

Lambda 콘솔에 들어와 보면, 기대했던 동작이 일어났는지 확인해 볼 수 있습니다. 모니터링 탭을 클릭해 보면 오류 없이 Lambda 함수가 두 번 실행된 것을 알 수 있습니다.

일단 잘 동작한 것으로 보고 CloudWatch 로그를 좀 더 자세히 보겠습니다.

만약 제가 실제 애플리케이션을 만들었다면, 기본 예제에 더 많은 기능을 추가해서 만들어 볼 수 있었을 것입니다.

AWS 고객인 Mapbox는DynamoDB Streams와 Lambda를 이용한 후기를 Scaling the Mapbox Infrastructure with DynamoDB Streams를 통해 소개하였습니다.

DynamoDB와 Lambda를 결합한 구현 방식에 대해서는 Using DynamoDB Streams and AWS Lambda 문서를 참고하시기 바랍니다. DynamoDB Trigger에는 추가 요금이 없고 Lambda 함수 실행에 대한 과금만 이루어 지며 자세한 것은 Lambda 요금 정보를 참고하시기 바랍니다.

이러한 조합을 통해 여러분의 애플리케이션이 더 간단하고 강력하며 반응성이 높은 기능을 추가할 수 있기를 기대해 봅니다.

리전(Region)간 DynamoDB 복제 기능
DynamoDB 스트림 기능과 아울러 AWS 리전 간 데이터를 쉽게 복제할 수 있는 기능을 소개해드립니다. 이 애플리케이션은 작년에 저희가 배포한 DynamoDB Cross Region Replication library를 통해 구현한 것입니다. (앞으로도 이 라이브러리를 여러분의 앱에 사용하셔도 됩니다.)

이를 통해 DynamoDB를 여러개의 리전으로 중복으로 복제할 수 있는데, 이는 재난 복구나 여러 지역에서 낮은 지연을 통해 접근이 필요한 여러가지 이유가 있을 수 있습니다. 보시다시피 아주 간단하게 리플리카를 만들어서 운영할 수 있게 됩니다.

이 앱은 AWS Elastic Beanstalk에서도 실행할 수 있고, Amazon EC2 Container Service를 사용할 수 있으며, AWS CloudFormation 템플릿으로도 구현 가능합니다. DynamoDB 콘솔에서 초기화 할 수 있으며 CloudFormation을 통해 스택이나 콘테이너를 생성하기 위한 템플릿 정보를 입력할 수 있습니다.

스택(Stack, 템플릿을 통해 만들어지는 AWS 자원에 대한 이름)을 입력하고 Next를 눌러 파라미터를 입력할 수 있습니다. (대부분 기본값을 그대로 두시면 됩니다.)

메타테이터 테이블은 복제에 필요한 정보를 포함합니다. 이는 어떤 테이블을 복제할 것인지 어디에 저장할 것인지를 설정합니다. 복제용 앱을 띄운 후, 온라인 설정 화면에 접속하술 수 있습니다. (CloudFormation 템플릿이 URL을 만들어 줍니다.)

이 기능 또한, 추가 요금이 없습니다. 이 기능을 활용하기 위한 기본적인 DynamoDB 리소스(미리 설정된 입출력 한도, 복제 테이블의 저장 용량, 리전간 데이터 전송 비용, 스트림으로 데이터 읽기 및 애플리케이션을 제어하는데 필요한 EC2 인스턴스 및 SQS 서비스 이용 비용 등)에 대해서만 과금이 됩니다. 더 자세한 것은 DynamoDB 요금페이지를 참고하시기 바랍니다.

리전 간 복제에 대한 더 자세한 정보는 Cross Region Replication를 참고하시기 바랍니다.

Jeff;

이 글은 DynamoDB Update – Triggers (Streams + Lambda) + Cross-Region Replication App의 한국어 번역입니다.

AWS Lambda 동경 리전에 출시!

오늘 부터 AWS Lambda가 아시아 태평양(동경) 리전에서 사용할 수 있습니다.

AWS Lambda는 AWS 서비스 이벤트에 따라 코드를 실행하고 컴퓨팅 리소스를 자동으로 관리하는 클라우드 서비스이며, 서버 없이도 신속하게 기능을 수행할 수 있는 애플리케이션 구축을 쉽게 개발할 수 있습니다. 예를 들어, AWS Lambda는 S3에 이미지를 업로드하면, 이에 따라 썸네일을 만든다던지 백업을 한다던지 하는 작업을 수 밀리초 내에 실행할 수 있습니다.

인프라 운영자들은 AWS Lambda를 통해 컴퓨팅 자원의 변화에 따라 실행하는 새로운 백엔드 서비스를 만드는 데 사용할 수 있으며, 개발자들은 서버 없이도 원하는 기능을 수행하는 모바일 서비스를 만들 수 있습니다. AWS Lambda는 처리 된 요청 수와 코드 실행에 필요한 된 컴퓨팅 시간에 대해서만 비용이 청구됩니다.

AWS Lambda는 현재 US East (N. Virginia), US West (Oregon), EU (Ireland) 그리고 Asia Pacific (Tokyo)의 지역에서 사용할 수 있습니다. 자세한 내용은 제품 페이지를 참조하십시오.

본 글은 AWS Lambda Available in Asia Pacific (Tokyo)를 번역 및 편집하였습니다.

Alexa Skills Kit, Alexa Voice Service 및 Alexa Fund 소개

Amazon Echo는 음성 인식을 위해 만들어진 새로은 기기입니다. Echo는 AWS 기반 클라우드 음성 서비스인 Alexa와 연결됩니다. Alexa에게 질문에 대한 답을 얻거나, 음악을 재생하거나 뉴스 검색 결과 등을 요청할 수 있습니다.

Amazon Echo 근처에서 부팅 단어(Alexa 또는 Amazon 중 하나)를 말하고 질문이나 요청을 할 수 있는데 예를 들어, “Alexa 시애틀 매리너스의 다음 경기는 언제에요?” 혹은 “Alexa 시애틀에 비가 오고 있나요?”라고 물어보면, 클라우드기반 음성 인식 소프트웨어가 여러분의 질문을 이해하고 처리합니다.

오늘 Alexa Skills Kit(ASK)를 발표하여 Alexa 위한 새로운 음성 기반(음성 구동) 기능을 구현할 수 있게 되었습니다. 개발자들이 몇 줄의 코드로 몇 분만에 기존 서비스를 Alexa에 연결할 수 있습니다. 대화 인식과 자연어 처리에 대해 아무것도 배경 지식이 없다하더라도 몇 시간 만에 완전히 새로운 음성 인식 환경을 구축 할 수 있습니다.

이를 위해 미리보기 형태로 개발자 대상으로 Alexa Voice Service (AVS)을 공개합니다. 하드웨어 제조 업체와 Internet of Things (IoT) 관심자들께서는 오늘 등록해 주십시오. 스피커, 마이크 및 인터넷 연결이 되는 모든 장치는 몇 줄의 코드로 Alexa와 통합 할 수 있습니다.

여러분의 상상력을 자극하는 데 도움이 될 음성 기술 관련 혁신을 촉진하기 위해 Alexa Fund도 시작합니다. Alexa Fund는 개발자와 제조 업체, 그리고 고객의 삶을 향상시키기 위해 사람 목소리에 대해 새로운 프로젝트를 지원하기 위해 최대 1억 달러를 투자합니다.

ASK와 AWS Lambda
AWS Lambda를 사용하여 Alexa위한 새로운 기술을 만들 수 있습니다. Node.js를 사용하여 코드를 쓰고, AWS Management Console을 통해 Lambda에 업로드만 하면 됩니다. 업로드 콘솔에서 만든 샘플 이벤트를 사용하여 테스트를 한 후, Alexa Developer Portal에 로그인하거나 포털에서 (Alexa App 제작 과정을 따라) 코드 등록, ARN (Amazon Resource Name)을 응용 프로그램에 연결하는 데 사용할 수 있습니다. 테스트가 완료되면 응용 프로그램을 Echo의 소유자가 사용할 수 있도록 업로드 할 수 있습니다. Lambda는 확장 가능한 무장애 클라우드 환경에서 여러분의 코드를 호스팅하고 실행합니다. Alexa 기술을 지원하는 기능은 Lambda 무료 서비스 내에서 가능하며, Developing Your Alexa Skill as a Lambda Function을 참조하십시오.

웹 서비스로서 ASK
Amazon Elastic Compute Cloud (EC2)나 AWS Elastic Beanstalk 또는 기존 데이터 센터 서버에서도 응용 프로그램을 웹 서비스로 구축 할 수 있습니다. 음성 인식 서비스는 인터넷 접근이 가능해야하며, Alexa 응용 프로그램 인터페이스 사용을 준수해야합니다. 443 포트에서 HTTPS over SSL/TLS를 지원하고, 서비스 엔드 포인트의 도메인 이름과 일치하는 SSL 인증서를 제공하면 됩니다. 여러분의 코드에서는 실제로 Alexa에서 온 요청인지 확인하고, 시간 기반 메시지 서명을 확인할 필요가 있습니다. 이 옵션에 대한 자세한 정보는 Developing Your Alexa App as a Web Service를 참고하시기 바랍니다.

더 자세한 정보
ASK, AVS와 Alexa Fund에 관한 더 많은 정보는 아래 링크를 참고하시기 바랍니다.

– Jeff

이 글은 New – Alexa Skills Kit, Alexa Voice Service, Alexa Fund의 한국어 번역입니다.

AWS Lambda 자바 언어 지원 시작

많은 AWS 고객들이 AWS Lambda를 이용하여 깔끔하고 전향적인 애플리케이션을 만들고 있습니다. 문서나 이미지를 업로드 했을 때 처리나 AWS CloudTrail의 로그 처리, Amazon Kinesis의 실시간 데이터 처리 등에 활용되고 있습니다. 최근에 동기 데이터 처리가 가능해져서 Lambda는 모바일 및 웹 그리고 IoT 백엔드 클라우드 서비스로 각광을 받고 있습니다.

내부 메일링 리스트에서도 Lambda를 이용한 다양한 방법에 대한 토론이 있었는데, 많은 경우 전통적인 데이터 프로세스를 실제로 적용가능하다는 결론을 내렸습니다. 고객들 역시 호스팅이나 확장성의 관리에서 벗어나 애플리케이션에 집중할 수 있어서 매우 좋아하고 있습니다. 지금까지는 개발자들이 서버 기반 앱을 위한 자바스크립트 모듈인 Node.js를 이용해서 Lambda 함수를 만들었습니다.

자바(Java) 언어 지원
오늘 부터 Lambda 함수를 자바 언어를 통해 더 강력한 기능을 수행할 수 있게 되었습니다. 여기에 대해 많은 개발자들의 요구가 있었고, 이를 지원할 수 있게 되어 매우 기쁩니다. Lambda 개발자를 위한 계획 중 추가 프로그래밍 언어 지원의 첫 번째 장이 열린 것입니다.

여러분은 Javs 8 기반 코드를 작성할 수 있으며 (What’s New in JDK 8 참고), 이를 기반한 자바 라이브러리를 사용할 수 있습니다. AWS SDK for Java를 이용하여 AWS API를 호출할 수도 있습니다.

Lambda에 대한 두 가지 라이브러리를 제공합니다: aws-lambda-java-core: Lambda 함수 핸들러, 콘텍스트 객체, aws-lambda-java-events AWS 이벤트를 정의 (Amazon Simple Storage Service (S3), Amazon Simple Notification Service (SNS), Amazon DynamoDB, Amazon KinesisAmazon Cognito). 자세한 사용 방법은 Lambda programming model for Java 문서를 읽어보시면 됩니다.

Lambda 함수는 두 가지 방법을 이용할 수 있는데, 먼저 객체를 입출력하는 높은 수준의 모델(Java POJO나 프리미티브 입출력 형식 사용 가능)을 이용하는 것입니다.

public lambdaHandler( input, Context context) throws IOException; 
public lambdaHandler( input) throws IOException;

POJO를 사용하지 않거나, Lambda 시리얼리제이션 모델이 여러분의 요구를 충족하지 않는 경우, 스트림 모델을 쓸 수 있습니다.

public void lambdaHandler(InputStream input, OutputStream output, Context context) 
  throws IOException;

Lambda 함수가 정의한 클래스에는  인자가 없는 퍼블릭 컨스트럭터(public zero-argument constructor)나  정적 핸들러 메소드를 정의해야 합니다. 다른 방법으로 Lambda 코어 자바 라이브러리 내의 핸들러 인터페이스(RequestHandler::handleRequest or RequestStreamHandler::handleRequest)를 사용할 수도 있습니다.

패키징, 배포 및 업로드
현재 사용하는 개발 도구를 그대로 쓸 수 있습니다. 컴파일된 자바 코드를 Lambda에서 사용하시려면  ZIP 혹은 JAR 파일에 컴파일된 클래스 파일을 넣고 업로드하면 됩니다. (참고. Lambda 패키지 업로드 크기는 50MB로 제한되어 있음). 핸들러 함수는 자바 디렉토리 구조에 따라 구성되어 있어야 하며(예: com/mypackage/MyHandler.class), JAR 파일은 lib 서브 디렉토리에 있어야 합니다. 배포를 쉽게 하기 위해서는 Maven이나 Gradle같은 자바 개발 도구를 사용합니다.

ZIP 파일을 올릴 때는 “java8″이라고 지정해야 합니다. 만약 핸들러 인터페이스을 구현했다면, 클래스명을 넣어야 합니다. 그렇지 않다면 전체 메소드 레퍼런스를 입력합니다. (예: com.mypackage.LambdaHandler::functionHandler).

AWS Toolkit for Eclipse사용하기
AWS Toolkit for Eclipse 플러그인을 이용하면 자동으로 생성해서 ZIP 파일로 업로드할 수 있습니다. AWS 메뉴에서 Lambda 프로젝트를 만들 수 있습니다.

프로젝트에 대한 설명을 넣은 후 도구로 부터 템플릿을 생성할 수 있습니다.

함수를 만들고 나서 한번의 클릭으로 실행할 수 있습니다.

그리고 확인 가능합니다.

지금 부터 사용해 보기
바로 지금 부터 자바로 Lambda 함수를 실행해 볼 수 있습니다.

더 자세히 보시려면 Authoring Lambda Functions in Java 문서를 참고하세요.

Jeff;

이 글은 AWS Lambda Update – Run Java Code in Response to Events의 한국어 번역입니다. AWS Lambda에 대한 자세한 소개는 AWS Lambda – 클라우드에서 코드 실행을 참고하시기 바랍니다.

AWS Lambda – 클라우드에서 코드 실행

AWS는 클라우드에서 실행되는 응용 프로그램의 실행을 더욱 쉽게 하여 개발자들이 코드에만 집중할 수 있게 될 뿐만 아니라 확장성, 신뢰성 및 런타임 효율이 충분히 높은 클라우드 중심의 개발 환경이 필요하다고 생각해 왔습니다.

이를 위해 AWS Lambda미리보기를 오늘 출시합니다. AWS Lambda는 클라우드에서 애플리케이션을 실행하는 새로운 플랫폼으로서 기존 프로그래밍 및 AWS 지식을 활용할 수 있습니다. Lambda를 이용하여 간단하게 Lambda function을 만들고 특정 AWS 리소스에 대한 권한을 주고 Lambda function을 AWS 리소스에 연결할 수 있습니다. Lambda는 Amazon Simple Storage Service (S3) 버킷에 업로드된 파일에 대한 변경이나 Amazon Kinesis 스트림에의 특정 데이터 처리, Amazon DynamoDB 테이블 업데이트 같은 이벤트를 통해 여러분이 미리 업로드한 코드를 자동으로 실행합니다.

Lambda는 전혀 관리가 필요 없는 컴퓨팅 플랫폼입니다. EC2 인스턴스를 만들고 설정할 필요가 없습니다. 운영 체제나 프로그래밍 개발 환경을 설치할 필요도 없습니다. 스케일과 탄력성을 고려할 필요도 없으며, 미리 용량을 요청하거나 확보할 필요도 없습니다. 새로 만들어진 Lambda function은 사용자 측에서 아무 것도 하지 않으면서도 높은 비용 효율에 따라 시간당 수백만 건의 요청을 처리 할 수​​ 있습니다.

좀 더 Lambda를 자세히 살펴 보겠습니다. 프로그래밍 모델 및 런타임 환경을 살펴 보고 나서 프로그래밍 예제를 실행 해 보겠습니다. 이 글을 읽음으로서 Lambda 로드맵에 많은 항목이 있다는 것을 아실 수 있고, 앞으로 계속 이어질 기능 추가를 위한 여행의 작은 첫 걸음입니다.

Lambda의 개념

Lambda의 가장 중요한 개념은 Lambda function입니다. Node.js ( JavaScript로 개발된 이벤트 기반 서버 구현)에서 Lambda function을 실행 할 수 있습니다.

JS 코드를 업로드하기 위해 Lambda function을 만드는 Amazon Lambda에 대한 컨텍스트 정보를 설정합니다. 컨텍스트 정보는 실행 환경(언어, 필요한 메모리 제한 기간이나 IAM role)을 지정하고 코드에서 수행할 함수를 지정합니다. 코드와 메타 데이터는 AWS에서 영구적으로 저장하고 나중에 이름과 ARN(Amazon Resource Name)에서 볼 수 있습니다. 필요한 타사 라이브러리도 업로드에 포함할 수 있습니다 (Lambda function마다 하나의 ZIP 파일 형식입니다).

업로드 후 자신의 Lambda function과 특정 AWS 리소스 (특정 S3 버킷, DynamoDB 테이블 또는 Kinesis 스트림)을 연결합니다. Lambda는 Lambda function에 이벤트 (일반적으로 자원이 변경된 경우 실행)을 함께 연결하도록 합니다.

자원에 변경이 있는 경우, Lambda는 그 자원에 연결된 Lambda function을 실행합니다. 수신 요청을 처리하기 위해 필요한 컴퓨팅 리소스(EC2 인스턴스)를 시작 및 관리합니다. Lambda가 여러분 대신 자원을 관리 할 수​​ 있으며, 더 이상 필요 없어지면 실행이 종료됩니다.

Lambda는 AWS Management Console, AWS SDKAWS Command Line Interface (CLI)에서 접근할 수 있습니다. Lambda API는 모든 문서화되어 있으며 기존 코드 편집기 및 기타 개발 도구를 Lambda에 연결하는 데 사용할 수 있습니다.

Lambda 프로그래밍 모델
Lambda function 연결된 AWS 서비스의 자원이 변경될 때 활성화됩니다. 즉, 지정된 Node.js의 함수 실행이 시작되고 거기에서 작업 처리가 진행됩니다. 함수는 (POST와 함께 전달 된 매개 변수를 통해) JSON 형식의 데이터 구조에 접근합니다. 이 데이터 구조는 Lambda function이 활성화되는 계기가 되는 변경(또는 기타 이벤트)에 대한 자세한 정보를 포함합니다.

Lambda는 자원 변경 속도에 뒤쳐지지 않도록 필요에 따라 Lambda function의 추가 복사본을 활성화합니다. Lambda function은 컴퓨팅 인스턴스에 영구적인 상태를 저장할 수 없기 때문에, 대신 S3 또는 DynamoDB를 사용해야 합니다.

여러분의 코드는 Node.js 및 Linux 환경에서 내재된 기능을 사용할 수 있습니다. 다른 AWS 서비스를 호출하기 위해 AWS SDK for JavaScript in Node.js 를 이용할 수도 있습니다.

Lambda의 실행 환경
각 Lambda function에 지정된 컨텍스트 정보는 함수의 최대 실행 시간을 지정합니다. 일반적으로 짧게 설정되어 있지만 (몇 초 정도에 대부분 실행 가능) 필요에 따라 최대 60초까지 지정할 수 있습니다.

Lambda는 여러 IAM role을 사용하여 Lambda function에 대한 접근과 AWS 리소스를 관리합니다. Invocation role은 Lambda에서 특정 Lambda function을 수행할 권한을 부여합니다. Execution role은 Lambda function의 특정 AWS 리소스에 대한 접근 권한을 부여합니다. 세분화 되어 있는 권한의 조합을 이루기 위해 각각 기능에 대해 별도의 IAM role을 사용할 수 있습니다.

Lambda는 각 Lambda function의 실행을 감시하고 요청 수, 지연 시간, 가용성 및 오류 비율 통계를 Amazon CloudWatch 에 저장합니다. 30 일 동안 보관되며 콘솔에서도 볼 수 있습니다.

이제 Lambda를 사용하시려고 할 때 고려해야 할 몇 가지 사항을 알려드립니다.

  • Lambda function 컨텍스트 정보는 실행에 필요한 메모리 양을 지정합니다. 128MB에서 1​​GB까지 원하는 값을 지정할 수 있습니다. 메모리 설정에 따라 Lambda function이 사용 가능한 인스턴스의 CPU 능력, 네트워크 대역폭, IO 대역폭이 결정됩니다.
  • 각 Lambda function의 시작은 최대 256 프로세스 또는 스레드를 사용할 수 있습니다. 최대 512MB의 로컬 스토리지와 102개 이상의 파일 디스크립터도 사용할 수 있습니다. 또한, 최대 10개의 동시 아웃 바운드 연결을 생성합니다.
  • Lambda는 각 AWS 계정에서 일련의 관리 상의 제한을 부과합니다. 미리보기 기간 동안 동시 실행 요청을 25개까지 처리 할 수​​ 있습니다.

Lambda 소개
이제 관리 콘솔을 사용하여 간단한 Lambda function을 만드는 과정을 살펴 보겠습니다. 앞서 말한대로 SDKCLI 에서 실행할 수 있습니다.

아래 화면은 콘솔에서 내 전체 Lambda function을 표시하고 있습니다.

이제 “Create a Lambda function”을 클릭합니다. 자세한 내용을 모두 입력합니다.

아래와 같이 자신의 Lambda function에 이름을 붙이고 설명 사항을 추가합니다.

JS 코드를 직접 입력하거나 ZIP 파일을 업로드합니다. 콘솔에서 시작할 수 있도록 샘플 코드를 선택할 수 있습니다.

Lambda function을 실행하거나 실행시 어떤 IAM role을 사용할지 여부를 지정합니다.

메모리 요구 사항 조정과 실행 시간 제한도 설정할 수 있습니다.

Lambda function을 만든 후 콘솔에서 반복 편집 테스트 할 수 있습니다. 왼쪽 창에는 Lambda function에 전달 된 JSON 데이터 샘플이 표시되어 있습니다.

Lambda function이 예상대로 실행 되고 있다면, Amazon S3 event notification 같은 이벤트 소스를 연결할 수 있습니다. Lambda function의 시작을 위해 필요한 권한을 S3에 제공하기 때문에 Invocation role을 지정합니다.

앞에서 이야기한 대로 Lambda는 각 Lambda function마다 통계 정보를 수집하고 이를 Amazon CloudWatch에 보냅니다. 콘솔에서 통계를 볼 수 있습니다.

로드맵
앞으로 Lambda에 대한 로드맵을 가지고 있으며, 오늘 그 모든 것을 말씀 드릴 수는 없지만 새로운 AWS 서비스 이벤트에 추가 지원 및 프로그래밍 언어 지원을 추가 할 예정임을 알려드립니다. 언제나 마찬가지로 우리는 고객의 의견을 매우 소중히 생각하고 있습니다. 꼭 Lambda Forum에 의견을 남겨주세요.

이용 가격 및 가능한 지역

마지막으로 요금에 대해 이야기 해보면, Lambda는 차별화 된 요금 체계로 되어 있습니다. 100밀리 초 단위의 컴퓨팅 시간과 개별 요청에 대해서만 지불이 됩니다. Lambda 무료 이용은 한달 100만 요청과 한달 최대 320만 초 컴퓨팅 처리 시간을 포함합니다. 컴퓨팅 처리 시간은 Lambda function마다 할당된 메모리의 총량에 따라 다릅니다. Lambda는 오늘부터 US East (Northern Virginia), US West (Oregon), 그리고 Europe (Ireland) 지역에 한정 미리보기가 가능합니다.

– Jeff;

이 글은 AWS Lambda – Run Code in the Cloud의 한국어 번역입니다.