Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Implementa le funzioni Lambda con immagini dei container - Prontuario AWS

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à.

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

Processo in quattro fasi per creare la funzione Lambda.
  1. Si crea un repository Git e si esegue il commit del codice dell'applicazione nel repository.

  2. Il AWS CodeBuild progetto viene attivato dal commit delle modifiche.

  3. Il CodeBuild progetto crea l'immagine Docker e pubblica l'immagine creata su Amazon ECR.

  4. 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àDescrizioneCompetenze richieste

Crea un repository Git.

Crea un repository Git che conterrà il codice sorgente dell'applicazione, il Dockerfile e il file. buildspec.yaml

Developer

Crea un progetto. CodeBuild

Per utilizzare un CodeBuild progetto per creare l'immagine Lambda personalizzata, procedi come segue:

  1. Accedi a e apri AWS Management Console la CodeBuild console all'indirizzo https://console.aws.amazon.com/codesuite/ codebuild/.

  2. Crea un nuovo progetto. Come sorgente, scegli il repository Git che hai creato. Per informazioni sui diversi tipi di integrazione del repository Git, consulta la documentazione Working with connections.

  3. Conferma che la modalità privilegiata sia abilitata. Per creare immagini Docker, questo è necessario. Altrimenti, l'immagine non verrà creata correttamente.

  4. Fornite i valori per il nome e la descrizione del progetto.

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 cartellasrc.

Quando crei l'immagine, usa le immagini ufficiali supportate da Lambda. In caso contrario, si verificherà un errore di bootstrap che renderà più difficile il processo di compressione.

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 è: cf-demo

aws ecr create-repository --cf-demo

Il repository verrà referenziato nel file. buildspec.yaml

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

Crea un progetto in CodeBuild

AttivitàDescrizioneCompetenze richieste

Crea un repository Git.

Crea un repository Git che conterrà il codice sorgente dell'applicazione, il Dockerfile e il file. buildspec.yaml

Developer

Crea un progetto. CodeBuild

Per utilizzare un CodeBuild progetto per creare l'immagine Lambda personalizzata, procedi come segue:

  1. Accedi a e apri AWS Management Console la CodeBuild console all'indirizzo https://console.aws.amazon.com/codesuite/ codebuild/.

  2. Crea un nuovo progetto. Come sorgente, scegli il repository Git che hai creato. Per informazioni sui diversi tipi di integrazione del repository Git, consulta la documentazione Working with connections.

  3. Conferma che la modalità privilegiata sia abilitata. Per creare immagini Docker, questo è necessario. Altrimenti, l'immagine non verrà creata correttamente.

  4. Fornite i valori per il nome e la descrizione del progetto.

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 cartellasrc.

Quando crei l'immagine, usa le immagini ufficiali supportate da Lambda. In caso contrario, si verificherà un errore di bootstrap che renderà più difficile il processo di compressione.

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 è: cf-demo

aws ecr create-repository --cf-demo

Il repository verrà referenziato nel file. buildspec.yaml

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àDescrizioneCompetenze 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

Crea la funzione Lambda per eseguire l'immagine

AttivitàDescrizioneCompetenze 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

ProblemaSoluzione

La compilazione non ha successo.

  1. Controlla se la modalità privilegiata è attiva per il CodeBuild progetto.

  2. Assicurati che i comandi relativi a Docker abbiano le autorizzazioni necessarie. Sto provando ad aggiungere sudo ai comandi.

  3. Verifica che il ruolo IAM associato a CodeBuild abbia una policy con azioni appropriate per interagire con Amazon ECR, Amazon S3 e i log. CloudWatch

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
PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.