Wie kann ich native AMI-Binärpakete von Amazon Linux 2 mit Lambda verwenden?

Lesedauer: 3 Minute
0

Ich möchte eine AWS-Lambda-Funktion erstellen, die binäre Shared-Library-Abhängigkeiten enthält und auf einem Amazon Linux 2 Amazon Machine Image (AMI) läuft. Gibt es eine Möglichkeit, Softwarepakete von Amazon Linux 2 AMI zu verwenden, ohne das Paket neu zu kompilieren?

Kurzbeschreibung

Das Amazon Linux 2 AMI und das Amazon Linux AMI, die für Lambda-Laufzeiten verwendet werden, unterstützen nicht dieselben nativen Binärpakete.

Um dieses Problem zu umgehen, können Sie zunächst ein Lambda-Container-Image mithilfe der Docker-Befehlszeilenschnittstelle (CLI) erstellen. Verwenden Sie dann das Container-Image, um Ihre Lambda-Funktion auszuführen.

Lösung

Hinweis: Wenn beim Ausführen von Befehlen in AWS Command Line Interface (AWS CLI) Fehler auftreten, stellen Sie sicher, dass Sie die neueste Version von AWS CLI verwenden.

Die folgende Anleitung beschreibt, wie Sie eine Curl-Bibliothek in ein Docker-Image (Lambda-Container-Image) installieren. Weiter wird beschrieben, wie Sie das Image verwenden können, um eine Lambda-Funktion der Python-Version 3.9 auszuführen. Passen Sie die Schritte für andere Programmiersprachen entsprechend an.

1.    Falls noch nicht geschehen, installieren Sie das Docker-CLI.

2.    Erstellen Sie ein Projektverzeichnis mit dem Namen lambda-project.

3.    Verwenden Sie einen Texteditor, um ein Dockerfile im Verzeichnis lambda-project zu erstellen, das folgenden Beispielcode enthält:

FROM public.ecr.aws/lambda/python:3.9

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}

# Install the binary packages using yum install
RUN yum install -y curl

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.lambda_handler" ]

4.    Verwenden Sie einen Texteditor, um eine Datei lambda_function.py im Verzeichnis lambda-project zu erstellen, die folgenden Beispielcode enthält:

import subprocess

def lambda_handler(event, context):
    my_output = subprocess.check_output(["curl","-X", "GET", "https://www.httpbin.org/get"], stderr=subprocess.STDOUT, shell=False)
    print(my_output.decode('utf8'))

Wichtig: Stellen Sie sicher, dass Sie alle folgenden Befehle (Schritte 5–10) im Verzeichnis lambda-project ausführen.

5.    Erstellen Sie das Lambda-Container-Image, indem Sie den folgenden docker build-Befehl in Docker CLI ausführen:

docker build -t hello-world

6.    Testen Sie die Einrichtung des Container-Images, indem Sie dieses lokal starten. Um das Container-Image lokal zu starten, führen Sie den folgenden docker run-Befehl im Docker-CLI aus:

docker run -p 9000:8080 hello-world
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

7.    Authentifizieren Sie Docker bei Ihrer Amazon Elastic Container Registry (Amazon ECR)-Registrierung, indem Sie folgenden get-login-password-Befehl in AWS CLI ausführen:

Wichtig: Ersetzen Sie us-east-1 durch Ihre AWS-Region. Ersetzen Sie 123456789012 durch Ihre AWS-Konto-ID.

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

Weitere Informationen finden Sie unter Verwendung eines Autorisierungs-Tokens im Amazon-ECR-Entwicklerhandbuch.

8.    Erstellen Sie ein Amazon-ECR-Repository, indem Sie folgenden create-repository-Befehl in AWS CLI ausführen:

Wichtig: Ersetzen Sie hello-world durch den Namen Ihres Amazon-ECR-Repositorys.

aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE

Weitere Informationen finden Sie unter Schritt 3: Erstellen Sie ein privates Repository im Amazon-ECR-Entwicklerhandbuch.

9.    Taggen Sie Ihr Container-Image, um es in Ihr Repository zu übertragen, indem Sie folgenden docker tag-Befehl im Docker-CLI ausführen:

Wichtig: Ersetzen Sie 123456789012 durch Ihre AWS-Konto-ID. Ersetzen Sie us-east-1 durch Ihre AWS-Region.

docker tag  hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

10.    Pushen Sie Ihr Container-Image in Ihr Repository, indem Sie folgenden docker push-Befehl im Docker-CLI ausführen:

Wichtig: Ersetzen Sie 123456789012 durch Ihre AWS-Konto-ID. Ersetzen Sie us-east-1 durch Ihre AWS-Region.

docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

Ihr Container-Image befindet sich jetzt in Ihrem Amazon-ECR-Repository. Weitere Informationen finden Sie unter Schritt 4: Pushen eines Images im Amazon-ECR-Entwicklerhandbuch.

11.    Erstellen und testen Sie Ihre Lambda-Funktion mit dem Container-Image, das Sie erstellt haben. Weitere Informationen finden Sie unter Erstellen von Lambda-Container-Images im AWS-Lambda-Entwicklerhandbuch.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren