[kotlin] 코틀린 웹 서버를 AWS Lambda로 배포하는 방법

AWS Lambda는 서버리스 아키텍처를 구현하는 데 사용되는 서비스로, 코틀린으로 작성된 웹 서버를 배포하여 더 쉽고 간단하게 관리할 수 있습니다. 이 포스트에서는 코틀린으로 작성된 웹 서버를 AWS Lambda에 배포하는 방법을 알아보겠습니다.

1. AWS Lambda 설정

먼저 AWS 콘솔에 로그인하고 AWS Lambda 서비스로 이동합니다.

  1. 새로운 함수를 생성하려면 함수 만들기 버튼을 클릭합니다.
  2. 서버리스 애플리케이션은 대부분 서버리스 애플리케이션 모델을 선택하고, 애플리케이션 이름을 지정합니다.
  3. 런타임 드롭다운에서 “Java 11”을 선택합니다. (Kotlin은 Java 8+에서 작동합니다.)
  4. 실행 역할을 지정하고, 필요한 권한을 부여합니다.

2. 코틀린 웹 서버 코드 작성

코틀린으로 웹 서버를 작성하기 위해 Ktor 프레임워크를 사용합니다.

fun Application.module() {
    routing {
        get("/") {
            call.respondText("Hello, AWS Lambda!", contentType = ContentType.Text.Plain)
        }
    }
}

fun main() {
    embeddedServer(Netty, port = 8080, module = Application::module).start(wait = true)
}

위의 코드는 루트 경로로 요청이 들어올 경우 “Hello, AWS Lambda!”라는 텍스트를 응답하는 간단한 웹 서버를 작성한 예시입니다.

3. 배포 스크립트 작성

AWS Lambda에 배포하기 위해 적절한 배포 스크립트를 작성해야 합니다. AWS CLI를 사용하여 배포할 수 있습니다.

#!/bin/bash

./gradlew build

aws lambda create-function \
    --function-name MyServerlessApp \
    --runtime java11 \
    --zip-file fileb://build/libs/my-serverless-app.jar \
    --handler com.example.myserverlessapp.ApplicationKt::handleRequest \
    --role arn:aws:iam::1234567890:role/lambda-execution-role

aws lambda update-function-configuration \
    --function-name MyServerlessApp \
    --timeout 30 \

aws lambda invoke \
    --function-name MyServerlessApp \
    --payload '{"httpMethod": "GET", "path": "/"}' \
    response.json

위의 스크립트에서는 먼저 프로젝트를 빌드한 다음, aws lambda create-function 명령을 사용하여 함수를 생성합니다. --zip-file은 프로젝트 JAR 파일의 경로를 지정하고, --handler는 AWS Lambda에서 실행될 엔트리 포인트를 지정합니다.

4. 배포

배포 스크립트를 실행하여 AWS Lambda에 코틀린 웹 서버를 배포합니다.

./deploy.sh

5. 테스트

AWS Lambda에 성공적으로 배포되었다면 테스트해보세요. aws lambda invoke 명령을 사용하여 테스트할 수 있습니다.

aws lambda invoke \
    --function-name MyServerlessApp \
    --payload '{"httpMethod": "GET", "path": "/"}' \
    response.json

response.json 파일에 응답이 저장되어 있습니다. 웹 서버가 정상적으로 실행되고 응답이 도착하는지 확인하세요.

참고자료