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à.
Implementazione. NETFunzioni Lambda con immagini di contenitori
Esistono tre modi per creare un'immagine contenitore per un. NETFunzione Lambda:
-
Utilizzo di un' AWS immagine di base per. NET
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 il client dell'interfaccia di runtime per. NETnell'immagine. -
Utilizzo di un'immagine non di AWS 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 il client dell'interfaccia di runtime per. NETnell'immagine.
Suggerimento
Per ridurre il tempo necessario all'attivazione delle funzioni del container Lambda, consulta Utilizzo di compilazioni a più fasi
Questa pagina spiega come creare, testare e implementare le immagini di container per Lambda.
Argomenti
AWS immagini di base per. NET
AWS fornisce le seguenti immagini di base per. NET:
Tag | Runtime | Sistema operativo | Dockerfile | Definizione come obsoleto |
---|---|---|---|---|
8 |
. NET8 | Amazon Linux 2023 | Dockerfile per. NET8 su GitHub |
|
6 |
. NET6 | Amazon Linux 2 | Dockerfile per. NET6 su GitHub |
20 dicembre 2024 |
ECRArchivio Amazon: gallery.ecr.aws/lambda/dotnet
Utilizzo di un' AWS immagine di base per. NET
Prerequisiti
Per completare le fasi riportate in questa sezione, è necessario:
-
. NETSDK
— I passaggi seguenti utilizzano il. NET8) immagine base. Assicurati che il tuo. NETla versione corrisponde alla versione dell'immagine di base specificata nel Dockerfile.
Creazione e implementazione di un'immagine utilizzando un'immagine di base
Nei passaggi seguenti, utilizzi Amazon.Lambda.Templates e Amazon.Lambda.Tools
-
Installa il pacchetto Amazon.Lambda.Templates.
NuGet dotnet new install Amazon.Lambda.Templates
-
Crea un. NETprogetto utilizzando il
lambda.image.EmptyFunction
modello.dotnet new lambda.image.EmptyFunction --name
MyFunction
--regionus-east-1
-
Passa alla directory
. Qui sono archiviati i file del progetto. Esamina i seguenti file di log:MyFunction
/src/MyFunction
-
aws-lambda-tools-defaults.json: in questo file si specificano le opzioni della riga di comando quando si distribuisce la funzione Lambda.
-
Function.cs: il codice della funzione del gestore Lambda. Si tratta di un modello C# che include la libreria
Amazon.Lambda.Core
e un attributoLambdaSerializer
predefiniti. Per ulteriori informazioni sui requisiti e sulle opzioni di serializzazione, consulta la pagina Serializzazione nelle funzioni Lambda. A fini di test, puoi utilizzare il codice fornito o sostituirlo con il tuo codice personalizzato. -
MyFunction.csproj — A. NETfile di progetto
, che elenca i file e gli assembly che compongono l'applicazione. -
Readme.md: questo file contiene ulteriori informazioni sulla funzione Lambda di esempio.
-
-
Esamina il Dockerfile nella directory
src/
. A fini di test, puoi utilizzare il Dockerfile fornito o sostituirlo con un file personalizzato. Se utilizzi un file personalizzato, assicurati di:MyFunction
-
Imposta la
FROM
proprietà sull'immagine URIdi base. Tuo. NETla versione deve corrispondere alla versione dell'immagine di base. -
Imposta l'argomento
CMD
specificando il gestore della funzione Lambda. Questo dovrebbe corrispondere aimage-command
inaws-lambda-tools-defaults.json
.
Nota che l'esempio Dockerfile non include un'USERistruzione.
Quando distribuisci un'immagine del contenitore in Lambda, Lambda definisce automaticamente un utente Linux predefinito con le autorizzazioni con privilegi minimi. Questo è diverso dal comportamento standard di Docker, che per impostazione predefinita è l'utente quando non viene fornita alcuna istruzione. root
USER
Esempio Dockerfile
# You can also pull these images from DockerHub amazon/aws-lambda-dotnet:8 FROM
public.ecr.aws/lambda/dotnet:8
# Copy function code to Lambda-defined environment variable COPY publish/* ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "MyFunction::MyFunction.Function::FunctionHandler
" ] -
-
Installa Amazon.Lambda.Tools. NET
Strumento globale. dotnet tool install -g Amazon.Lambda.Tools
Se Amazon.Lambda.Tools è già installato, assicurati di disporre della versione più recente.
dotnet tool update -g Amazon.Lambda.Tools
-
Passa alla directory
, se non lo hai ancora fatto.MyFunction
/src/MyFunction
cd src/
MyFunction
-
Usa Amazon.Lambda.Tools per creare l'immagine Docker, inviarla a un nuovo repository ECR Amazon e distribuire la funzione Lambda.
Per
--function-role
, specifica il nome del ruolo, non Amazon Resource Name (ARN), del ruolo di esecuzione per la funzione. Ad esempiolambda-role
.dotnet lambda deploy-function
MyFunction
--function-rolelambda-role
Per ulteriori informazioni su Amazon.Lambda.Tools. NETGlobal Tool, consulta le estensioni per.AWS NETCLI
repository attivo. GitHub -
Richiama la funzione.
dotnet lambda invoke-function
MyFunction
--payload "Testing the function"In caso di esito positivo, viene visualizzato quanto segue:
Payload: "TESTING THE FUNCTION" Log Tail: START RequestId:
id
Version: $LATEST END RequestId:id
REPORT RequestId:id
Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB -
Elimina la funzione Lambda.
dotnet lambda delete-function
MyFunction
Utilizzo di un'immagine di base alternativa con il client di interfaccia di runtime
Se utilizzi un'immagine di base solo per il sistema operativo o un'immagine di base alternativa, devi includere il client dell'interfaccia di runtime nell'immagine. Il client dell'interfaccia di runtime estende l'Utilizzo del runtime Lambda API per runtime personalizzati, che gestisce l'interazione tra Lambda e il codice della funzione.
L'esempio seguente mostra come creare un'immagine contenitore per. NETutilizzo di un'immagine non di AWS base e come aggiungere Amazon.Lambda. RuntimeSupport
Prerequisiti
Per completare le fasi riportate in questa sezione, è necessario:
-
. NETSDK
— I passaggi seguenti utilizzano un. NET8) immagine base. Assicurati che il tuo. NETla versione corrisponde alla versione dell'immagine di base specificata nel Dockerfile.
Creazione e implementazione di un'immagine utilizzando un'immagine di base alternativa
-
Installa il pacchetto NuGet Amazon.Lambda.Templates
. dotnet new install Amazon.Lambda.Templates
-
Crea un. NETprogetto utilizzando il
lambda.CustomRuntimeFunction
modello. Questo modello include Amazon.Lambda. RuntimeSupportpacchetto. dotnet new lambda.CustomRuntimeFunction --name
MyFunction
--regionus-east-1
-
Passa alla directory
. Qui sono archiviati i file del progetto. Esamina i seguenti file di log:MyFunction
/src/MyFunction
-
aws-lambda-tools-defaults.json: in questo file si specificano le opzioni della riga di comando quando si distribuisce la funzione Lambda.
-
Function.cs: il codice contiene una classe con un metodo
Main
che inizializza la libreriaAmazon.Lambda.RuntimeSupport
come bootstrap. Il metodoMain
sarà il punto di ingresso per il processo della funzione. Il metodoMain
racchiude il gestore della funzione in un wrapper con cui il bootstrap può funzionare. Per ulteriori informazioni, consulta Using Amazon.Lambda. RuntimeSupport come libreria di classinel repository. GitHub -
MyFunction.csproj — A. NETfile di progetto
, che elenca i file e gli assembly che compongono l'applicazione. -
Readme.md: questo file contiene ulteriori informazioni sulla funzione Lambda di esempio.
-
-
Apri il file
aws-lambda-tools-defaults.json
e aggiungi le righe seguenti."package-type": "image",
"docker-host-build-output-dir": "./bin/Release/lambda-publish"
-
package-type: definisce il pacchetto di implementazione come immagine di container.
-
docker-host-build-output-dir: Imposta la directory di output per il processo di compilazione.
Esempio aws-lambda-tools-defaults.json
{ "Information": [ "This file provides default values for the deployment wizard inside Visual Studio and the AWS Lambda commands added to the .NET Core CLI.", "To learn more about the Lambda commands with the .NET Core CLI execute the following command at the command line in the project root directory.", "dotnet lambda help", "All the command line options for the Lambda command can be specified in this file." ], "profile": "", "region": "us-east-1", "configuration": "Release", "function-runtime": "provided.al2023", "function-memory-size": 256, "function-timeout": 30, "function-handler": "bootstrap", "msbuild-parameters": "--self-contained true",
"package-type": "image",
"docker-host-build-output-dir": "./bin/Release/lambda-publish"
} -
-
Crea un Dockerfile nella directory
. L'esempio seguente Dockerfile utilizza un Microsoft. NETimmagine di base anziché un'immagine di AWS base.MyFunction
/src/MyFunction
-
Imposta la proprietà
FROM
sull'identificativo dell'immagine di base. Il tuo. NETla versione deve corrispondere alla versione dell'immagine di base. -
Utilizza il comando
COPY
per copiare la funzione nella directory/var/task
. -
Imposta l'
ENTRYPOINT
sul modulo su cui desideri che il container Docker venga eseguito all'avvio. In questo caso, il modulo è il bootstrap, che inizializza la libreriaAmazon.Lambda.RuntimeSupport
.
Nota che l'esempio Dockerfile non include un'USERistruzione.
Quando distribuisci un'immagine del contenitore in Lambda, Lambda definisce automaticamente un utente Linux predefinito con le autorizzazioni con privilegi minimi. Questo è diverso dal comportamento standard di Docker, che per impostazione predefinita è l'utente quando non viene fornita alcuna istruzione. root
USER
Esempio Dockerfile
# You can also pull these images from DockerHub amazon/aws-lambda-dotnet:8 FROM
mcr.microsoft.com/dotnet/runtime:8.0
# Set the image's internal work directory WORKDIR /var/task # Copy function code to Lambda-defined environment variable COPY "bin/Release/net8.0/linux-x64" . # Set the entrypoint to the bootstrap ENTRYPOINT ["/usr/bin/dotnet", "exec", "/var/task/bootstrap.dll
"] -
-
Installa Amazon.Lambda.Tools. NETEstensione Global Tools.
dotnet tool install -g Amazon.Lambda.Tools
Se Amazon.Lambda.Tools è già installato, assicurati di disporre della versione più recente.
dotnet tool update -g Amazon.Lambda.Tools
-
Usa Amazon.Lambda.Tools per creare l'immagine Docker, inviarla a un nuovo repository ECR Amazon e distribuire la funzione Lambda.
Per
--function-role
, specifica il nome del ruolo, non Amazon Resource Name (ARN), del ruolo di esecuzione per la funzione. Ad esempiolambda-role
.dotnet lambda deploy-function
MyFunction
--function-rolelambda-role
Per ulteriori informazioni su Amazon.Lambda.Tools. NETCLIestensione, consulta le estensioni per.AWS NETCLI
repository su. GitHub -
Richiama la funzione.
dotnet lambda invoke-function
MyFunction
--payload "Testing the function"In caso di esito positivo, viene visualizzato quanto segue:
Payload: "TESTING THE FUNCTION" Log Tail: START RequestId:
id
Version: $LATEST END RequestId:id
REPORT RequestId:id
Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB -
Elimina la funzione Lambda.
dotnet lambda delete-function
MyFunction