

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.

# Stellen Sie transpilierten TypeScript Code in Lambda mit ZIP-Dateiarchiven bereit
<a name="typescript-package"></a>

Bevor Sie TypeScript Code bereitstellen können AWS Lambda, müssen Sie ihn transpilieren in. JavaScript Auf dieser Seite werden drei Möglichkeiten zum Erstellen und Bereitstellen von TypeScript Code für Lambda mit ZIP-Dateiarchiven beschrieben:
+ [Verwenden von AWS Serverless Application Model ()AWS SAM](#aws-sam-ts)
+ [Mit dem AWS Cloud Development Kit (AWS CDK)](#aws-cdk-ts)
+ [Verwenden von AWS Command Line Interface (AWS CLI) und esbuild](#aws-cli-ts)

AWS SAM und AWS CDK vereinfachen das Erstellen und Bereitstellen von TypeScript Funktionen. Die [AWS SAM Vorlagenspezifikation](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification.html) bietet eine einfache und übersichtliche Syntax zur Beschreibung der Lambda-Funktionen APIs, Berechtigungen, Konfigurationen und Ereignisse, aus denen Ihre serverlose Anwendung besteht. Über das [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html) Sie können zuverlässige, skalierbare und kostengünstige Anwendungen in der Cloud mit der beträchtlichen Ausdruckskraft einer Programmiersprache erstellen. Das AWS CDK richtet sich an mäßig bis sehr erfahrene Benutzer. AWS AWS CDK Sowohl der als auch der AWS SAM verwenden Esbuild, um Code zu transpilieren TypeScript . JavaScript

## Verwenden AWS SAM , um TypeScript Code für Lambda bereitzustellen
<a name="aws-sam-ts"></a>

Gehen Sie wie folgt vor, um eine Hello TypeScript World-Beispielanwendung herunterzuladen, zu erstellen und bereitzustellen AWS SAM. Diese Anwendung implementiert ein grundlegendes API-Backend. Es besteht aus einem Amazon-API-Gateway-Endpunkt und einer Lambda-Funktion. Wenn Sie eine GET-Anforderung an den API-Gateway-Endpunkt senden, wird die Lambda-Funktion aufgerufen. Die Funktion gibt eine `hello world`-Nachricht zurück.

**Anmerkung**  
AWS SAM verwendet esbuild, um Lambda-Funktionen von Node.js aus TypeScript Code zu erstellen. Die Esbuild-Unterstützung befindet sich derzeit in der öffentlichen Vorschauversion. Während der öffentlichen Vorschau kann der esbuild-Support Änderungen unterliegen, die nicht mehr rückwärtskompatibel sind.

**Voraussetzungen**

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
+ [AWS CLI Version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [AWS SAM CLI Version 1.75 oder höher](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)
+ Node.js

**Stellen Sie eine Beispielanwendung AWS SAM bereit**

1. Initialisieren Sie die Anwendung mithilfe der Hello TypeScript World-Vorlage.

   ```
   sam init --app-template hello-world-typescript --name sam-app --package-type Zip --runtime nodejs24.x
   ```

1. (Optional) Die Beispielanwendung enthält Konfigurationen für häufig verwendete Tools, z. B. [ESLlint](https://eslint.org/)für Code-Linting und [Jest](https://jestjs.io/) für Komponententests. So führen Sie Lint- und Testbefehle aus:

   ```
   cd sam-app/hello-world
   npm install
   npm run lint
   npm run test
   ```

1. Entwickeln Sie die App.

   ```
   cd sam-app
   sam build
   ```

1. Stellen Sie die Anwendung bereit.

   ```
   sam deploy --guided
   ```

1. Folgen Sie den Anweisungen auf dem Bildschirm. Um die im interaktiven Erlebnis bereitgestellten Standardoptionen zu akzeptieren, antworten Sie mit `Enter`.

1. Die Ausgabe zeigt den Endpunkt für die REST-API. Öffnen Sie den Endpunkt in einem Browser, um die Funktion zu testen. Folgende Antwort sollte angezeigt werden:

   ```
   {"message":"hello world"}
   ```

1. Dies ist ein öffentlicher API-Endpunkt, der über das Internet zugänglich ist. Es wird empfohlen, dass Sie den Endpunkt nach dem Testen löschen.

   ```
   sam delete
   ```

## Verwenden von AWS CDK , um TypeScript Code für Lambda bereitzustellen
<a name="aws-cdk-ts"></a>

Gehen Sie wie folgt vor, um eine TypeScript Beispielanwendung mit dem zu erstellen und bereitzustellen AWS CDK. Diese Anwendung implementiert ein grundlegendes API-Backend. Es besteht aus einem API-Gateway-Endpunkt und einer Lambda-Funktion. Wenn Sie eine GET-Anforderung an den API-Gateway-Endpunkt senden, wird die Lambda-Funktion aufgerufen. Die Funktion gibt eine `hello world`-Nachricht zurück.

**Voraussetzungen**

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
+ [AWS CLI Version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [AWS CDK Ausführung 2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites)
+ Node.js
+ Entweder [Docker](https://www.docker.com/get-started/) oder [esbuild](https://esbuild.github.io/)

**Stellen Sie eine AWS CDK Beispielanwendung bereit**

1. Erstellen Sie ein Projektverzeichnis für Ihre neue Anwendung.

   ```
   mkdir hello-world
   cd hello-world
   ```

1. Initialisieren Sie die App.

   ```
   cdk init app --language typescript
   ```

1. Fügen Sie das [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda)-Paket als Entwicklungsabhängigkeit hinzu. Dieses Paket enthält die Typdefinitionen für Lambda.

   ```
   npm install -D @types/aws-lambda
   ```

1. Öffnen Sie das **lib**-Verzeichnis. Sie sollten eine Datei mit dem Namen „**hello-world-stack.ts**“ sehen. Erstellen Sie neue zwei neue Dateien in diesem Verzeichnis: **hello-world.function.ts** und **hello-world.ts**.

1. Öffnen Sie **hello-world.function.ts** und fügen Sie den folgenden Code in die Datei ein. Dies ist der Code für die Lambda-Funktion.
**Anmerkung**  
Die `import`-Anweisung importiert die Typdefinitionen aus [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda). Das `aws-lambda`-NPM-Paket wird nicht importiert, da es sich um ein unabhängiges Tool eines Drittanbieters handelt. Weitere Informationen finden Sie unter [aws-lambda](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambda) im Repository. DefinitelyTyped GitHub 

   ```
   import { Context, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda';
   
   export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => {
       console.log(`Event: ${JSON.stringify(event, null, 2)}`);
       console.log(`Context: ${JSON.stringify(context, null, 2)}`);
       return {
           statusCode: 200,
           body: JSON.stringify({
               message: 'hello world',
           }),
       };
   };
   ```

1. Öffnen Sie **hello-world.ts** und fügen Sie den folgenden Code in die Datei ein. Dies enthält das [NodejsFunction Konstrukt](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda_nodejs-readme.html), das die Lambda-Funktion erstellt, und das [LambdaRestApi Konstrukt](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.LambdaRestApi.html), das die REST-API erstellt.

   ```
   import { Construct } from 'constructs';
   import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
   import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway';
     
   export class HelloWorld extends Construct {
     constructor(scope: Construct, id: string) {
       super(scope, id);
       const helloFunction = new NodejsFunction(this, 'function');
       new LambdaRestApi(this, 'apigw', {
         handler: helloFunction,
       });
     }
   }
   ```

   Das `NodejsFunction`-Konstrukt geht standardmäßig von folgendem aus:
   + Ihr Funktions-Handler heißt `handler`.
   + Die .ts-Datei, die den Funktionscode enthält (**hello-world.function.ts**), befindet sich im selben Verzeichnis wie die .ts-Datei, die das Konstrukt (**hello-world.ts**) enthält. Das Konstrukt verwendet die ID des Konstrukts („hello-world“) und den Namen der Lambda-Handler-Datei („function“), um den Funktionscode zu finden. Wenn sich Ihr Funktionscode beispielsweise in einer Datei namens **hello-world.my-function.ts** befindet, muss die Datei **hello-world.ts** wie folgt auf den Funktionscode verweisen:

     ```
     const helloFunction = new NodejsFunction(this, 'my-function');
     ```

   Sie können dieses Verhalten ändern und andere esbuild-Parameter konfigurieren. Weitere Informationen finden Sie unter [Konfiguration von esbuild](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda_nodejs-readme.html#configuring-esbuild) in der AWS CDK API-Referenz.

1. Öffnen Sie **hello-world-stack.ts.** Dies ist der Code, der Ihren [AWS CDK -Stack](https://docs.aws.amazon.com/cdk/v2/guide/stacks.html) definiert. Ersetzen Sie den Code mit Folgendem:

   ```
   import { Stack, StackProps } from 'aws-cdk-lib';
   import { Construct } from 'constructs';
   import { HelloWorld } from './hello-world';
     
   export class HelloWorldStack extends Stack {
     constructor(scope: Construct, id: string, props?: StackProps) {
       super(scope, id, props);
       new HelloWorld(this, 'hello-world');
     }
   }
   ```

1. Stellen Sie Ihre Anwendung aus dem Verzeichnis `hello-world` bereit, das Ihre `cdk.json` Datei enthält.

   ```
   cdk deploy
   ```

1. Der AWS CDK erstellt und verpackt die Lambda-Funktion mithilfe von esbuild und stellt die Funktion dann für die Lambda-Laufzeit bereit. Die Ausgabe zeigt den Endpunkt für die REST-API. Öffnen Sie den Endpunkt in einem Browser, um die Funktion zu testen. Folgende Antwort sollte angezeigt werden:

   ```
   {"message":"hello world"}
   ```

   Dies ist ein öffentlicher API-Endpunkt, der über das Internet zugänglich ist. Es wird empfohlen, dass Sie den Endpunkt nach dem Testen löschen.

## Verwenden von AWS CLI und esbuild zum Bereitstellen von TypeScript Code für Lambda
<a name="aws-cli-ts"></a>

Das folgende Beispiel zeigt, wie TypeScript Code mithilfe von esbuild transpiliert und für Lambda bereitgestellt wird AWS CLI. esbuild erzeugt eine JavaScript Datei mit allen Abhängigkeiten. Dies ist die einzige Datei, die Sie dem ZIP-Archiv hinzufügen müssen.

**Voraussetzungen**

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
+ [AWS CLI Version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ Node.js
+ Eine [Ausführungsrolle](lambda-intro-execution-role.md) für die Lambda-Funktion
+ Für Windows-Benutzer ein ZIP-Datei-Hilfsprogramm wie [7zip](https://www.7-zip.org/download.html).

**Bereitstellen einer Beispielfunktion**

1. Erstellen Sie auf Ihrem lokalen Computer ein Projektverzeichnis für Ihre neue Funktion. 

1. Erstellen Sie ein neues Node.js Projekt mit npm oder einem Paketmanager Ihrer Wahl.

   ```
   npm init
   ```

1. Fügen Sie die Pakete [@types /aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) und [esbuild](https://esbuild.github.io/) als Entwicklungsabhängigkeiten hinzu. Das `@types/aws-lambda`-Paket enthält die Typdefinitionen für Lambda.

   ```
   npm install -D @types/aws-lambda esbuild
   ```

1. Erstellen Sie eine neue Datei mit dem Namen **index.ts**. Fügen Sie den folgenden Code zur Datei hinzu. Dies ist der Code für die Lambda-Funktion. Die Funktion gibt eine `hello world`-Nachricht zurück. Die Funktion erstellt keine API-Gateway-Ressourcen.
**Anmerkung**  
Die `import`-Anweisung importiert die Typdefinitionen aus [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda). Das `aws-lambda`-NPM-Paket wird nicht importiert, da es sich um ein unabhängiges Tool eines Drittanbieters handelt. Weitere Informationen finden Sie unter [aws-lambda im Repository](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambda). DefinitelyTyped GitHub 

   ```
   import { Context, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda';
   
   export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => {
     console.log(`Event: ${JSON.stringify(event, null, 2)}`);
     console.log(`Context: ${JSON.stringify(context, null, 2)}`);
     return {
         statusCode: 200,
         body: JSON.stringify({
             message: 'hello world',
         }),
      };
   };
   ```

1. Hinzufügen eines Entwicklungs-Skripts zur **package.json**-Datei. Dies konfiguriert esbuild so, dass das ZIP-Bereitstellungspaket automatisch erstellt wird. Weitere Informationen finden Sie unter [Entwicklungs-Skripte](https://esbuild.github.io/getting-started/#build-scripts) in der esbuild-Dokumentation.

------
#### [ Linux and MacOS ]

   ```
   "scripts": {
     "prebuild": "rm -rf dist",
     "build": "esbuild index.ts --bundle --minify --sourcemap --platform=node --target=es2020 --outfile=dist/index.js",
     "postbuild": "cd dist && zip -r index.zip index.js*"
   },
   ```

------
#### [ Windows ]

   In diesem Beispiel verwendet der `"postbuild"` Befehl das [7zip](https://www.7-zip.org/download.html)-Hilfsprogramm, um Ihre ZIP-Datei zu erstellen. Verwenden Sie Ihr bevorzugtes Windows-ZIP-Hilfsprogramm und ändern Sie den Befehl nach Bedarf.

   ```
   "scripts": {
     "prebuild": "del /q dist",
     "build": "esbuild index.ts --bundle --minify --sourcemap --platform=node --target=es2020 --outfile=dist/index.js",
     "postbuild": "cd dist && 7z a -tzip index.zip index.js*"
   },
   ```

------

1. Erstellen Sie das Paket.

   ```
   npm run build
   ```

1. Erstellen Sie eine Lambda-Funktion mit dem ZIP-Bereitstellungspaket. Ersetzen Sie den markierten Text durch den Amazon-Ressourcennamen (ARN) Ihrer [Ausführungsrolle](lambda-intro-execution-role.md).

   ```
   aws lambda create-function --function-name hello-world --runtime "nodejs24.x" --role arn:aws:iam::123456789012:role/lambda-ex --zip-file "fileb://dist/index.zip" --handler index.handler
   ```

1. [Führen Sie ein Testereignis aus](testing-functions.md), um zu bestätigen, dass die Funktion die folgende Antwort zurückgibt. Wenn Sie diese Funktion mit API Gateway aufrufen möchten, [Erstellen und Konfigurieren Sie eine REST-API](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-create-api.html).

   ```
   {
     "statusCode": 200,
     "body": "{\"message\":\"hello world\"}"
   }
   ```