

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
<a name="csharp-package-cli"></a>

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

**Topics**
+ [

## Voraussetzungen
](#csharp-package-cli-prerequisites)
+ [

## .NET-Projekte mit der .NET-CLI erstellen
](#csharp-package-cli-create)
+ [

## .NET-Projekte über die .NET-CLI bereitstellen
](#csharp-package-cli-deploy)
+ [

## Verwendung von Lambda-Ebenen mit der.NET-CLI
](#csharp-layers)

## Voraussetzungen
<a name="csharp-package-cli-prerequisites"></a>

**.NET 8-SDK**  
Falls Sie das noch nicht getan haben, installieren Sie das [.NET 8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)-SDK und Laufzeit.

**AWS Amazon.Lambda.Templates .NET-Projektvorlagen**  
Verwenden Sie das [https://www.nuget.org/packages/Amazon.Lambda.Templates](https://www.nuget.org/packages/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 [https://www.nuget.org/packages/Amazon.Lambda.Tools](https://www.nuget.org/packages/Amazon.Lambda.Tools)-[.NET Global Tools-Erweiterung](https://aws.amazon.com/blogs/developer/net-core-global-tools-for-aws/). 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](https://github.com/aws/aws-extensions-for-dotnet-cli)-Repository auf GitHub.

## .NET-Projekte mit der .NET-CLI erstellen
<a name="csharp-package-cli-create"></a>

Verwenden Sie in der .NET CLI den `dotnet new`-Befehl zum Erstellen von .NET-Projekten in der Befehlszeile. Lambda bietet mithilfe des [https://www.nuget.org/packages/Amazon.Lambda.Templates](https://www.nuget.org/packages/Amazon.Lambda.Templates)-NuGet-Pakets zusätzliche Vorlagen an.

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 für .NET-Anmeldeinformationsdatei. Weitere Informationen zu Anmeldeinformationsprofilen in.NET findenSie unter [AWS-Anmeldeinformation konfigurieren](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html) 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 \$1-Vorlage mit der `Amazon.Lambda.Core`-Standardbibliothek und einem `LambdaSerializer`-Standardattribut. Weitere Informationen zu den Serialisierungsanforderungen und -optionen finden Sie unter [Serialisierung in C\$1-Lambda-Funktionen](csharp-handler.md#csharp-handler-serializer). 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](https://msdn.microsoft.com/en-us/library/dd393574.aspx)-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](https://msdn.microsoft.com/en-us/library/dd393574.aspx)-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 \$1 -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
<a name="csharp-package-cli-deploy"></a>

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](lambda-intro-execution-role.md) 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
<a name="csharp-layers"></a>

**Anmerkung**  
Es ist zwar möglich, [Ebenen](chapter-layers.md) mit Funktionen in .NET zu verwenden, wir raten jedoch davon ab. Funktionen in .NET, die Ebenen verwenden, laden die gemeinsam genutzten Assemblys während der `Init`-Phase manuell in den Speicher, was die Kaltstartzeiten verlängern kann. Schließen Sie stattdessen den gesamten freigegebenen Code zur Kompilierzeit ein, um die integrierten Optimierungen des .NET-Compilers zu nutzen.

Die .NET-CLI unterstützt Befehle, mit denen Sie Ebenen veröffentlichen und C\$1-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 einer Hello-World-Funktion finden Sie im Beispiel [blank-csharp-with-layer](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-csharp-with-layer).