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
Themen
Voraussetzungen
- .NET 8-SDK
-
Falls Sie das noch nicht getan haben, installieren Sie das .NET 8
-SDK und 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 über die Amazon.Lambda.Tools .NET CLI-Erweiterung finden Sie im AWS-Erweiterungen für .NET-CLI
-Repository 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 mithilfe des Amazon.Lambda.Templates
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 findenSie unter AWS-Anmeldeinformation konfigurieren im AWS-SDK für .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. Zum Beispiel:
"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 einemLambdaSerializer
-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, in der die Dateien und Assemblys aufgeführt werden, 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 hierbei um eine MSBuild
-Datei, in der die Dateien und Assembys aufgeführt werden, 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 # -Vorlagendatei, die sich im
src
-Verzeichnis befindet. 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 fordert Sie der Assistent auf, einen Definieren von Lambda-Funktionsberechtigungen mit einer Ausführungsrolle auszuwählen. 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-layersarn:aws:lambda:us-east-1:123456789012:layer:layer-name:1
Ein vollständiges Beispiel einer Hello-World-Funktion finden Sie im Beispiel blank-csharp-with-layer