Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Déployez. NETFonctions Lambda avec images de conteneurs
Il existe trois méthodes pour créer une image de conteneur pour un. NETFonction Lambda :
-
Utilisation d'une image AWS de base pour. NET
Les images de base AWS sont préchargées avec une exécution du langage, un client d’interface d’exécution pour gérer l’interaction entre Lambda et votre code de fonction, et un émulateur d’interface d’exécution pour les tests locaux.
-
Utilisation d'une image de base AWS uniquement pour le système d'exploitation
AWS Les images de base réservées
au système d'exploitation contiennent une distribution Amazon Linux et l'émulateur d'interface d'exécution . Ces images sont couramment utilisées pour créer des images de conteneur pour les langages compilés, tels que Go et Rust, et pour une langue ou une version linguistique pour laquelle Lambda ne fournit pas d'image de base, comme Node.js 19. Vous pouvez également utiliser des images de base uniquement pour le système d'exploitation pour implémenter un environnement d'exécution personnalisé. Pour rendre l'image compatible avec Lambda, vous devez inclure le client d'interface d'exécution pour. NETdans l'image. -
Utilisation d'une image non AWS basique
Vous pouvez utiliser une autre image de base à partir d’un autre registre de conteneur, comme Alpine Linux ou Debian. Vous pouvez également utiliser une image personnalisée créée par votre organisation. Pour rendre l'image compatible avec Lambda, vous devez inclure le client d'interface d'exécution pour. NETdans l'image.
Astuce
Pour réduire le temps nécessaire à l’activation des fonctions du conteneur Lambda, consultez Utiliser des générations en plusieurs étapes
Cette page explique comment créer, tester et déployer des images de conteneur pour Lambda.
Rubriques
AWS images de base pour. NET
AWS fournit les images de base suivantes pour. NET:
Balises | Environnement d’exécution | Système d’exploitation | Dockerfile | Obsolescence |
---|---|---|---|---|
8 |
. NET8 | Amazon Linux 2023 | Dockerfile pour. NET8 sur GitHub |
Non prévu |
6 |
. NET6 | Amazon Linux 2 | Dockerfile pour. NET6 sur GitHub |
20 déc. 2024 |
ECRRéférentiel Amazon : gallery.ecr.aws/lambda/dotnet
Utilisation d'une image AWS de base pour. NET
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
. NETSDK
— Les étapes suivantes utilisent le. NET8 image de base. Assurez-vous que votre. NETversion correspond à la version de l'image de base que vous spécifiez dans votre Dockerfile.
Création et déploiement d’une image à l’aide d’une image de base
Dans les étapes suivantes, vous utiliserez Amazon.Lambda.Templates et Amazon.Lambda.Tools pour créer un.
-
Installez le package Amazon.Lambda.Templates.
NuGet dotnet new install Amazon.Lambda.Templates
-
Créez un. NETprojet utilisant le
lambda.image.EmptyFunction
modèle.dotnet new lambda.image.EmptyFunction --name
MyFunction
--regionus-east-1
-
Accédez au répertoire
. C’est ici que les fichiers du projet sont stockés. Examinez les fichiers suivants :MyFunction
/src/MyFunction
-
aws-lambda-tools-defaults.json — Ce fichier vous permet de spécifier les options de ligne de commande lors du déploiement de votre fonction Lambda.
-
Function.cs : le code de fonction de votre gestionnaire Lambda. Il s’agit d’un modèle C# qui inclut la bibliothèque
Amazon.Lambda.Core
par défaut et un attributLambdaSerializer
par défaut. Pour plus d’informations sur les conditions de sérialisation et les options, consultez Sérialisation dans les fonctions Lambda. Vous pouvez utiliser le code fourni pour les tests ou le remplacer par le vôtre. -
MyFunction.csproj — A. NETfichier de projet
, qui répertorie les fichiers et les assemblages qui constituent votre application. -
Readme.md : ce fichier contient plus d’informations sur l’exemple de fonction Lambda.
-
-
Examinez le fichier Docker dans le répertoire
src/
. Vous pouvez utiliser le Dockerfile fourni pour les tests ou le remplacer par le vôtre. Si vous utilisez le vôtre, assurez-vous de :MyFunction
-
Définissez la
FROM
propriété sur URIl'image de base. Votre. NETla version doit correspondre à la version de l'image de base. -
Définir l’argument
CMD
pour le gestionnaire de la fonction Lambda. Il doit correspondre àimage-command
dansaws-lambda-tools-defaults.json
.
Notez que l'exemple de Dockerfile n'inclut aucune instruction. USER
Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut doté des autorisations les moins privilégiées. Ceci est différent du comportement standard de Docker qui est défini par défaut par l' root
utilisateur lorsqu'aucuneUSER
instruction n'est fournie.Exemple 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
" ] -
-
Installez le Amazon.Lambda.Tools. NETOutil mondial
. dotnet tool install -g Amazon.Lambda.Tools
Si Amazon.Lambda.Tools est déjà installé, assurez-vous que vous disposez de la dernière version.
dotnet tool update -g Amazon.Lambda.Tools
-
Changez le répertoire en
, si vous n’y êtes pas déjà.MyFunction
/src/MyFunction
cd src/
MyFunction
-
Utilisez Amazon.Lambda.Tools pour créer l'image Docker, la transférer vers un nouveau référentiel Amazon ECR et déployer la fonction Lambda.
Pour
--function-role
, spécifiez le nom du rôle, et non le nom de ressource Amazon (ARN), du rôle d'exécution de la fonction. Par exemple,lambda-role
.dotnet lambda deploy-function
MyFunction
--function-rolelambda-role
Pour plus d'informations sur le Amazon.Lambda.Tools. NETOutil global, voir les AWS extensions pour. NETCLI
référentiel sur GitHub. -
Invoquer la fonction.
dotnet lambda invoke-function
MyFunction
--payload "Testing the function"Si tout réussit, vous devez voir ce qui suit :
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 -
Supprimez la fonction Lambda.
dotnet lambda delete-function
MyFunction
Utilisation d’une autre image de base avec le client d’interface d’exécution
Si vous utilisez une image de base uniquement pour le système d’exploitation ou une autre image de base, vous devez inclure le client d'interface d'exécution dans votre image. Le client d’interface d’exécution étend leUtilisation du moteur d'exécution Lambda API pour des environnements d'exécution personnalisés, qui gère l’interaction entre Lambda et votre code de fonction.
L'exemple suivant montre comment créer une image de conteneur pour. NETen utilisant une image non AWS basique, et comment ajouter l'Amazon.Lambda. RuntimeSupport
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
. NETSDK
— Les étapes suivantes utilisent un. NET8 image de base. Assurez-vous que votre. NETversion correspond à la version de l'image de base que vous spécifiez dans votre Dockerfile.
Création et déploiement d’une image à l’aide d’une image de base alternative
-
Installez le package Amazon.Lambda.Templates.
NuGet dotnet new install Amazon.Lambda.Templates
-
Créez un. NETprojet utilisant le
lambda.CustomRuntimeFunction
modèle. Ce modèle inclut l'Amazon.Lambda. RuntimeSupportcolis. dotnet new lambda.CustomRuntimeFunction --name
MyFunction
--regionus-east-1
-
Accédez au répertoire
. C’est ici que les fichiers du projet sont stockés. Examinez les fichiers suivants :MyFunction
/src/MyFunction
-
aws-lambda-tools-defaults.json — Ce fichier vous permet de spécifier les options de ligne de commande lors du déploiement de votre fonction Lambda.
-
Function.cs : le code contient une classe avec une méthode
Main
qui initialise la bibliothèqueAmazon.Lambda.RuntimeSupport
en tant qu’amorce. La méthodeMain
est le point d’entrée du processus de la fonction. La méthodeMain
enveloppe le gestionnaire de fonctions dans un encapsuleur avec lequel l’amorce peut travailler. Pour plus d'informations, consultez la section Utilisation d'Amazon.Lambda. RuntimeSupport en tant que bibliothèque de classesdans le GitHub référentiel. -
MyFunction.csproj — A. NETfichier de projet
, qui répertorie les fichiers et les assemblages qui constituent votre application. -
Readme.md : ce fichier contient plus d’informations sur l’exemple de fonction Lambda.
-
-
Ouvrez le fichier
aws-lambda-tools-defaults.json
et ajoutez les lignes suivantes :"package-type": "image",
"docker-host-build-output-dir": "./bin/Release/lambda-publish"
-
package-typee : définit le package de déploiement en tant qu’image de conteneur.
-
docker-host-build-output-dir : définit le répertoire de sortie pour le processus de construction.
Exemple 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"
} -
-
Créez un Dockerfile dans le référentiel
. L'exemple suivant de Dockerfile utilise un Microsoft. NETimage de base au lieu d'une image AWS de base.MyFunction
/src/MyFunction
-
Définissez la propriété
FROM
pour l’identifiant de l’image de base. Votre. NETla version doit correspondre à la version de l'image de base. -
Utilisez la commande
COPY
pour copier la fonction dans le répertoire/var/task
. -
Définissez le
ENTRYPOINT
sur le module que vous souhaitez que le conteneur Docker exécute lorsqu’il démarre. Dans ce cas, le module est l’amorce, qui initialise la bibliothèqueAmazon.Lambda.RuntimeSupport
.
Notez que l'exemple de Dockerfile n'inclut aucune instruction. USER
Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut doté des autorisations les moins privilégiées. Ceci est différent du comportement standard de Docker qui est défini par défaut par l' root
utilisateur lorsqu'aucuneUSER
instruction n'est fournie.Exemple 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
"] -
-
Installez le Amazon.Lambda.Tools. NETExtension Global Tools
. dotnet tool install -g Amazon.Lambda.Tools
Si Amazon.Lambda.Tools est déjà installé, assurez-vous que vous disposez de la dernière version.
dotnet tool update -g Amazon.Lambda.Tools
-
Utilisez Amazon.Lambda.Tools pour créer l'image Docker, la transférer vers un nouveau référentiel Amazon ECR et déployer la fonction Lambda.
Pour
--function-role
, spécifiez le nom du rôle, et non le nom de ressource Amazon (ARN), du rôle d'exécution de la fonction. Par exemple,lambda-role
.dotnet lambda deploy-function
MyFunction
--function-rolelambda-role
Pour plus d'informations sur le Amazon.Lambda.Tools. NETCLIextension, voir les AWS extensions pour. NETCLI
référentiel sur GitHub. -
Invoquer la fonction.
dotnet lambda invoke-function
MyFunction
--payload "Testing the function"Si tout réussit, vous devez voir ce qui suit :
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 -
Supprimez la fonction Lambda.
dotnet lambda delete-function
MyFunction