Utilisation de la CLI .NET Lambda Global - AWS Lambda

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.

Utilisation de la CLI .NET Lambda Global

La CLI .NET et l’extension .NET Lambda Global Tools (Amazon.Lambda.Tools) offrent un moyen multiplateforme de créer des applications Lambda basées sur .NET, de les empaqueter et de les déployer dans Lambda. Dans cette section, vous apprendrez à créer de nouveaux projets Lambda .NET à l’aide de la CLI .NET et des modèles Amazon Lambda, et à les empaqueter et les déployer en utilisant Amazon.Lambda.Tools

Prérequis

KIT DE DÉVELOPPEMENT LOGICIEL .NET 8

Si ce n'est pas déjà fait, installez le SDK .NET 8 et Runtime.

AWS Modèles de projets .NET Amazon.Lambda.Templates

Pour générer le code de votre fonction Lambda, utilisez le Amazon.Lambda.Templates NuGet package. Pour installer ce package de modèle, exécutez la commande suivante :

dotnet new install Amazon.Lambda.Templates
AWS Outils CLI globaux .NET d'Amazon.Lambda.Tools

Pour créer vos fonctions Lambda, utilisez l’Amazon.Lambda.Tools extension outils globaux .NET. Pour installer Amazon.Lambda.Tools, exécutez la commande suivante :

dotnet tool install -g Amazon.Lambda.Tools

Pour plus d'informations sur l'extension Amazon.Lambda.Tools .NET CLI, consultez le référentiel AWS Extensions for .NET CLI sur GitHub.

Création de projets .NET à l’aide de la CLI .NET

Dans la CLI .NET, utilisez la commande dotnet new pour créer des projets .NET à partir de la ligne de commande. Lambda propose des modèles supplémentaires à l'aide du Amazon.Lambda.Templates NuGet package.

Après avoir installé ce package, exécutez la commande suivante pour obtenir la liste des modèles disponibles.

dotnet new list

Pour examiner les détails relatifs à un modèle, utilisez l’option help. Par exemple, pour obtenir des détails sur le modèle lambda.EmptyFunction, exécutez la commande suivante.

dotnet new lambda.EmptyFunction --help

Pour créer un modèle de base pour une fonction Lambda .NET, utilisez le modèle lambda.EmptyFunction. Celui-ci crée une fonction simple qui prend une chaîne comme entrée et la convertit en majuscules à l’aide de la méthode ToUpper. Ce modèle prend en charge les options suivantes :

  • --name – Nom de la fonction.

  • --region— La AWS région dans laquelle créer la fonction.

  • --profile— Le nom d'un profil dans votre fichier AWS SDK for .NET d'informations d'identification. Pour en savoir plus sur les profils d'identification dans .NET, consultez la section Configurer les AWS informations d'identification dans le Guide du développeur du AWS SDK for .NET.

Dans cet exemple, nous créons une nouvelle fonction vide nommée myDotnetFunction en utilisant le profil et les Région AWS paramètres par défaut :

dotnet new lambda.EmptyFunction --name myDotnetFunction

Cette commande crée les fichiers et répertoires suivants dans le répertoire de votre projet.

└── myDotnetFunction ├── src │   └── myDotnetFunction │   ├── Function.cs │   ├── Readme.md │   ├── aws-lambda-tools-defaults.json │   └── myDotnetFunction.csproj └── test └── myDotnetFunction.Tests ├── FunctionTest.cs └── myDotnetFunction.Tests.csproj

