
AWS에서 람다 함수용 레이어를 생성해야 하는데 이 레이어에 해당 작업에 대한 SO 종속성이 있으므로 문제가 발생하는 경우 이에 대한 aws 설명서는 다음과 같습니다. 부족할 수 있습니다.
따라서 이 경우 필요한 레이어에 누락된 바이너리를 빌드할 수 있습니다.
음, 이 예에서는 Python 3.x와 Pdf2Image 라이브러리를 사용하여 데모를 만들겠습니다
전제 조건
- Docker 설치
- 파이썬 3.x
- AWS CLI 구성(선택 사항)
- AWS Lambda에 액세스
1. 환경 준비
1 2 3 4 | mkdir lambda-layer
cd lambda-layer
mkdir python
cd python
|
로그인 후 복사
2. 파이썬 종속성 설치
1 2 3 4 5 6 7 | pip3 install [your_dependencies] \
--platform manylinux2014_x86_64 \
--target . \
--only-binary=:all: \
--implementation cp \
--python-version [TU_VERSION_PYTHON] \
--no-deps
|
로그인 후 복사
pdf2image의 예:
1 2 3 4 5 6 7 | pip3 install pdf2image Pillow \
--platform manylinux2014_x86_64 \
--target . \
--only-binary=:all: \
--implementation cp \
--python-version 3.10 \
--no-deps
|
로그인 후 복사
3. Dockerfile 베이스
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 | FROM ubuntu:22.04 as builder
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
python3.10 \
python3-pip \
binutils \
zip \
[TUS_PAQUETES_ADICIONALES] \
--no-install-recommends \
&& rm -rf / var /lib/apt/lists/*
WORKDIR /lambda
RUN mkdir -p /opt/python/lib/python3.10/site-packages/bin
COPY python/ /opt/python/lib/python3.10/site-packages/
RUN cp [TUS_BINARIOS] /opt/python/lib/python3.10/site-packages/bin/ && \
chmod 755 /opt/python/lib/python3.10/site-packages/bin/*
RUN cd /opt && zip -r9 /lambda/layer.zip python/
FROM alpine:3.18
COPY --from=builder /lambda/layer.zip /
CMD [ "/bin/sh" ]
|
로그인 후 복사
4. 빌드 및 추출
1 2 3 4 5 | # image build
docker build -t lambda-layer .
# extract layer.zip
docker run --rm -v "$(pwd)" :/out lambda-layer cp /layer.zip /out/
|
로그인 후 복사
5. 레이어 사용
이전 단계 후에는 언제나처럼 레이어를 업로드하고 프로젝트로 가져올 수 있습니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import os
import sys
#Configuring paths
SITE_PACKAGES = '/opt/python/lib/python3.10/site-packages'
BIN_DIR = os.path.join(SITE_PACKAGES, 'bin' )
os.environ[ 'PATH' ] = f "{BIN_DIR}:{os.environ['PATH']}"
sys.path.append(SITE_PACKAGES)
#importing dependencies
from pdf2image import [your_import]
def lambda_handler(event, context):
try :
# your code here
return {
'statusCode' : 200,
'body' : 'Success'
}
except Exception as e:
return {
'statusCode' : 500,
'body' : f 'Error: {str(e)}'
}
|
로그인 후 복사
참고자료
- AWS Lambda 계층 설명서
- 파이썬 패키지 관리
- Docker 문서
위 내용은 Docker를 사용하여 AWS 레이어를 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!