Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Implementa le funzioni Lambda con immagini dei container
Creato da Ram Kandaswamy (AWS)
Riepilogo
AWS Lambda supporta le immagini dei contenitori come modello di distribuzione. Questo modello mostra come distribuire le funzioni Lambda tramite immagini dei contenitori.
Lambda è un servizio di elaborazione serverless e basato sugli eventi che puoi utilizzare per eseguire codice praticamente per qualsiasi tipo di applicazione o servizio di backend senza dover fornire o gestire server. Con il supporto di immagini container per le funzioni Lambda, ottieni i vantaggi di un massimo di 10 GB di spazio di archiviazione per gli elementi dell'applicazione e la possibilità di utilizzare strumenti familiari per lo sviluppo di immagini container.
L'esempio in questo modello utilizza Python come linguaggio di programmazione sottostante, ma è possibile utilizzare altri linguaggi, come Java, Node.js o Go. Per la fonte, prendi in considerazione un sistema basato su Git come GitHub, o Bitbucket GitLab, oppure usa Amazon Simple Storage Service (Amazon S3).
Prerequisiti e limitazioni
Prerequisiti
Amazon Elastic Container Registry (Amazon ECR) attivato
Codice dell'applicazione
Immagini Docker con il client di interfaccia runtime e l'ultima versione di Python
Conoscenza pratica di Git
Limitazioni
La dimensione massima dell'immagine supportata è di 10 GB.
L'autonomia massima per una distribuzione di container basata su Lambda è di 15 minuti.
Architettura
Architettura Target

