Maison  >  Article  >  développement back-end  >  Création d'une couche AWS avec Docker.

Création d'une couche AWS avec Docker.

Barbara Streisand
Barbara Streisandoriginal
2024-11-07 10:21:02361parcourir

Creating AWS layer with Docker.

Lorsque nous devons créer une couche dans AWS, pour les fonctions lambda, et que cette couche a des dépendances SO pour ses opérations, nous sommes donc dans un problème, la documentation aws pour cela, peut être insuffisant.

Donc, dans ce cas, nous pouvons construire les binaires manquants dans la couche requise.

Eh bien, pour cet exemple, nous allons faire la démo en utilisant Python 3.x et la bibliothèque Pdf2Image

Conditions préalables

  • Docker installé
  • Python 3.x
  • AWS CLI configuré (facultatif)
  • Accéder à AWS Lambda

1. préparer l’environnement

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

2. Installation des dépendances python

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

Exemple avec pdf2image :

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

3. Base de fichiers Docker

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. Construire et extraire

# image build
docker build -t lambda-layer .

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

5. utiliser le calque

Après les étapes précédentes, nous pouvons télécharger notre calque comme toujours et l'importer dans nos projets

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

Références

  • Documentation des couches AWS Lambda
  • Gestion des packages Python
  • Documentation Docker

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn