AWS 람다, 프로그래밍 언어 최신 버전 추가 지원
파이썬 3.8, 노드 12.0, 자바 11

AWS 람다AWS Lambda는 별도의 컴퓨팅 환경을 준비하지 않고 프로그램을 실행할 수 있는 AWSAmazon Web Service를 대표하는 서비리스 서비스입니다. 현재 AWS 람다에서는 자바Java, 노드jsNode.js, 파이썬Python, 루비Ruby, 고Go, 닷넷.NET를 공식 지원하고 있습니다. 또한 커스텀 런타임을 사용해 공식 지원하지 않는 언어나 버전을 사용하는 것도 가능합니다.

지난 11월 18일 AWS에서는 AWS 람다에서 자바Java 11, 노드jsNode.js 12, 파이썬Python 3.8을 공식 지원한다고 발표했습니다.

새로운 버전 지원과 함께 주요한 변화 중 하나는 람다가 실행되는 환경이 아마존 리눅스Amazon Linux에서 아마존 리눅스 2Amazon Linux 2로 변경되고 있다는 점입니다. 이미 노드js의 경우는 이전 지원 버전인 10 버전부터 아마존 리눅스 기반에서 동작하고 있었습니다. 이번에 지원되는 새로운 버전들은 모두 아마존 리눅스 2기반에서 동작합니다. 아마존 리눅스 2기반 람다가 실행되는 환경은 다음과 같습니다.

위의 AMI를 사용하면 실제 람다가 동작하는 것과 같은 환경을 테스트해보는 게 가능합니다.

람다 실행환경에 대한 더 자세한 내용은 런타임 문서를 확인해주세요.

서버리스(Serverless) 프레임워크로 노드js(Node.js) 12 코드 실행해보기

서버리스Serverless 프레임워크로 새로운 버전의 노드js를 실행하는 간단한 예제를 만들어보겠습니다. AWS 설정과 서버리스는 이미 준비되어있다고 가정하겠습니다.

먼저 serverless 명령어로 프로젝트를 생성합니다.

$ serverless create -t aws-nodejs -p node12
            Serverless: Generating boilerplate...
            Serverless: Generating boilerplate in "/Users/ben/Dropbox/workspace/hubtee/perpetual/node12"
             _______                             __
            |   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
            |   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
            |____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
            |   |   |             The Serverless Application Framework
            |       |                           serverless.com, v1.54.0
             -------'

            Serverless: Successfully generated boilerplate for template: "aws-nodejs"

프로젝트에는 handler.jsserverless.yml 파일이 생성됩니다. 먼저 serverless.yml 파일에서 프로바이더provider의 런타임runtime을 노드js 12 버전으로 지정해줍니다.

service: node12
            
            provider:
              name: aws
              runtime: nodejs12.x
            
            functions:
              hello:
                handler: handler.hello

다음으로 handler.js 파일을 수정해줍니다. process 라이브러리를 사용해서 코드 생애서 버전을 반환하도록 하겠습니다. 이를 통해 람다에서 실제로 실행되는 노드js의 버전을 확인할 수 있습니다.

'use strict';
            
            const process = require('process')
            
            module.exports.hello = async event => {
              return {
                statusCode: 200,
                body: `Node.js Runtime Version: ${ process.version }`
              };
            };

이제 준비는 끝났습니다. 람다 함수를 배포하고 실행해봅니다.

$ sls deploy
            $ sls invoke --function hello | jq .
            {
              "statusCode": 200,
              "body": "Node.js Runtime Version: v12.13.0"
            }

body에 노드js의 버전이 출력된 것을 확인할 수 있습니다. 현재 코드를 실행하고 있는 노드js 버전은 12.13이네요.