Créer une couche pour AWS Lambda Python dans Docker

Je voulais enregistrer un module que j'utilise souvent dans l'environnement d'exécution Python d'AWS Lambda avec Lambda Layers, mais je l'ai rendu possible avec Docker car il est difficile de lancer une instance EC2 et de créer un package.

Que sont les couches Lambda

Pour plus d'informations: AWS Lambda Layer --AWS Lambda

Créer une image Docker pour créer un calque

Le runtime Python 3.8 semble fonctionner sur Amazon Linux 2 [^ runtime], vous devez donc normalement configurer une instance EC2 sur Amazon Linux 2 et y créer des couches (bien que Linux puisse être autre chose). , Au moins les couches créées avec macOS ne fonctionnent pas avec AWS Lambda [^ macos]), mais en fait Amazon Linux a une image officielle distribuée sur Docker Hub [^ dockerhub], alors installez Python 3.8 basé sur ce [^ dockerhub] Si vous créez une image Docker, vous n'avez pas besoin de configurer une instance EC2.

[^ runtime]: AWS Lambda Runtime-AWS Lambda [^ macos]: Mac mais je veux AWS Lambda avec Python! --Qiita

Dockerfile


FROM amazonlinux:2

ARG PYTHON_VERSION=3.8.2

RUN yum update -y && yum install -y tar gzip make gcc openssl-devel bzip2-devel libffi-devel \
  && curl https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz | tar xz \
  && cd Python-${PYTHON_VERSION} && ./configure && make && make install \
  && cd - && rm -rf Python-${PYTHON_VERSION}

ADD entrypoint.sh /

RUN yum install -y zip \
  && mkdir /python \
  && chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

Dans Entrypoint, enregistrez un script que pip installe et zippez-le.

entrypoint.sh


#!/bin/bash -eu

SRC=/python
DIST=/dist/layer.zip

pip3 install -t ${SRC} $@
rm -f ${DIST}
zip -q -r ${DIST} ${SRC}

Construisez l'image.

$ docker build . -t bundle-pip-modules-for-aws-lambda-layers:python3.8

Il semble que le nom de l'image soit long, mais tout va bien ici.

Créer un calque à l'aide d'une image Docker

Par exemple, lors de la création d'une couche Lambda qui peut utiliser Pandas.

$ docker run --rm \
    -v $(pwd):/dist \
    bundle-pip-modules-for-aws-lambda-layers:python3.8 \
        pandas

En cas de succès, layer.zip sera créé dans le répertoire courant.

Dans l'exemple ci-dessus, pandas a été spécifié directement, mais puisque tous les arguments qui peuvent être spécifiés par pip3 install peuvent être passés pour les arguments après le nom de l'image, par exemple, montez requirements.txt, puis spécifiez l'option -r. Vous pouvez également combiner de nombreux modules dans une couche avec.

$ echo 'pandas' > requirements.txt
$ docker run --rm \
    -v $(pwd)/requirements.txt:/requirements.txt \
    -v $(pwd):/dist \
    bundle-pip-modules-for-aws-lambda-layers:python3.8 \
        -r requirements.txt

Enregistrer une couche

Téléchargez le fichier "layer.zip" créé.

image.png

Utiliser le calque

À titre d'exemple le plus simple, créons une fonction Lambda qui ne fait que charger des Pandas.

lambda_function.py


import pandas

def lambda_handler(event, context):
    pass

Ajoutez le calque enregistré à la fonction Lambda créée.

image.png

Si vous essayez d'exécuter cette fonction Lambda et qu'aucune erreur ne se produit, c'est OK.

Recommended Posts

Créer une couche pour AWS Lambda Python dans Docker
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
Créer un LINE BOT avec Minette pour Python
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Créer un répertoire avec python
Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework
[AWS] Créer une API avec API Gateway + Lambda
Créez un environnement virtuel avec Python!
Script de création de couche AWS pour python
Notifier HipChat avec AWS Lambda (Python)
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Créer un compte enfant de connect with Stripe en Python
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Je viens de créer un environnement virtuel avec la couche AWS lambda
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
[Python] Créer un écran pour le code d'état HTTP 403/404/500 avec Django
Créer un environnement d'exécution Windows Python avec VScode + Remote WSL
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Créer un décorateur de fonction Python avec Class
Créez une image factice avec Python + PIL.
Créez une illusion rayée avec correction gamma pour Python3 et openCV3
Créons un environnement virtuel pour Python
[Python] Créez un environnement virtuel avec Anaconda
Créons un groupe gratuit avec Python
Créez un sélecteur de couleurs pour la roue chromatique avec Python + Qt (PySide)
Créer un environnement Python + uWSGI + Nginx avec Docker
Créer un compteur de fréquence de mots avec Python 3.4
Connectez-vous à s3 avec AWS Lambda Python
Exécutez une application Web Python avec Docker
Créer un service Web avec Docker + Flask
Créer un référentiel privé avec AWS CodeArtifact
J'ai écrit un script pour créer rapidement un environnement de développement pour Twitter Bot avec AWS Lambda + Python 2.7
Créer un Ubuntu de démarrage USB avec un environnement Python pour l'analyse des données
Comment créer une API de machine learning sans serveur avec AWS Lambda
Créons une fonction de chat avec Vue.js + AWS Lambda + dynamo DB [Paramètres AWS]
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
Exécutez régulièrement des programmes Python sur AWS Lambda
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
Obtenez un billet pour un parc à thème avec python
Procédure de création d'un LineBot réalisé avec Python
Créer un environnement virtuel avec conda avec Python
Créer une page qui se charge indéfiniment avec python
Démarrez un serveur Web Python simple avec Docker
[Python] Créer un environnement de développement Django avec Docker
[Note] Créez une classe de fuseau horaire sur une ligne avec python
Vous pouvez facilement créer une interface graphique même avec Python
Créer un environnement de construction python3 avec Sublime Text3
LINE BOT avec Python + AWS Lambda + API Gateway
Créer une barre de couleurs avec Python + Qt (PySide)
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Étapes pour créer un bot Twitter avec Python
Commandes pour créer un environnement python3 avec virtualenv
Créer un arbre de décision à partir de 0 avec Python (1. Présentation)
Créer une nouvelle page en confluence avec Python