Sous le répertoire src/myDotnetFunction, examinez les fichiers suivants :

  • aws-lambda-tools-defaults.json : c’est ici que vous spécifiez les options de ligne de commande lors du déploiement de votre fonction Lambda. Exemples :

    "profile" : "default", "region" : "us-east-2", "configuration" : "Release", "function-architecture": "x86_64", "function-runtime":"dotnet8", "function-memory-size" : 256, "function-timeout" : 30, "function-handler" : "myDotnetFunction::myDotnetFunction.Function::FunctionHandler"
  • Function.cs : 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 attribut LambdaSerializer par défaut. Pour plus d’informations sur les conditions de sérialisation et les options, consultez Sérialisation dans les fonctions Lambda. Il inclut également un exemple de fonction que vous pouvez modifier pour appliquer votre code de fonction Lambda.

    using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace myDotnetFunction; public class Function { /// <summary> /// A simple function that takes a string and does a ToUpper /// </summary≫ /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public string FunctionHandler(string input, ILambdaContext context) { return input.ToUpper(); } }
  • my DotnetFunction .csproj : fichier MSBuild qui répertorie les fichiers et les assemblages qui composent votre application.

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <!-- This property makes the build directory similar to a publish directory and helps the AWS .NET Lambda Mock Test Tool find project dependencies. --> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!-- Generate ready to run images during publishing to improve cold start time. --> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.0" /> </ItemGroup> </Project>
  • Readme : utilisez ce fichier pour documenter votre fonction Lambda.

Sous le répertoire myfunction/test, examinez les fichiers suivants :

  • my DotnetFunction .tests.csproj : Comme indiqué précédemment, il s'agit d'un fichier MSBuild qui répertorie les fichiers et les assemblages qui composent votre projet de test. Notez également qu’il comprend aussi la bibliothèque Amazon.Lambda.Core, ce qui vous permet d’intégrer de manière transparente tout modèle Lambda requis pour tester votre fonction.

    <Project Sdk="Microsoft.NET.Sdk"> ... <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0 " /> ...
  • FunctionTest.cs : le même fichier de modèle de code C# que celui inclus dans le src répertoire. Modifiez ce fichier pour mettre en miroir le code de production de votre fonction, et testez-le avant de télécharger votre fonction Lambda sur un environnement de production.

    using Xunit; using Amazon.Lambda.Core; using Amazon.Lambda.TestUtilities; using MyFunction; namespace MyFunction.Tests { public class FunctionTest { [Fact] public void TestToUpperFunction() { // Invoke the lambda function and confirm the string was upper cased. var function = new Function(); var context = new TestLambdaContext(); var upperCase = function.FunctionHandler("hello world", context); Assert.Equal("HELLO WORLD", upperCase); } } }

Déploiement de projets .NET à l’aide de la CLI .NET

Pour créer votre package de déploiement et le déployer sur Lambda, utilisez les outils CLI Amazon.Lambda.Tools. Pour déployer votre fonction à partir des fichiers que vous avez créés dans les étapes précédentes, accédez d’abord au dossier contenant le fichier .csproj de votre fonction.

cd myDotnetFunction/src/myDotnetFunction

Pour déployer votre code sur Lambda sous la forme d’un package de déploiement .zip, exécutez la commande suivante. Choisissez le nom de votre fonction.

dotnet lambda deploy-function myDotnetFunction

Pendant le déploiement, l'assistant vous demande de sélectionner unDéfinition des autorisations d'une fonction Lambda avec un rôle d'exécution. Pour cet exemple, sélectionnez le lambda_basic_role.

Une fois votre fonction déployée, vous pouvez la tester dans le cloud en utilisant la commande dotnet lambda invoke-function. Pour l’exemple de code dans le modèle lambda.EmptyFunction, vous pouvez tester votre fonction en transmettant une chaîne en utilisant l’option --payload.

dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK"

Si votre fonction a été déployée avec succès, vous devriez obtenir une sortie similaire à celle qui suit.

dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK" Amazon Lambda Tools for .NET Core applications (5.8.0) Project Home: https://github.com/aws/aws-extensions-for-dotnet-cli, https://github.com/aws/aws-lambda-dotnet Payload: "JUST CHECKING IF EVERYTHING IS OK" 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

Utilisation de couches Lambda avec l’interface de ligne de commande .NET

Note

Il se peut que l’utilisation de couches avec des fonctions dans un langage compilé tel que C# ne procure pas les mêmes avantages qu’avec un langage interprété tel que Python. C# étant un langage compilé, vos fonctions doivent toujours charger manuellement les assemblages partagés dans la mémoire pendant la phase d’initialisation, ce qui peut augmenter les temps de démarrage à froid. Nous recommandons plutôt d’inclure tout le code partagé au moment de la compilation afin de tirer parti des optimisations intégrées du compilateur.

L’interface de ligne de commande .NET prend en charge les commandes qui vous aident à publier des couches et à déployer des fonctions C# consommant des couches. Pour publier une couche dans un compartiment Amazon S3 spécifié, exécutez la commande suivante dans le même répertoire que votre fichier .csproj :

dotnet lambda publish-layer <layer_name> --layer-type runtime-package-store --s3-bucket <s3_bucket_name>

Ensuite, lorsque vous déployez votre fonction à l’aide de l’interface de ligne de commande .NET, spécifiez l’ARN de couche à consommer dans la commande suivante :

dotnet lambda deploy-function <function_name> --function-layers arn:aws:lambda:us-east-1:123456789012:layer:layer-name:1

Pour un exemple complet de fonction Hello World, consultez l' blank-csharp-with-layerexemple.