코드 배포

Lambda 함수 템플릿에서 시작한 프로젝트에서 코드를 수정하고 배포하여 실행 또는 테스트를 하는 방법을 알아봅니다.

Lambda 함수를 배포하는 방식은 두 가지가 있습니다.

  1. 코드업로드

    1. 코드를 작성해서 배포본 ( .zip, .jar ) 을 만들고 이를 Lambda 함수에 업로드 하여 실행하는 방식

    2. 배포 용량의 제한이 있으며 실행환경 자체에 개입할 수 없기 때문에 비교적 단순한 기능 수행에 활용하기 좋은 방식

  2. Docker 컨테이너

    1. AWS에서 제공하는 Lambda Container Docker 이미지 안에 개발자의 코드와 라이브러리를 추가하여 새로운 이미지를 만들고, 이를 Container 버전의 Lambda 함수에 배포하여 실행하는 방식 ( Lambda Container )

    2. 배포 용량의 제한이 10G 로 늘어나며, 기본 Docker 이미지 위에, 개발된 코드와 라이브러리 이외에도 다양한 기능을 추가로 탑재하여 활용할 수 있음

    3. 읽기 전용 리소스를 배포 이미지에 포함시키면, 코드 실행시 매우 빠르게 접근 및 사용이 가능함

이 챕터에서는 첫번째 방법을 활용해 기초적인 Lambda 사용

코드 직접 업로드 방식

Node.js 프로젝트의 경우, 별도의 컴파일 과정이 필요하지 않기 때문에 코드와 라이브러리가 모두 준비 되면, 이를 zip형식으로 압축 후 배포할 수 있습니다.

[주의] node_modules 같은 기본 라이브러리 폴더가 모두 zip 파일에 포함되어 업로드 되어야 합니다.

업로드를 위한 압축은 탐색기(혹은 파인더) 에서 프로젝트 폴더 바로 아래의 파일들만 zip 파일에 포함 시키는 방식으로 진행합니다. 오른쪽 클릭을 통해 압축할 수 있는 경우, 아래 그림에서 선택된 파일들의 목록에 주목해 주세요.

developer-function 이라는 폴더 바로 아래의 모든 파일이 선택되어 압축 됩니다. 이는 어떤 압축 프로그램을 사용하는 경우도 반드시 지켜야 하는 규칙입니다.

압축이 완료되면 압축 대상이었던 파일과 같은 폴더에 그대로 파일이 생성됩니다. 이때 파일 이름은 어떤 이름이어도 상관이 없습니다.

이제 AWS 콘솔을 사용해서, Lambda 함수에 배포 하는 과정입니다. developer-function 의 상세 정보 화면에서 "에서 업로드" 버튼을 드롭다운하고, .zip 파일 버튼을 선택합니다. 배포할 파일의 크기가 100M 단위 이상으로 커지는 경우에는 S3 를 경유하여 배포가 가능합니다.

이 업로드 창에서 잠시 전 압축한 .zip 파일을 선택하고 업로드 합니다.

업로드가 완료되자마자 Lambda 는 코드를 갱신하고 배포 한뒤에, 인라인 에디터에 코드가 변경되어 리로드가 필요함을 알려줍니다. OK 버튼을 눌러 리로드를 수행해보면, 서버측 소스코드가 변경되어있음을 볼 수 있습니다.

테스트 버튼을 눌러 테스트를 수행해보면 결과는 다음과 같습니다. luxson 라이브러리는 잘 적용되었고, 코드와 함께서버로 배포 되어 잘 실행되었음을 알 수 있습니다.

이 과정을 반복하면서 개발을 진행할 수 있습니다.

AWS CLI 를 이용한 코드 배포

CLI 를 이용한 코드 배포를 하기 위해서는 AWS CLI 의 인증 관련 설정이 이미 완료 되어 있어야 합니다. 이 링크에서 가이드하는 내용에 따라 CLI 를 먼저 준비 합니다.

권한 정책 생성에서 만든 developer-policy 가 다음과 같은 내용을 포함하고 있습니다.

// developer-policy
// 아래 [accountId] 는 aws 계정마다 부여되는 고유한 숫자 구분자입니다.
// 이 구분을 복사하여 사용하는 경우,[accountId] 를 자신의 계정 고유 번호로 바꾸어 사용해야 합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:UpdateFunctionCode",
                "lambda:GetFunction",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:*:[accountId]:log-group:*",
                "arn:aws:lambda:*:[accountId]:function:*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:[accountId]:log-group:*:log-stream:*"
        }
    ]
}

CLI 에서는 두 단계를 거쳐 배포를 진행합니다.

  1. zip 파일을 만드는 과정

  2. Lambda 함수의 코드를 수정하여 배포하는 과정

이 두가지 단계를 모두 포함하는 명령 CLI 구문은 다음과 같습니다.

developer-function 프로젝트의 위치는 c:/test/developer-function 입니다.

// build.bat
cd c:/test
tar -acf output.zip -C c:/test/developer-function *
aws --no-cli-pager ^
    lambda update-function-code ^
    --function-name=developer-function ^
    --zip-file=fileb://output.zip

Last updated