| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- EKS
- 파이썬이미지
- 파이썬영상
- ffmpeg
- Python
- 파이썬영상편집
- 파이참
- 옵셔널체이닝
- delete비교
- EC2
- 영상자동화
- docker
- 노드그룹
- ffprobe
- agentic
- vivecoding
- efs
- 도커컨테이너
- moviepy
- 생성형AI
- truncate비교
- VPC
- lambda
- 파이썬
- mysql성능
- LLM
- AWS
- moviepy2
- null오류
- subprocess
- Today
- Total
씩씩한 개발자
AWS Lambda에 MoviePy 설치하는 방법 (Docker + Layer 구성) - 1편 본문

안녕하세요! 씩씩한 개발자입니다🔥
오늘은 람다에서 moviepy를 사용하는 방법에 대해 이야기 해볼게요.
(이 포스팅은 처음 시도 후 정리해 본 느낌이라, 곧 2편에 더 깔끔하게 정리해서 올릴게요!)
https://strongdev.tistory.com/12
AWS Lambda에 MoviePy 설치하는 방법 (Docker + Layer 구성) - 2편
안녕하세요. 씩씩한 개발자입니다! 이번 포스팅은 지난 'AWS Lambda에 MoviePy 설치하는 방법 (Docker + Layer 구성) - 1편'을 좀 더 명확하게 정리한 글입니다. AWS Lambda를 쓰다보면 반드시 알아야 하는 기
strongdev.tistory.com
- 목적 : aws lambda에서 moviepy 사용하고자 하며, layer로 넣으려고 함
- 환경: 내 PC OS = MAC, AWS OS = aws linux 2
- 문제 : moviepy설치하면 numpy가 함께 자동 설치되는데, 그 자동설치된 numpy version 이슈가 있는지 lambda에서 import가 안된다.
- 해결 방안 :
- EC2에서 linux서버를 띄우고 python package를 설치하는 것이 정석이라고 하는데,, linux서버를 매번 찾아서 할 수는 없는 것.. 그리고 이 역시 잘 워킹하지 않는 케이스 있다고 함.
- 그래서 선택한 것은 docker image 활용하기!
--> 미리 setting 이 잘 되어있는 docker image를 가져와서 container에 띄워 aws lambda가 도는 환경과 동일하게 만든 후 필요한 패키지를 설치한 뒤 zip으로 말아서 lambda layer에 올릴 예정.
✅ 1. Docker image 가져오기
도커 이미지를 가져온 다는 것은 간단하게는
이미 Aws 람다의 환경과 동일하게 세팅되어 있는 것을 불러온다는 뜻입니다.
GPT에 물어봤자 잘 모름..
aws 공식 문서를 제대로 보쟈..!!!
컨테이너 이미지로 Python Lambda 함수 배포 - AWS Lambda
이 명령은 빌드 머신의 아키텍처에 관계없이 컨테이너가 Lambda 실행 환경과 호환되는지 확인하기 위해 --platform linux/amd64 옵션을 지정합니다. ARM64 명령 세트 아키텍처를 사용하여 Lambda 함수를 생
docs.aws.amazon.com
난 3.9 python 을 사용해서, 운영체제 Amazon Linux 2에 해당하는 도커 파일을 가져왔다.
GitHub - aws/aws-lambda-base-images
Contribute to aws/aws-lambda-base-images development by creating an account on GitHub.
github.com
- Docker desktop 에서 Image 가져오기
이미지명을 search해서 최신버전을 pull, run했다. (이전 버전으로 했을 때 오류가 생기더라)
RUN할 때 옵션 설정하는 탭에서 HOST 주소 (로컬에 매핑할 주소)를 입력하자
ex) Users/Desktop/movGen
✅2. 로컬 PC cmd 창에서 Docker container 실행
# 현재 디렉토리로 설정 (docker container 의 host 주소)
cd Desktop/movGen
# pull한 이미지 버전으로 run
docker run -it -v $(pwd):/lambda amazon/aws-lambda-python:latest bash
로컬, 컨테이너 위치를 확인
✅3. Docker container 에서 필요한 라이브러리 설치하기 (moviepy)
우선 결론:
1. 도커 컨테이너 내에서 import Test
Docker container 에서 target 경로 지정하지 않고 설치하면, docker container 내에서 Python 실행 경로를 잡아서 설치함 —> 잘 설치, 임포트 되는지 테스트하기에 적합
—> 테스트 완료 후에는
2. AWS 람다 올리기
- 설치 target을 지정(lambda/python/lib/python3.9/site-packages)하기
- 해당 경로에 패키지가 설치되니 python 부분만 zip으로 말아서 Layer로 등록하면 사용가능
이 과정에서 시행착오를 겪은 점
1) 도커 내에서 import가 안된 이유 --> 패키지 설치 위치를 지정했던 것
- lambda layer에 넣을 때 hierachy (lambda/python/lib/python3.9/site-packages)를 맞추겠다고 한 짓이 오류발생원인
- 이렇게
sh-4.2# cd /lambda
sh-4.2# ls
sh-4.2# pwd
/lambda
sh-4.2# mkdir -p /lambda/python/lib/python3.9/site-packages
sh-4.2# pip3 install moviepy==1.0.3 --target=/lambda/python/lib/python3.9/site-packages
2) 1) 로 인해, container 안에서 package를 실행해도 import 할 module이 없다고 뜬 것
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
# 모듈 import 안되고, pip list로 설치된 패키지를 찾아도 방금 설치한 moviepy, numpy 등 없음
sh-4.2# pip list
Package Version
---------- -------
pip 23.0.1
setuptools 58.1.0
그래서 바꿔서 실행해본 방법은 target을 지정하지 않고 그냥 설치함 --> 도커 내에서 import moviepy 됨 (테스트 완료)
sh-4.2# pip3 install moviepy==1.0.3
Collecting moviepy==1.0.3
Using cached moviepy-1.0.3.tar.gz (388 kB)
Preparing metadata (setup.py) ... done
Collecting decorator<5.0,>=4.0.2
Using cached decorator-4.4.2-py2.py3-none-any.whl (9.2 kB)
Collecting tqdm<5.0,>=4.11.2
Using cached tqdm-4.67.1-py3-none-any.whl (78 kB)
Collecting requests<3.0,>=2.8.1
Using cached requests-2.32.3-py3-none-any.whl (64 kB)
Collecting proglog<=1.0.0
Using cached proglog-0.1.10-py3-none-any.whl (6.1 kB)
Collecting numpy>=1.17.3
Using cached numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (19.5 MB)
Collecting imageio<3.0,>=2.5
Using cached imageio-2.36.1-py3-none-any.whl (315 kB)
Collecting imageio_ffmpeg>=0.2.0
Using cached imageio_ffmpeg-0.5.1-py3-none-manylinux2010_x86_64.whl (26.9 MB)
Collecting pillow>=8.3.2
Using cached pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB)
Requirement already satisfied: setuptools in /var/lang/lib/python3.9/site-packages (from imageio_ffmpeg>=0.2.0->moviepy==1.0.3) (58.1.0)
보면 파일이 설치된 경로가 var/lang/lib/~~이다.
docker container python 실행경로를 자동으로 잡아 그곳에 설치하기 때문에 module import 오류가 발생하지 않고 정상적으로 import할 수 있게 되는 것이다.
docker image자체의 layers에도 ENV LD_LIBRARY_PATH에 해당 경로가 있다.

