Come posso usare i pacchetti binari nativi dell'AMI Amazon Linux 2 con Lambda?

4 minuti di lettura
0

Voglio creare una funzione AWS Lambda che contenga le dipendenze delle librerie binarie condivise e venga eseguita su Amazon Machine Image (AMI) Amazon Linux 2. È possibile utilizzare i pacchetti software AMI Amazon Linux 2 senza ricompilare il pacchetto?

Breve descrizione

L'AMI Amazon Linux 2 e l'AMI Amazon Linux utilizzate per i runtime Lambda non supportano tutti gli stessi pacchetti binari nativi.

Come soluzione alternativa, puoi prima creare un'immagine di container Lambda utilizzando l'interfaccia della linea di comando di Docker (CLI). Quindi, usa l'immagine di container per eseguire la tua funzione Lambda.

Soluzione

Nota: se visualizzi errori durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Le seguenti istruzioni descrivono come installare una libreria curl in un'immagine Docker (immagine del container Lambda). In seguito viene spiegato come utilizzare l'immagine per eseguire una funzione Lambda della versione 3.9 di Python. Per altri linguaggi di programmazione, adatta i passaggi di conseguenza.

1.    Se non l'hai già fatto, installa la CLI di Docker.

2.    Crea una directory di progetto denominata lambda-project.

3.    Usa un editor di testo per creare un Dockerfile nella directory lambda-project che includa il seguente codice di esempio:

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.    Utilizza un editor di testo per creare un file lambda_function.py nella directory lambda-project che includa il seguente codice di esempio:

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

Importante: assicurati di eseguire tutti i seguenti comandi (passaggi 5-10) nella directory lambda-project.

5.    Crea l'immagine di container Lambda eseguendo il seguente comando docker build della CLI di Docker:

docker build -t hello-world

6.    Verifica la configurazione dell'immagine di container avviandola localmente. Per avviare l'immagine di container localmente, esegui il seguente comando docker run della CLI di Docker:

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

7.    Autentica Docker nel tuo registro Amazon Elastic Container Registry (Amazon ECR) eseguendo il comando get-login-password di AWS CLI:

Importante: Sostituisci us-east-1 con la tua regione AWS. Sostituisci 123456789012 con l'ID del tuo account AWS.

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

Per ulteriori informazioni, consulta Utilizzo di un token di autorizzazione nella Guida per l'utente di Amazon ECR.

8.    Crea un repository Amazon ECR eseguendo il seguente comando create-repository di AWS CLI:

Importante: sostituisci hello-world con il nome del tuo repository Amazon ECR.

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

Per ulteriori informazioni, consulta il Passaggio 3: Crea un repository nella Guida per l'utente di Amazon ECR.

9.    Tagga l'immagine di container da inviare al tuo repository eseguendo il seguente comando docker tag della CLI di Docker:

Importante: sostituisci 123456789012 con l'ID del tuo account AWS. Sostituisci us-east-1 con la tua regione AWS.

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

10.    Invia l'immagine di container al tuo repository eseguendo il seguente comando docker push della CLI di Docker:

Importante: sostituisci 123456789012 con l'ID del tuo account AWS. Sostituisci us-east-1 con la tua regione AWS.

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

L'immagine di container è ora nel tuo repository Amazon ECR. Per ulteriori informazioni, consulta il Passaggio 4: Invia un'immagine ad Amazon ECR nella Guida per l'utente di Amazon ECR.

11.    Crea e testa la tua funzione Lambda utilizzando l'immagine di container che hai creato. Per istruzioni, consulta Creazione di funzioni Lambda definite come immagini di container nella Guida per sviluppatori di Lambda.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa