Erstellen Sie in Docker eine Ebene für AWS Lambda Python

Ich wollte ein Modul registrieren, das häufig in der Python-Laufzeit von AWS Lambda mit Lambda Layers verwendet wird. Da es jedoch schwierig ist, eine EC2-Instanz zu starten und ein Paket zu erstellen, habe ich dies mit Docker ermöglicht.

Was sind Lambda-Schichten?

Weitere Informationen: AWS Lambda Layer --AWS Lambda

Erstellen Sie ein Docker-Image, um eine Ebene zu erstellen

Die Python 3.8-Laufzeit scheint unter Amazon Linux 2 [^ Laufzeit] zu laufen, daher sollten Sie normalerweise eine EC2-Instanz unter Amazon Linux 2 einrichten und Ebenen darin erstellen (obwohl Linux alles andere sein könnte). Zumindest mit macOS erstellte Layer funktionieren nicht mit AWS Lambda [^ macos]), aber tatsächlich hat Amazon Linux ein offizielles Image, das auf Docker Hub [^ dockerhub] verteilt wird. Installieren Sie Python 3.8 basierend auf diesem [^ dockerhub]. Wenn Sie ein Docker-Image erstellen, müssen Sie keine EC2-Instanz einrichten.

[^ Laufzeit]: AWS Lambda Runtime-AWS Lambda [^ macos]: Mac, aber ich möchte Lambda mit Python AWS! --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"]

Registrieren Sie in Entrypoint ein Skript, das installiert und komprimiert wird.

entrypoint.sh


#!/bin/bash -eu

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

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

Erstellen Sie das Bild.

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

Es scheint, dass der Bildname lang ist, aber hier ist alles in Ordnung.

Erstellen Sie eine Ebene mit einem Docker-Image

Zum Beispiel beim Erstellen einer Lambda-Ebene, die Pandas verwenden kann.

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

Bei Erfolg wird "layer.zip" im aktuellen Verzeichnis erstellt.

Im obigen Beispiel wurde "pandas" direkt angegeben, aber da alle Argumente, die von "pip3 install" angegeben werden können, für die Argumente nach dem Image-Namen übergeben werden können, geben Sie beispielsweise "require.txt" ein und geben Sie dann die Option "-r" an. Sie können auch viele Module zu einer Ebene mit kombinieren.

$ 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

Registrieren Sie eine Ebene

Laden Sie die erstellte layer.zip hoch.

image.png

Ebene verwenden

Als einfachstes Beispiel erstellen wir eine Lambda-Funktion, die nur Pandas lädt.

lambda_function.py


import pandas

def lambda_handler(event, context):
    pass

Fügen Sie die registrierte Ebene zur erstellten Lambda-Funktion hinzu.

image.png

Wenn Sie versuchen, diese Lambda-Funktion auszuführen und kein Fehler auftritt, ist dies in Ordnung.

Recommended Posts

Erstellen Sie in Docker eine Ebene für AWS Lambda Python
[Für Python] Erstellen Sie schnell eine Upload-Datei in AWS Lambda Layer
Erstellen Sie mit Minette für Python einen LINE BOT
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie eine Python-Version der Lambda-Funktion (+ Lambda-Schicht) mit Serverless Framework
[AWS] API mit API Gateway + Lambda erstellen
Erstellen Sie eine virtuelle Umgebung mit Python!
AWS Layer Creation Script für Python
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Erstellen Sie ein untergeordnetes Konto für die Verbindung mit Stripe in Python
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Ich habe gerade eine virtuelle Umgebung mit der AWS-Lambda-Schicht erstellt
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
[Python] Erstellen Sie mit Django einen Bildschirm für den HTTP-Statuscode 403/404/500
Erstellen Sie eine Windows Python-Ausführungsumgebung mit VScode + Remote WSL
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Erstellen Sie mit Class einen Python-Funktionsdekorator
Erstellen Sie mit Python + PIL ein Dummy-Image.
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Erstellen wir eine virtuelle Umgebung für Python
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie mit Python + Qt (PySide) einen Farbwähler für das Farbrad.
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Führen Sie eine Python-Webanwendung mit Docker aus
Erstellen Sie einen Webdienst mit Docker + Flask
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Erstellen wir eine Chat-Funktion mit Vue.js + AWS Lambda + Dynamo DB [AWS-Einstellungen]
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
[AWS SAM] Erstellen Sie eine API mit DynamoDB + Lambda + API Gateway
Holen Sie sich ein Ticket für einen Themenpark mit Python
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Starten Sie mit Docker einen einfachen Python-Webserver
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
LINE BOT mit Python + AWS Lambda + API Gateway
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Erstellen Sie mit Docker eine Umgebung aus Nginx + uWSGI + Python (Django)
Schritte zum Erstellen eines Twitter-Bots mit Python
Befehle zum Erstellen einer Python3-Umgebung mit virtualenv
Erstellen Sie mit Python einen Entscheidungsbaum von 0 (1. Übersicht)
Erstellen Sie eine neue Seite im Zusammenfluss mit Python