씩씩한 개발자

AWS Lambda 컨테이너 이미지로 패키지 설치 (ex.MoviePy) - 2편 본문

AWS

AWS Lambda 컨테이너 이미지로 패키지 설치 (ex.MoviePy) - 2편

씩씩한 개발자 2025. 6. 1. 17:10

 
안녕하세요. 씩씩한 개발자입니다!
 
이번 포스팅은 지난 'AWS Lambda에 MoviePy 설치하는 방법 (Docker + Layer 구성) - 1편'을 좀 더 명확하게 정리한 글입니다. 
 
AWS Lambda를 쓰다보면 반드시 알아야 하는 기능이 'Layer' 입니다.
 
Layer 기능을 통해 외부 Python 패키지를 람다에서 사용할 수 있죠.
처음엔 그냥 PC에 설치한 레이어를 바로 zip해서 업로드 해서 사용했는데, 문제가 없었어요.
하지만 이번에 moviepy를 Layer로 올리는데 기존 방식은 잘 안되더라구요.
 
알아보니, 가장 확실한 방법은 Lambda와 동일한 OS 환경에서 직접 패키지를 설치하고 zip으로 묶는 방식입니다.
 
이를 위해
Lambda 공식 Docker 이미지를 사용해 컨테이너를 띄우고, (cmd, 터미널)
②내부에서 필요한 패키지를 설치한 뒤, (도커 데스크톱, 터미널)
③로컬에서 압축하는 과정을 정리해보겠습니다.(cmd, 터미널)


 
아마존의 Lambda 개발자 가이드 

 

컨테이너 이미지로 Python Lambda 함수 배포 - AWS Lambda

이 명령은 빌드 머신의 아키텍처에 관계없이 컨테이너가 Lambda 실행 환경과 호환되는지 확인하기 위해 --platform linux/amd64 옵션을 지정합니다. ARM64 명령 세트 아키텍처를 사용하여 Lambda 함수를 생

docs.aws.amazon.com

 

1. Lambda용 Docker 컨테이너 실행

아래 명령어를 통해 Lambda와 동일한 환경의 컨테이너를 실행합니다.
cmd, 명령 프롬프트, 터미널에서 실행하시면 됩니다.
 

여기서는 /Users/Desktop/lambda-test/lambda 디렉토리를 컨테이너의 /lambda 경로로 마운트합니다.

 
amazon/aws-lambda-python:3.13.2025.05.05.05-x86_64

aws lambda, 파이썬 3.13 버전에 맞는 컨테이너이미지를 그대로 가져올 겁니다

docker run \
  --hostname=lambda-build \
  --env=LANG=en_US.UTF-8 \
  --env=TZ=:/etc/localtime \
  --env=PATH=/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin \
  --env=LD_LIBRARY_PATH=/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib \
  --env=LAMBDA_TASK_ROOT=/var/task \
  --env=LAMBDA_RUNTIME_DIR=/var/runtime \
  --volume=/Users/Desktop/lambda-test/lambda:/lambda \
  --network=bridge \
  --workdir=/lambda \
  --restart=no \
  --runtime=runc \
  -it \
  amazon/aws-lambda-python:3.13.2025.05.04.05-x86_64 \
  sh

--volume: Host Path
--workdir: Container Path
 

Host Path: 로컬의 패키지를 저장할 실제 폴더 경로 (내 PC의 경로)
Container Path: 컨테이너 내 작업 디렉토리. 여기서 /lambda/python 하위에 패키지를 설치할 것입니다.

 


2. 컨테이너 내부에서 패키지 설치

Docker Desktop에서 해당 컨테이너를 exec 또는 터미널을 통해 진입하면, 다음과 같은 sh 프롬프트로 접근할 수 있습니다.

sh-5.2# pwd
/lambda

sh-5.2# mkdir -p /lambda/python
sh-5.2# cd /lambda/python

# moviepy 설치
sh-5.2# python3 -m pip install moviepy -t .

# 추가적으로 필요한 requests 관련 패키지 설치
sh-5.2# python3 -m pip install requests certifi idna urllib3 charset_normalizer -t .

 

이 과정을 통해 컨테이너 내의 /lambda/python 디렉토리에 필요한 패키지가 설치되며,

이는 자동으로 로컬 /Users/Desktop/lambda-test/lambda/python 디렉토리에 반영됩니다.

 
처음 도커 컨테이너 띄울 때 host path와 contianer path가 이렇게 적용 되는 것입니다.
 
패키지 설치가 잘 되었는지 import test 해봐야 합니다. python3

sh-5.2# python3
Python 3.13.3 (main, Apr 17 2025, 14:44:45) [GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import os
>>>
>>> import moviepy
>>>

 
 
import에 이상이 없네요.
 


3. 로컬에서 zip 파일로 압축

패키지 설치가 완료되면 컨테이너에서 나와 로컬 터미널로 돌아옵니다.
아래 명령어로 AWS Lambda Layer에 업로드 가능한 zip 파일을 생성합니다.

cd /Users/Desktop/lambda-test/lambda
zip -r9 ../moviepy-layer.zip python

압축된 moviepy-layer.zip 파일은 AWS Lambda 콘솔에서 Layer → Create layer를 통해 업로드할 수 있습니다.

 
/Users/Desktop/lambda-test/lambda 의 내부 구조는 아래와 같아요.
moviepy와 관련해서 필요한 다른 패키지들 까지 같이 설치해 둔 상태입니다.


4. 마무리

도커 이미지를 활용하는 이 방식은 로컬 환경의 종속성 문제 없이, 실제 AWS Lambda에서 사용되는 환경과 동일한 조건으로 패키지를 설치할 수 있다는 장점이 있습니다.
 
기존에 간단한 패키지들을 설치할 때는 문제가 없었는데, 이번에 특히 moviepy, numpy, PIL 등 복잡한 종속성을 가진 패키지들을 Layer로 구성할 때 보니 매우 유용하더라구요. 앞으로도 이 방식으로 해야겠어요.
 

추가적으로 영상, 음성 파일을 다룰 때 반드시 필요한 것이 ffmpeg 실행 바이너리인데요,

layer에 포함하려고 하니, 용량 이슈로 업로드가 어렵더라구요. 
 
그래서 찾은 방식이 EFS를 통해 ffmpeg 을 마운트해서 사용하는 방식 입니다.
이 방법은 아래의 게시글에서 확인하실 수 있습니다~.
 
 
 

 

AWS Lambda - EFS - EC2 | ffmpeg 파일 마운트하고 람다에서 사용하기

안녕하세요. 씩씩한 개발자입니다🔥 오늘의 주제는 아래와 같습니다. Lambda 용량의 한계로 인하여 올리지 못하는 파일을 EFS와 EC2를 사용해서 올리고 Lambda에서 사용하는 방법 [배경지식1] Lambda La

strongdev.tistory.com

 

반응형