>  기사  >  백엔드 개발  >  Docker를 사용하여 AWS 레이어를 생성합니다.

Docker를 사용하여 AWS 레이어를 생성합니다.

Barbara Streisand
Barbara Streisand원래의
2024-11-07 10:21:02361검색

Creating AWS layer with Docker.

AWS에서 람다 함수용 레이어를 생성해야 하는데 이 레이어에 해당 작업에 대한 SO 종속성이 있으므로 문제가 발생하는 경우 이에 대한 aws 설명서는 다음과 같습니다. 부족할 수 있습니다.

따라서 이 경우 필요한 레이어에 누락된 바이너리를 빌드할 수 있습니다.

음, 이 예에서는 Python 3.x와 Pdf2Image 라이브러리를 사용하여 데모를 만들겠습니다

전제 조건

  • Docker 설치
  • 파이썬 3.x
  • AWS CLI 구성(선택 사항)
  • AWS Lambda에 액세스

1. 환경 준비

mkdir lambda-layer
cd lambda-layer
mkdir python
cd python

2. 파이썬 종속성 설치

pip3 install [your_dependencies] \
    --platform manylinux2014_x86_64 \
    --target . \
    --only-binary=:all: \
    --implementation cp \
    --python-version [TU_VERSION_PYTHON] \
    --no-deps

pdf2image의 예:

pip3 install pdf2image Pillow \
    --platform manylinux2014_x86_64 \
    --target . \
    --only-binary=:all: \
    --implementation cp \
    --python-version 3.10 \
    --no-deps

3. Dockerfile 베이스

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. 빌드 및 추출

# image build
docker build -t lambda-layer .

# extract layer.zip
docker run --rm -v "$(pwd)":/out lambda-layer cp /layer.zip /out/

5. 레이어 사용

이전 단계 후에는 언제나처럼 레이어를 업로드하고 프로젝트로 가져올 수 있습니다

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.