Si crea un repository Git e si esegue il commit del codice dell'applicazione nel repository.
Il AWS CodeBuild progetto viene attivato dal commit delle modifiche.
Il CodeBuild progetto crea l'immagine Docker e pubblica l'immagine creata su Amazon ECR.
La funzione Lambda viene creata utilizzando l'immagine in Amazon ECR.
Automazione e scalabilità
Questo modello può essere automatizzato utilizzando AWS CloudFormation o operazioni API da un SDK. AWS Cloud Development Kit (AWS CDK) Lambda può scalare automaticamente in base al numero di richieste e puoi ottimizzarlo utilizzando i parametri di concorrenza. Per ulteriori informazioni, consulta la documentazione di Lambda.
Strumenti
Servizi AWS
AWS CloudFormationAWS CloudFormationhelps configuri AWS le risorse, le fornisci in modo rapido e coerente e le gestisci per tutto il loro ciclo di vita su Account AWS e. Regioni AWS Questo modello utilizza AWS CloudFormation Application Composer, che consente di visualizzare e modificare visivamente i modelli. AWS CloudFormation
AWS CodeBuildè un servizio di compilazione completamente gestito che consente di compilare il codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
Amazon Elastic Container Registry (Amazon ECR) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
AWS Lambda è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
Altri strumenti
Docker
è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container. GitHubGitLab
, e Bitbucket sono alcuni dei sistemi di controllo del codice sorgente basati su Git comunemente usati per tenere traccia delle modifiche al codice sorgente.
Best practice
Rendi la tua funzione il più efficiente e ridotta possibile per evitare di caricare file non necessari.
Cerca di avere livelli statici più in alto nell'elenco dei file Docker e posiziona i livelli che cambiano più spesso più in basso. Ciò migliora la memorizzazione nella cache, che migliora le prestazioni.
Il proprietario dell'immagine è responsabile dell'aggiornamento e della correzione dell'immagine. Aggiungete questa cadenza di aggiornamento ai vostri processi operativi. Per ulteriori informazioni, consulta la documentazione relativa ad AWS Lambda.
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un repository Git. | Crea un repository Git che conterrà il codice sorgente dell'applicazione, il Dockerfile e il file. | Developer |
Crea un progetto. CodeBuild | Per utilizzare un CodeBuild progetto per creare l'immagine Lambda personalizzata, procedi come segue:
| Developer |
Modifica il Dockerfile. | Il Dockerfile dovrebbe trovarsi nella directory di primo livello in cui stai sviluppando l'applicazione. Il codice Python dovrebbe trovarsi nella cartella Quando crei l'immagine, usa le immagini ufficiali supportate da Lambda Per i dettagli, consulta la sezione Informazioni aggiuntive. | Developer |
Crea un repository in Amazon ECR. | Crea un repository di contenitori in Amazon ECR. Nel seguente comando di esempio, il nome del repository creato è:
Il repository verrà referenziato nel file. | Amministratore AWS, sviluppatore |
Invia l'immagine ad Amazon ECR. | È possibile utilizzare CodeBuild per eseguire il processo di creazione dell'immagine. CodeBuild necessita dell'autorizzazione per interagire con Amazon ECR e lavorare con S3. Come parte del processo, l'immagine Docker viene creata e inserita nel registro Amazon ECR. Per i dettagli sul modello e sul codice, consulta la sezione Informazioni aggiuntive. | Developer |
Verifica che l'immagine sia nel repository. | Per verificare che l'immagine sia presente nel repository, sulla console Amazon ECR, scegli Repositories. L'immagine dovrebbe essere elencata, con i tag e con i risultati di un rapporto di scansione delle vulnerabilità se tale funzionalità è stata attivata nelle impostazioni di Amazon ECR. Per ulteriori informazioni, consulta la documentazione di AWS. | Developer |
Attività | Descrizione | Competenze richieste |
---|---|---|
Creazione della funzione Lambda | Sulla console Lambda, scegli Crea funzione, quindi scegli Immagine contenitore. Inserisci il nome della funzione e l'URI per l'immagine che si trova nel repository Amazon ECR, quindi scegli Crea funzione. Per ulteriori informazioni, consulta la documentazione di AWS Lambda. | Sviluppatore di app |
Prova la funzione Lambda. | Per richiamare e testare la funzione, scegli Test. Per ulteriori informazioni, consulta la documentazione di AWS Lambda. | Sviluppatore di app |
Risoluzione dei problemi
Problema | Soluzione |
---|---|
La compilazione non ha successo. |
|
Risorse correlate
Informazioni aggiuntive
Modifica il Dockerfile
Il codice seguente mostra i comandi che modifichi nel Dockerfile:
FROM public.ecr.aws/lambda/python:3.xx
# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}
COPY requirements.txt ${LAMBDA_TASK_ROOT}
# install dependencies
RUN pip3 install --user -r requirements.txt
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
Nel FROM
comando, usa il valore appropriato per la versione di Python supportata da Lambda (ad esempio,). 3.12
Questa sarà l'immagine di base disponibile nell'archivio pubblico di immagini Amazon ECR.
Il COPY app.py ${LAMBDA_TASK_ROOT}
comando copia il codice nella directory principale dell'attività, che verrà utilizzata dalla funzione Lambda. Questo comando utilizza la variabile di ambiente, quindi non dobbiamo preoccuparci del percorso effettivo. La funzione da eseguire viene passata come argomento al CMD [ "app.lambda_handler" ]
comando.
Il COPY requirements.txt
comando acquisisce le dipendenze necessarie per il codice.
Il RUN pip install --user -r requirements.txt
comando installa le dipendenze nella directory utente locale.
Per creare l'immagine, esegui il comando seguente.
docker build -t <image name> .
Aggiungi l'immagine in Amazon ECR
Nel codice seguente, sostituiscilo aws_account_id
con il numero di account e sostituiscilo us-east-1
se utilizzi una regione diversa. Il buildspec
file utilizza il numero di CodeBuild build per identificare in modo univoco le versioni delle immagini come valore del tag. Puoi modificarlo in base alle tue esigenze.
Il codice personalizzato buildspec
phases:
install:
runtime-versions:
python: 3.xx
pre_build:
commands:
- python3 --version
- pip3 install --upgrade pip
- pip3 install --upgrade awscli
- sudo docker info
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- ls
- cd app
- docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
- docker container ls
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
- docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
- docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER