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éployer les fonctions d'événement .NET Lambda avec des images de conteneur
Il existe trois méthodes pour créer une image de conteneur pour une fonction d'événement .NET Lambda :
-
À l'aide d'un AWS image 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.
-
À l'aide d'un AWS OS-only image de base
AWS OS-only les images de base
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, telle que Node.js 19. Vous pouvez également utiliser des images OS-only de base 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 .NET dans 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 .NET dans 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 :
| Étiquettes | Environnement d’exécution | Système d’exploitation | Dockerfile | Obsolescence |
|---|---|---|---|---|
10 |
.NET 10 | Amazon Linux 2023 | Dockerfile pour .NET 10 sur GitHub |
14 novembre 2028 |
9 |
.NET 9 | Amazon Linux 2023 | Dockerfile pour .NET 9 sur GitHub |
10 novembre 2026 |
8 |
.NET 8 | Amazon Linux 2023 | Dockerfile pour .NET 8 sur GitHub |
10 novembre 2026 |
Référentiel Amazon ECR : gallery.ecr. aws/lambda/point-net
À l'aide d'un AWS image de base pour .NET
Conditions préalables
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
SDK .NET
: les étapes suivantes utilisent l’image de base .NET 8. Assurez-vous que votre version de .NET correspond à la version de l’image de base que vous spécifiez dans votre Dockerfile. -
Docker
(version minimale 25.0.0) -
Le plug-in buildx
Docker.
Création et déploiement d’une image à l’aide d’une image de base
Dans les étapes suivantes, vous allez utiliser Amazon.Lambda.Templates
-
Installez le package Amazon.Lambda.Templates
NuGet . dotnet new install Amazon.Lambda.Templates -
Créez un projet .NET en utilisant le modèle
lambda.image.EmptyFunction.dotnet new lambda.image.EmptyFunction --nameMyFunction--regionus-east-1Les fichiers de projet sont stockés dans le répertoire
:MyFunction/src/MyFunction-
aws-lambda-tools-defaults.json : spécifie les options de ligne de commande pour le 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.Corepar défaut et un attributLambdaSerializerpar défaut. Pour plus d’informations sur les conditions de sérialisation et les options, consultez Sérialisation dans les fonctions d'événement Lambda en C#. Vous pouvez utiliser le code fourni pour les tests ou le remplacer par le vôtre. -
MyFunction.csproj: fichier de projet
.NET répertoriant les fichiers et les assemblages composant votre application. -
Dockerfile : 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 :
-
Définir la propriété
FROMsur l’URI de l’image de base. L’image de base et TargetFrameworkdans le fichierMyFunction.csprojdoivent tous deux utiliser la même version de .NET. Par exemple, pour utiliser .NET 9 :-
Fichier Docker :
FROMpublic.ecr.aws/lambda/dotnet:9 -
MyFunction.csproj:
<TargetFramework>net9.0</TargetFramework>
-
-
Définir l’argument
CMDpour le gestionnaire de la fonction Lambda. Il doit correspondre àimage-commanddansaws-lambda-tools-defaults.json.
-
-
-
Installez l'outil global Amazon.Lambda.Tools .NET
. dotnet tool install -g Amazon.Lambda.ToolsS' Amazon.Lambda.Tools il est déjà installé, assurez-vous de disposer 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/MyFunctioncd src/MyFunction -
Amazon.Lambda.Tools Utilisez-le 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, indiquez le nom du rôle, et non l’Amazon Resource Name (ARN), du rôle d’exécution de la fonction. Par exemple :lambda-role.dotnet lambda deploy-functionMyFunction--function-rolelambda-rolePour plus d'informations sur l'outil global Amazon.Lambda.Tools .NET, consultez le référentiel AWS Extensions for .NET CLI
sur GitHub. -
Invoquer la fonction.
dotnet lambda invoke-functionMyFunction--payload "Testing the function"Si tout réussit, vous verrez une réponse similaire à ce qui suit :
Payload: {"Lower":"testing the function","Upper":"TESTING THE FUNCTION"} Log Tail: INIT_REPORT Init Duration: 9999.81 ms Phase: init Status: timeout START RequestId: 12378346-f302-419b-b1f2-deaa1e8423ed Version: $LATEST END RequestId: 12378346-f302-419b-b1f2-deaa1e8423ed REPORT RequestId: 12378346-f302-419b-b1f2-deaa1e8423ed Duration: 3173.06 ms Billed Duration: 3174 ms Memory Size: 512 MB Max Memory Used: 24 MB -
Supprimez la fonction Lambda.
dotnet lambda delete-functionMyFunction
Utilisation d’une autre image de base avec le client d’interface d’exécution
Si vous utilisez une image OS-only de base ou une image de base alternative, vous devez inclure le client d'interface d'exécution dans votre image. Le client d’interface d’exécution étend leAPI de runtime, qui gère l’interaction entre Lambda et votre code de fonction.
L'exemple suivant montre comment créer une image de conteneur pour .NET à l'aide d'une image non AWS basique et comment ajouter le Amazon.Lambda.RuntimeSupport package
Conditions préalables
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
SDK .NET
— Les étapes suivantes utilisent une image de base .NET 9. Assurez-vous que votre version de .NET correspond à la version de l’image de base que vous spécifiez dans votre Dockerfile. -
Docker
(version minimale 25.0.0) -
Le plug-in buildx
Docker.
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 projet .NET en utilisant le modèle
lambda.CustomRuntimeFunction. Ce modèle inclut le Amazon.Lambda.RuntimeSupportpackage. dotnet new lambda.CustomRuntimeFunction --nameMyFunction--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 : c’est dans ce fichier que vous spécifiez les options de ligne de commande lors du déploiement de votre fonction Lambda.
-
Function.cs— Le code contient une classe avec une
Mainméthode qui initialise laAmazon.Lambda.RuntimeSupportbibliothèque en tant que bootstrap. La méthodeMainest le point d’entrée du processus de la fonction. La méthodeMainenveloppe le gestionnaire de fonctions dans un encapsuleur avec lequel l’amorce peut travailler. Pour plus d'informations, voir Utilisation en Amazon.Lambda.RuntimeSupport tant que bibliothèque de classesdans le GitHub référentiel. -
MyFunction.csproj— Un fichier de projet
.NET répertoriant les fichiers et les assemblages composant votre application. -
Readme.md— Ce fichier contient plus d'informations sur l'exemple de fonction Lambda.
-
-
Ouvrez le fichier
aws-lambda-tools-defaults.jsonet 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 génération.
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 de Dockerfile suivant utilise une image de base Microsoft .NET au lieu d’une image de base AWS.MyFunction/src/MyFunction-
Définissez la propriété
FROMpour l’identifiant de l’image de base. L’image de base etTargetFrameworkdans le fichierMyFunction.csprojdoivent tous deux utiliser la même version de .NET. -
Utilisez la commande
COPYpour copier la fonction dans le répertoire/var/task. -
Définissez le
ENTRYPOINTsur 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 pas d’instruction USER
. Lorsque vous déployez une image de conteneur sur Lambda, Lambda définit automatiquement un utilisateur Linux par défaut disposant d’autorisations de moindre privilège. Ceci est différent du comportement standard de Docker qui est défini par défaut par l’utilisateur rootlorsqu’aucune instructionUSERn’est fournie.Exemple Dockerfile
# You can also pull these images from DockerHub amazon/aws-lambda-dotnet:8 FROMmcr.microsoft.com/dotnet/runtime:9.0# Set the image's internal work directory WORKDIR /var/task # Copy function code to Lambda-defined environment variable COPY "bin/Release/net9.0/linux-x64" . # Set the entrypoint to the bootstrap ENTRYPOINT ["/usr/bin/dotnet", "exec", "/var/task/bootstrap.dll"] -
-
Installez l'extension Amazon.Lambda.Tools .NET Global Tools
. dotnet tool install -g Amazon.Lambda.ToolsS' Amazon.Lambda.Tools il est déjà installé, assurez-vous de disposer de la dernière version.
dotnet tool update -g Amazon.Lambda.Tools -
Amazon.Lambda.Tools Utilisez-le 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, indiquez le nom du rôle, et non l’Amazon Resource Name (ARN), du rôle d’exécution de la fonction. Par exemple :lambda-role.dotnet lambda deploy-functionMyFunction--function-rolelambda-rolePour plus d'informations sur l'extension Amazon.Lambda.Tools .NET CLI, consultez le référentiel AWS Extensions for .NET CLI
sur GitHub. -
Invoquer la fonction.
dotnet lambda invoke-functionMyFunction--payload "Testing the function"Si tout réussit, vous devez voir ce qui suit :
Payload: "TESTING THE FUNCTION" Log Tail: START RequestId:idVersion: $LATEST END RequestId:idREPORT RequestId:idDuration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB -
Supprimez la fonction Lambda.
dotnet lambda delete-functionMyFunction