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à.
Creare una funzione Lambda utilizzando un'immagine del contenitore
Il codice della AWS Lambda funzione è costituito da script o programmi compilati e dalle relative dipendenze. Utilizza un pacchetto di implementazione per distribuire il codice della funzione a Lambda. Lambda supporta due tipi di pacchetti di implementazione: immagini di container e archivi di file .zip.
Esistono tre modi per creare un'immagine di container per una funzione Lambda:
-
Usare un'immagine AWS di base per Lambda
Le immagini di base AWS sono precaricate con un runtime in linguaggio, un client di interfaccia di runtime per gestire l'interazione tra Lambda e il codice della funzione e un emulatore di interfaccia di runtime per i test locali.
-
Utilizzo di un'immagine di AWS base solo per il sistema operativo
AWS Le immagini di base solo
per il sistema operativo contengono una distribuzione Amazon Linux e l'emulatore di interfaccia di runtime . Queste immagini vengono comunemente utilizzate per creare immagini di container per linguaggi compilati, come Go e Rust, e per un linguaggio o una versione di linguaggio per cui Lambda non fornisce un'immagine di base, come Node.js 19. Puoi anche utilizzare immagini di base solo per il sistema operativo per implementare un runtime personalizzato. Per rendere l'immagine compatibile con Lambda, devi includere nell'immagine un client di interfaccia di runtime per il tuo linguaggio. -
Utilizzo di un'immagine non AWS di base
È possibile utilizzare un'immagine di base alternativa da un altro registro del container, come ad esempio Alpine Linux o Debian. Puoi anche utilizzare un'immagine personalizzata creata dalla tua organizzazione. Per rendere l'immagine compatibile con Lambda, devi includere nell'immagine un client di interfaccia di runtime per il tuo linguaggio.
Suggerimento
Per ridurre il tempo necessario all'attivazione delle funzioni del container Lambda, consulta Utilizzo di compilazioni a più fasi
Per creare una funzione Lambda da un'immagine del contenitore, crea l'immagine localmente e caricala in un repository Amazon Elastic Container Registry ECR (Amazon). Quindi, specifica il repository URI quando crei la funzione. Il ECR repository Amazon deve corrispondere alla funzione Regione AWS Lambda. È possibile creare una funzione utilizzando un'immagine in un AWS account diverso, purché l'immagine si trovi nella stessa regione della funzione Lambda. Per ulteriori informazioni, consulta Autorizzazioni Amazon ECR per più account.
Nota
Lambda non supporta gli ECR FIPS endpoint Amazon per le immagini dei container. Se il tuo repository URI includeecr-fips
, stai utilizzando un endpoint. FIPS Esempio: 111122223333.dkr.ecr-fips.us-east-1.amazonaws.com
.
Questa pagina spiega i tipi di immagini di base e i requisiti per la creazione di immagini di container compatibili con Lambda.
Nota
Non è possibile modificare il tipo di pacchetto di distribuzione (.zip o immagine del contenitore) per una funzione esistente. Ad esempio, non è possibile convertire una funzione di immagine del contenitore per utilizzare un archivio di file.zip. È necessario creare una nuova funzione.
Argomenti
Requisiti
Installa la AWS Command Line Interface (AWS CLI) versione 2 e il CLIDocker
-
L'immagine di container deve implementare l'Utilizzo del runtime Lambda API per runtime personalizzati. I client dell'interfaccia di runtime AWS open source implementano. API È possibile aggiungere un client di interfaccia di runtime all'immagine di base preferita per renderla compatibile con Lambda.
-
L'immagine di container deve essere in grado di funzionare su un filesystem di sola lettura. Il codice della funzione può accedere a una directory
/tmp
scrivibile con spazio di storage compreso tra 512 MB e 10.240 MB con incrementi di 1 MB. -
L'utente Lambda predefinito deve essere in grado di leggere tutti i file necessari per eseguire il codice della funzione. Lambda segue le best practice di sicurezza tramite la definizione di un utente Linux predefinito con autorizzazioni meno privilegiate. Ciò significa che non è necessario specificare a USER
nel Dockerfile. Verifica che il codice dell'applicazione non si basi su file che altri utenti Linux non possono eseguire. -
Lambda supporta solo le immagini di container basate su Linux.
-
Lambda fornisce immagini di base multi-architettura. Tuttavia, l'immagine creata per la tua funzione deve essere destinata a una sola delle architetture. Lambda non supporta funzioni che utilizzano immagini container multi-architettura.
Usare un'immagine AWS di base per Lambda
È possibile utilizzare una delle immagini di base AWS
AWS fornisce periodicamente aggiornamenti alle immagini di AWS base per Lambda. Se il tuo Dockerfile include il nome dell'immagine nella FROM proprietà, il tuo client Docker estrae la versione più recente dell'immagine dal repository Amazon. ECR
Node.js 20, Python 3.12, Java 21,. NET8, Ruby 3.3 e le immagini di base successive si basano sull'immagine contenitore minima di Amazon Linux 2023. Le immagini di base precedenti utilizzavano Amazon Linux 2. AL2023 offre diversi vantaggi rispetto ad Amazon Linux 2, tra cui un ingombro di distribuzione ridotto e versioni aggiornate di librerie come. glibc
AL2Le immagini basate su 023 utilizzano microdnf
(symlinked asdnf
) come gestore di pacchetti anzichéyum
, che è il gestore di pacchetti predefinito in Amazon Linux 2. microdnf
è un'implementazione autonoma di. dnf
Per un elenco dei pacchetti inclusi nelle immagini AL2 basate su 023, consulta le colonne Minimal Container in Confronto dei pacchetti installati su Amazon Linux 2023 Container Images. Per ulteriori informazioni sulle differenze tra AL2 023 e Amazon Linux 2, consulta la sezione Introduzione al runtime di Amazon Linux 2023 AWS Lambda
Nota
Per eseguire immagini AL2 basate su 023 localmente, incluso with AWS Serverless Application Model (AWS SAM), devi usare Docker versione 20.10.10 o successiva.
Per creare un'immagine del contenitore utilizzando un'immagine di AWS base, scegli le istruzioni per la tua lingua preferita:
Utilizzo di un'immagine di AWS base solo per il sistema operativo
AWS Le immagini di base solo
Tag | Runtime | Sistema operativo | Dockerfile | Definizione come obsoleto |
---|---|---|---|---|
al2023 |
Runtime solo per il sistema operativo | Amazon Linux 2023 | Dockerfile per Runtime solo per sistema operativo su GitHub |
Non pianificato |
al2 |
Runtime solo per il sistema operativo | Amazon Linux 2 | Dockerfile per Runtime solo per sistema operativo attivo GitHub |
Non pianificato |
Galleria pubblica di Amazon Elastic Container Registry: gallery.ecr.aws/lambda/provided
Utilizzo di un'immagine non AWS di base
Lambda supporta qualsiasi immagine conforme a uno dei seguenti formati manifest per le immagini:
Docker Image Manifest V2 Schema 2 (utilizzato con Docker versione 1.10 e successive)
Specifiche di Open Container Initiative (OCI) (v1.0.0 e successive)
Lambda supporta una dimensione massima dell'immagine non compressa pari a 10 GB, inclusi tutti i livelli.
Nota
Per rendere l'immagine compatibile con Lambda, devi includere nell'immagine un client di interfaccia di runtime per il tuo linguaggio.
Client di interfaccia runtime
Se utilizzi un'immagine di base solo per il sistema operativo o un'immagine di base alternativa, devi includere un client dell'interfaccia di runtime nell'immagine. Il client dell'interfaccia di runtime deve estendereUtilizzo del runtime Lambda API per runtime personalizzati, che gestisce l'interazione tra Lambda e il codice della funzione. AWS fornisce client di interfaccia di runtime open source per le seguenti lingue:
Se utilizzi un linguaggio che non dispone di un AWS client di interfaccia di runtime fornito, devi crearne uno personalizzato.
ECRAutorizzazioni Amazon
Prima di creare una funzione Lambda da un'immagine del contenitore, devi creare l'immagine localmente e caricarla in un repository AmazonECR. Quando crei la funzione, specifica il ECR repository URI Amazon.
Assicurati che le autorizzazioni per l'utente o il ruolo che crea la funzione GetRepositoryPolicy
includano e. SetRepositoryPolicy
Ad esempio, utilizzate la IAM console per creare un ruolo con la seguente politica:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:
us-east-1
:111122223333
:repository/hello-world
" } ] }
Politiche relative ai ECR repository di Amazon
Per una funzione nello stesso account dell'immagine del contenitore in AmazonECR, puoi aggiungere autorizzazioni ecr:BatchGetImage
e ecr:GetDownloadUrlForLayer
autorizzazioni alla tua politica di ECR archiviazione Amazon. L'esempio seguente mostra il valore minimo della policy.
{ "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }
Per ulteriori informazioni sulle autorizzazioni dei ECR repository Amazon, consulta le politiche dei repository privati nella Amazon Elastic Container Registry User Guide.
Se il ECR repository Amazon non include queste autorizzazioni, Lambda aggiunge le autorizzazioni ecr:GetDownloadUrlForLayer
al container ecr:BatchGetImage
image repository. Lambda può aggiungere queste autorizzazioni solo se l'entità principale che chiama Lambda dispone delle autorizzazioni ecr:getRepositoryPolicy
e ecr:setRepositoryPolicy
.
Per visualizzare o modificare le autorizzazioni del ECR repository Amazon, segui le istruzioni nella dichiarazione sulla politica di impostazione di un repository privato nella Amazon Elastic Container Registry User Guide.
Autorizzazioni Amazon ECR per più account
Un account diverso nella stessa Regione può creare una funzione che utilizza un'immagine container di proprietà del tuo account. Nell'esempio seguente, la tua politica di autorizzazione dei ECR repository Amazon richiede le seguenti istruzioni per concedere l'accesso al numero di account 123456789012.
CrossAccountPermission— Consente all'account 123456789012 di creare e aggiornare funzioni Lambda che utilizzano immagini da questo repository. ECR
L ambdaECRImage CrossAccountRetrievalPolicy — Lambda alla fine imposterà lo stato di una funzione su inattivo se non viene richiamata per un periodo prolungato. Questa istruzione è necessaria affinché Lambda possa recuperare l'immagine del container per l'ottimizzazione e la memorizzazione nella cache per conto della funzione di proprietà di 123456789012.
Esempio - Aggiunta di autorizzazioni multi-account al repository
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPermission", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "AWS": "arn:aws:iam::
123456789012
:root" } }, { "Sid": "LambdaECRImageCrossAccountRetrievalPolicy", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "Service": "lambda.amazonaws.com" }, "Condition": { "StringLike": { "aws:sourceARN": "arn:aws:lambda:us-east-1
:123456789012
:function:*" } } } ] }
Per consentire l'accesso a più account, aggiungi l'account IDs all'elenco Principal nella CrossAccountPermission
policy e all'elenco di valutazione delle condizioni in. LambdaECRImageCrossAccountRetrievalPolicy
Se lavori con più account in un' AWS organizzazione, ti consigliamo di enumerare ogni ID account nella politica delle ECR autorizzazioni. Questo approccio è in linea con le migliori pratiche di AWS sicurezza che prevedono l'impostazione di autorizzazioni limitate nelle politiche. IAM
Oltre alle autorizzazioni Lambda, l'utente o il ruolo che crea la funzione deve disporre BatchGetImage
anche delle autorizzazioni e. GetDownloadUrlForLayer
Ciclo di vita delle funzioni
Dopo aver caricato un'immagine container nuova o aggiornata, Lambda ottimizza l'immagine prima che la funzione possa elaborare le chiamate. Il processo di ottimizzazione può richiedere alcuni secondi. La funzione rimane nello stato Pending
fino al completamento del processo. La funzione passa quindi allo stato Active
. Mentre lo stato è Pending
, è possibile richiamare la funzione, ma non è possibile completare altre operazioni. Le chiamate che si verificano durante l'aggiornamento dell'immagine eseguono il codice dell'immagine precedente.
Se una funzione non viene richiamata per più settimane, Lambda recupera la sua versione ottimizzata e la funzione passa allo stato Inactive
. Per riattivare la funzione, è necessario invocarla. Lambda rifiuta la prima invocazione e la funzione entra nello stato Pending
finché Lambda non riottimizza l'immagine. La funzione ritorna quindi allo stato Active
.
Lambda recupera periodicamente l'immagine del contenitore associata dal repository Amazon. ECR Se l'immagine del contenitore corrispondente non esiste più su Amazon ECR o le autorizzazioni vengono revocate, la funzione entra Failed
nello stato e Lambda restituisce un errore per qualsiasi chiamata di funzione.
È possibile utilizzare Lambda API per ottenere informazioni sullo stato di una funzione. Per ulteriori informazioni, consulta Stati funzione Lambda.