Heim  >  Artikel  >  Backend-Entwicklung  >  Erstellen einer AWS-Ebene mit Docker.

Erstellen einer AWS-Ebene mit Docker.

Barbara Streisand
Barbara StreisandOriginal
2024-11-07 10:21:02361Durchsuche

Creating AWS layer with Docker.

Wenn wir in AWS eine Ebene für Lambda-Funktionen erstellen müssen und diese Ebene einige SO-Abhängigkeiten für ihre Vorgänge hat, wir uns also in einem Problem befinden, ist die AWS-Dokumentation dafür, kann unzureichend sein.

In diesem Fall können wir also die fehlenden Binärdateien in der erforderlichen Ebene erstellen.

Nun, für dieses Beispiel werden wir die Demo mit Python 3.x und der Pdf2Image-Bibliothek erstellen

Voraussetzungen

  • Docker installiert
  • Python 3.x
  • AWS CLI konfiguriert (optional)
  • Zugriff auf AWS Lambda

1. Vorbereitung der Umgebung

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

2. Installieren der Python-Abhängigkeiten

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

Beispiel mit pdf2image:

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

3. Dockerfile-Basis

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. Erstellen und extrahieren

# image build
docker build -t lambda-layer .

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

5. Verwenden der Ebene

Nach den vorherigen Schritten können wir wie immer unsere Ebene hochladen und in unsere Projekte importieren

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)}'
        }

Referenzen

  • AWS Lambda Layers-Dokumentation
  • Python-Paketverwaltung
  • Docker-Dokumentation

Das obige ist der detaillierte Inhalt vonErstellen einer AWS-Ebene mit Docker.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn