Verwenden der.NET Lambda Global CLI - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden der.NET Lambda Global CLI

Die .NET-CLI und die Erweiterung .NET Lambda Global Tools (Amazon.Lambda.Tools) bieten eine plattformübergreifende Möglichkeit, .NET-basierte Lambda-Anwendungen zu erstellen, zu verpacken und für Lambda bereitzustellen. In diesem Abschnitt erfahren Sie, wie Sie neue Lambda .NET-Projekte mit den .NET CLI- und Amazon Lambda-Vorlagen erstellen und diese mithilfe von Amazon.Lambda.Tools verpacken und bereitstellen

Voraussetzungen

.NET 8 SDK

Falls noch nicht geschehen, installieren Sie das .NET 8 SDK und die Laufzeit.

AWS Amazon.Lambda.Templates .NET-Projektvorlagen

Verwenden Sie das -Amazon.Lambda.Templates NuGet Paket, um Ihren Lambda-Funktionscode zu generieren. Zur Installation dieses Vorlagenpakets führen Sie den folgenden Befehl aus:

dotnet new install Amazon.Lambda.Templates
AWS Amazon.Lambda.Tools .NET Global CLI-Tools

Verwenden Sie zum Erstellen Ihrer Lambda-Funktionen die Amazon.Lambda.Tools-.NET Global Tools-Erweiterung. Um Amazon.Lambda.Tools zu installieren, führen Sie den folgenden Befehl aus:

dotnet tool install -g Amazon.Lambda.Tools

Weitere Informationen zur Amazon.Lambda.Tools .NET-CLI-Erweiterung finden Sie im Repository AWS Erweiterungen für .NET-CLI auf GitHub.

.NET-Projekte mit der .NET-CLI erstellen

Verwenden Sie in der .NET CLI den dotnet new-Befehl zum Erstellen von .NET-Projekten in der Befehlszeile. Lambda bietet zusätzliche Vorlagen mithilfe des -Amazon.Lambda.Templates NuGet Pakets.

Nach der Installation des Pakets führen Sie den folgenden Befehl aus, um eine Liste des verfügbaren Vorlagen zu sehen.

dotnet new list

Wenn Sie Details zu einer Vorlage einsehen möchten, verwenden Sie die help-Option. Um beispielsweise Details über die lambda.EmptyFunction-Vorlage zu sehen, führen Sie den folgenden Befehl aus.

dotnet new lambda.EmptyFunction --help

Verwenden Sie die lambda.EmptyFunction-Vorlage, um eine Basisvorlage für eine .NET-Lambda-Funktion zu erstellen. Dadurch wird eine einfache Funktion erstellt, die eine Zeichenfolge als Eingabe verwendet und diese mithilfe der ToUpper-Methode in Großbuchstaben umwandelt. Diese Vorlage unterstützt die folgenden Optionen.

  • --name – Der Name der Funktion.

  • --region – Die AWS Region, in der die Funktion erstellt werden soll.

  • --profile – Der Name eines Profils in Ihrer AWS SDK for .NET Anmeldeinformationsdatei. Weitere Informationen zu Anmeldeinformationsprofilen in .NET finden Sie unter Konfigurieren von AWS Anmeldeinformationen im -SDKAWS -for-.NET-Entwicklerhandbuch.

In diesem Beispiel erstellen wir eine neue leere Funktion mit dem Namen myDotnetFunction unter Verwendung des Standardprofils und der AWS-Region Einstellungen:

dotnet new lambda.EmptyFunction --name myDotnetFunction

Mit diesem Befehl werden die folgenden Dateien und Verzeichnisse in Ihrem Projektverzeichnis erstellt.

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

Zeigen Sie im Verzeichnis src/myDotnetFunction die folgenden Dateien an:

  • aws-lambda-tools-defaults.json : Hier geben Sie die Befehlszeilenoptionen an, wenn Sie Ihre Lambda-Funktion bereitstellen. Beispielsweise:

    "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: Der Funktionscode Ihres Lambda-Handlers. Dies ist eine C #-Vorlage mit der Amazon.Lambda.Core-Standardbibliothek und einem LambdaSerializer-Standardattribut. Weitere Informationen zu den Serialisierungsanforderungen und -optionen finden Sie unter Serialisieren von Lambda-Funktionen. Es ist auch eine Beispielfunktion enthalten, die Sie bearbeiten können, um Lambda-Funktionscode anzuwenden.

    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(); } }
  • myDotnetFunction.csproj : Eine MSBuild-Datei, die die Dateien und Assemblys auflistet, aus denen Ihre Anwendung besteht.

    <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: Verwenden Sie diese Datei, um Ihre Lambda-Funktion zu dokumentieren.

Zeigen Sie im Verzeichnis myfunction/test die folgenden Dateien an:

  • myDotnetFunction.Tests.csproj : Wie bereits erwähnt, handelt es sich um eine MSBuild-Datei, in der die Dateien und Komponenten aufgeführt sind, aus denen Ihr Testprojekt besteht. Beachten Sie auch, dass die Amazon.Lambda.Core-Bibliothek enthalten ist. Damit können Sie nahtlos beliebige Lambda-Vorlagen integrieren, die zum Testen Ihrer Funktion erforderlich sind.

    <Project Sdk="Microsoft.NET.Sdk"> ... <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0 " /> ...
  • FunctionTest.cs : Die gleiche C#-Codevorlagendatei, die im src Verzeichnis enthalten ist. Bearbeiten Sie diese Datei, damit sie dem Produktionscode Ihrer Funktion gleicht, und testen Sie sie vor dem Hochladen Ihrer Lambda-Funktion in eine Produktionsumgebung.

    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); } } }

.NET-Projekte über die .NET-CLI bereitstellen

Um Ihr Bereitstellungspaket zu erstellen und es auf Lambda bereitzustellen, verwenden Sie die Amazon.Lambda.Tools-CLI-Tools. Um Ihre Funktion anhand der Dateien bereitzustellen, die Sie in den vorherigen Schritten erstellt haben, navigieren Sie zunächst zu dem Ordner, der die .csproj-Datei Ihrer Funktion enthält.

cd myDotnetFunction/src/myDotnetFunction

Führen Sie den folgenden Befehl aus, um Ihren Code als ZIP-Bereitstellungspaket für Lambda bereitzustellen. Wählen Sie Ihren eigenen Funktionsnamen.

dotnet lambda deploy-function myDotnetFunction

Während der Bereitstellung werden Sie vom Assistenten aufgefordert, eine auszuwählenLambda-Ausführungsrolle. Wählen Sie für dieses Beispiel die lambda_basic_role.

Nachdem Sie Ihre Funktion bereitgestellt haben, können Sie sie mit dem dotnet lambda invoke-function-Befehl in der Cloud testen. Für den Beispielcode in der lambda.EmptyFunction-Vorlage können Sie Ihre Funktion testen, indem Sie mit der --payload-Option eine Zeichenfolge übergeben.

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

Wenn Ihre Funktion erfolgreich bereitgestellt wurde, sollten Sie eine Ausgabe ähnlich der folgenden sehen.

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

Verwendung von Lambda-Ebenen mit der.NET-CLI

Anmerkung

Die Verwendung von Ebenen mit Funktionen in einer kompilierten Sprache wie C# bietet möglicherweise nicht den gleichen Nutzen wie in einer interpretierten Sprache wie Python. Da es sich bei C# um eine kompilierte Sprache handelt, müssen Ihre Funktionen während der Initialisierungsphase immer noch alle freigegebenen Baugruppen manuell in den Speicher laden, was die Kaltstartzeiten erhöhen kann. Stattdessen empfehlen wir, den freigegebenen Code bei der Kompilierung einzuschließen, um die Vorteile der integrierten Compiler-Optimierungen zu nutzen.

Die .NET-CLI unterstützt Befehle, mit denen Sie Ebenen veröffentlichen und C#-Funktionen bereitstellen können, die Ebenen nutzen. Um eine Ebene in einem angegebenen Amazon-S3-Bucket zu veröffentlichen, führen Sie den folgenden Befehl im selben Verzeichnis wie Ihre .csproj-Datei aus:

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

Wenn Sie dann Ihre Funktion mithilfe der .NET-CLI bereitstellen, geben Sie im folgenden Befehl den Ebenen-ARN an, den Sie verwenden wollen:

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

Ein vollständiges Beispiel für eine Hello-World-Funktion finden Sie im blank-csharp-with-layer Beispiel.