결론: (반복)
1. 도커 컨테이너 내에서 import Test 하기
Docker container 에서 패키지 설치 target 지정하지 않고 설치하면, docker container 내에서 Python 실행 경로를 잡아서 설치하기에 테스트하기에 적합하고,
2. AWS 람다 올리기
설치 target을 지정(lambda/python/lib/python3.9/site-packages)하면 해당 경로에도 패키지가 설치되니 python 부분만 zip으로 말아서 Layer로 등록하면 사용가능
[참고] python 실행 위치 찾는 법
pull 한 Docker file image의 python의 실행위치는 /var/lang/bin 이고
>>> import os
>>> import sys
>>> sys.executable
'/var/lang/bin/python'
>>> os.path.dirname(sys.executable)
'/var/lang/bin'
그 버전은 python3.9 이다.
sh-4.2# pwd
/var/lang/bin
sh-4.2# cd lib
sh-4.2# ls
libbz2.so libcrypt.so libgdbm_compat.so.4 libgdbm.so.4.0.0 liblzma.so.5.2.2
libpython3.so libreadline.so.6.2 libsqlite3.so.0.8.6 libbz2.so.1 libcrypt.so.1
libgdbm_compat.so.4.0.0 liblzma.so libpython3.9.so libreadline.so libsqlite3.so
pkgconfig libbz2.so.1.0.6 libgdbm_compat.so libgdbm.so.4 liblzma.so.5
libpython3.9.so.1.0 libreadline.so.6 libsqlite3.so.0 python3.9
sh-4.2# cd python3.9/
sh-4.2# ls
abc.py collections distutils html multiprocessing pstats.py _sitebuiltins.pysysconfig.py uuid.py
aifc.py _collections_abc.py doctest.py http netrc.py pty.py site-packagestabnanny.py uu.py
_aix_support.py colorsys.py email idlelib nntplib.py _py_abc.py site.pytarfile.py venv
antigravity.py _compat_pickle.py encodings imaplib.py ntpath.py __pycache__ smtpd.pytelnetlib.py warnings.py
argparse.py compileall.py ensurepip imghdr.py nturl2path.py pyclbr.py smtplib.pytempfile.py wave.py
ast.py _compression.py enum.py importlib numbers.py py_compile.py sndhdr.pytest weakref.py
asynchat.py concurrent filecmp.py imp.py opcode.py _pydecimal.py socket.pytextwrap.py _weakrefset.py
asyncio config-3.9-x86_64-linux-gnu fileinput.py inspect.py operator.py pydoc_data socketserver.pythis.py webbrowser.py
asyncore.py configparser.py fnmatch.py io.py optparse.py pydoc.py sqlite3_threading_local.py wsgiref
base64.py contextlib.py formatter.py ipaddress.py os.py _pyio.py sre_compile.pythreading.py xdrlib.py
bdb.py contextvars.py fractions.py json _osx_support.py queue.py sre_constants.pytimeit.py xml
binhex.py copy.py ftplib.py keyword.py pathlib.py quopri.py sre_parse.pytkinter xmlrpc
bisect.py copyreg.py functools.py lib2to3 pdb.py random.py ssl.pytokenize.py zipapp.py
_bootlocale.py cProfile.py __future__.py lib-dynload __phello__.foo.py reprlib.py statistics.pytoken.py zipfile.py
_bootsubprocess.py crypt.py genericpath.py LICENSE.txt pickle.py re.py stat.pytraceback.py zipimport.py
bz2.py csv.py getopt.py linecache.py pickletools.py rlcompleter.py stringprep.pytracemalloc.py zoneinfo
calendar.py ctypes getpass.py locale.py pipes.py runpy.py string.pytrace.py
cgi.py curses gettext.py logging pkgutil.py sched.py _strptime.pytty.py
cgitb.py dataclasses.py glob.py lzma.py platform.py secrets.py struct.pyturtledemo
chunk.py datetime.py graphlib.py mailbox.py plistlib.py selectors.py subprocess.pyturtle.py
cmd.py dbm gzip.py mailcap.py poplib.py shelve.py sunau.pytypes.py
codecs.py decimal.py hashlib.py _markupbase.py posixpath.py shlex.py symbol.pytyping.py
codeop.py difflib.py heapq.py mimetypes.py pprint.py shutil.py symtable.pyunittest
code.py dis.py hmac.py modulefinder.py profile.py signal.py _sysconfigdata__linux_x86_64-linux-gnu.pyurllib
sh-4.2# pip list
Package Version
------------------ ----------
certifi 2024.12.14
charset-normalizer 3.4.1
decorator 4.4.2
idna 3.10
imageio 2.36.1
imageio-ffmpeg 0.5.1
moviepy 1.0.3
numpy 2.0.2
pillow 11.1.0
pip 23.0.1
proglog 0.1.10
requests 2.32.3
setuptools 58.1.0
tqdm 4.67.1
urllib3 2.3.0
이건 내 로컬의 python 시내 pc -> 3.13
>>> import os
>>> import sys
>>> sys.executable
'/opt/homebrew/opt/python@3.13/bin/python3.13'
>>> os.path.dirname(sys.executable)
'/opt/homebrew/opt/python@3.13/bin'
✅4. python 디렉토리를 압축하여 레이어 생성
sh-4.2# cd /lambda
sh-4.2# ls
python
sh-4.2# zip -r moviepy-layer.zip python
adding: python/ (stored 0%)
adding: python/lib/ (stored 0%)...
✅5. lambda layer에 압축한 파일 upload하기
+ 추가 필요할 수 있는 코드
# 기존 설치 분이 남아 삭제, reset이 필요하다면
rm -rf /lambda/python/lib/python3.9/site-packages/*
# 컨테이너 안에서 zip 하는 package
yum install zip
# 컨테이너 내 파일, 로컬위치로 복사
docker cp <CONTAINER_ID>:/lambda/moviepy-layer.zip /Users/sb/Desktop/layer
# 내가 설치한 파일이 어디에 있는지 찾을 때
sh-4.2# find / -name ffmpeg 2>/dev/null
/opt/bin/ffmpeg
/var/lang/lib/python3.9/site-packages/ffmpeg
/lambda/temp_LXP/src/ffmpeg-release-amd64-static/ffmpeg-7.0.2-amd64-static/ffmpeg
'AWS' 카테고리의 다른 글
| [AWS] VPC 개념 & 생성하기 (Subnet / Routing / IGW) (0) | 2025.12.15 |
|---|---|
| [AWS] IAM이란? 기초 개념 정리! (0) | 2025.12.15 |
| AWS Lambda 컨테이너 이미지로 패키지 설치 (ex.MoviePy) - 2편 (2) | 2025.06.01 |
| AWS EFS 마운트란? 마운트 해제란? (1) | 2025.05.30 |
| Lambda에서 FFmpeg 사용하는 방법: (EFS,EC2 활용) (1) | 2025.05.10 |