Canvas 1 Layer 1

re:Invent 2018 - 람다(AWS Lambda)
프로그래밍 언어 루비(Ruby) 공식 지원을 발표

AWS 람다AWS Lambda는 아마존 웹 서비스에서 제공하는 서버리스 애플리케이션 실행 환경입니다. 현재까지 람다에서는 공식적으로 C#, 파워셸PowerShell, 고Go, 자바Java, 자바스크립트JavaScript, 파이썬Python 언어를 지원했습니다. 그리고 re:Invent 2018에서 루비Ruby 언어 지원이 공식적으로 추가되었습니다. 루비 사용자로서 더없이 반가운 소식합니다. 😎

공식적으로 2018년 11월 29일 릴리즈되었으며 서울 리전에서도 지금 바로 사용해볼 수 있습니다. 여기서는 간단한 루비 코드 예제를 람다 함수로 만들고 실행하는 방법을 소개하겠습니다.*

* 아래 에제를 실행하려면 IAM 액세스 키를 발급하고 AWS CLI 설정을 할 필요가 있습니다. 자세한 내용은 44bits의 아마존 웹 서비스 IAM 사용자의 액세스 키 발급 및 관리아마존 웹서비스 커맨드라인 인터페이스(AWS CLI) 기초 글을 참고해주세요.

먼저 작업 디렉터리를 하나 만들고 그 아래에 hello_world.rb 함수를 작성합니다.

람다에서는 greeting 함수를 실행합니다. 단순히 "Hello, world" 문자열을 반환하는 함수입니다. 이 코드를 hello_world.zip 파일로 압축합니다.

$ zip hello_world.zip hello_world.rb

그 다음으로 람다에서 사용할 IAM 역할을 생성해야합니다. 다음 내용을 role.json에 저장합니다. (이미 람다 함수에서 사용하기 위한 역할이 생성되어있다면 그 역할을 대신 사용해도 무방합니다)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Sid": "",
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      }
    }
  ]
}

이 파일로 IAM 역할을 생성합니다.

$ aws iam create-role \
  --role-name lambda-role \
  --assume-role-policy-document file://./role.json

정상적으로 생성이 되면 생성된 리소스에 관련된 정보가 출력될 것입니다. 생성된 IAM의 ARN을 기록해둡니다. 이 ARN은 바로 이어지는 람다 함수 생성 때 사용됩니다.

lambda create-function 명령어로 람다 함수를 생성합니다. 이 때 역할–role에는 위에서 생성한 IAM 역할의 ARN을 지정합니다.

$ lambda create-function \
  --function-name hello_ruby \
  --runtime ruby2.5 \
  --memory-size 128 \
  --handler hello_world.greeting \
  --role <ROLE_ARN> \
  --zip-file fileb://hello_world.zip

이걸로 루비로 작성한 람다 함수 준비를 모두 마쳤습니다. 곧바로 invoke 명령어를 통해 이 람다 함수를 실행해보겠습니다. 실행 결과는 output.txt에 저장됩니다.

$ lambda invoke --function-name hello_ruby output.txt
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}

output.txt의 내용을 출력해보면, greeting 함수의 반환값이 기록된 것을 확인할 수 있습니다.

$ cat output.txt
"Hello, world!"

좀 더 상세한 루비 코드 실행 예제는 AWS 공식 블로그의 글을 참고해주세요.

루비 공식 지원과 함께 커스텀 런터임 지원에 대한 발표도 있었습니다. 현재 awslabs 아래에 러스트RustC++ 런타임이 공개되어있고, 이를 사용하는 것이 가능합니다.