

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.

# Bereitstellung von Lambda-Funktionen mit AWS CDK
<a name="lambda-cdk-tutorial"></a>

Das AWS Cloud Development Kit (AWS CDK) ist ein Infrastructure-as-Code-Framework (IaC), mit dem Sie die AWS Cloud-Infrastruktur mithilfe einer Programmiersprache Ihrer Wahl definieren können. Um Ihre eigene Cloud-Infrastruktur zu definieren, schreiben Sie zunächst eine App (in einer der unterstützten Sprachen des CDK), die einen oder mehrere Stacks enthält. Anschließend synthetisieren Sie es zu einer CloudFormation Vorlage und stellen Ihre Ressourcen auf Ihrem bereit. AWS-Konto Folgen Sie den Schritten in diesem Thema, um eine Lambda-Funktion bereitzustellen, die ein Ereignis von einem Amazon-API-Gateway-Endpunkt zurückgibt.

Die im CDK enthaltene AWS Construct Library bietet Module, mit denen Sie die bereitgestellten Ressourcen modellieren können. AWS-Services Für die gängigen Dienste stellt die Bibliothek kuratierte Konstrukte bereit, die intelligente Standards und bewährte Methoden bereitstellen. Sie können das Modul [aws\$1lambda](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda-readme.html) verwenden, um Ihre Funktion und die unterstützenden Ressourcen mit nur wenigen Codezeilen zu definieren. 

## Voraussetzungen
<a name="lambda-cdk-prerequisites"></a>

Bevor Sie mit diesem Tutorial beginnen, installieren Sie das, AWS CDK indem Sie den folgenden Befehl ausführen.

```
npm install -g aws-cdk
```

## Schritt 1: Richten Sie Ihr AWS CDK Projekt ein
<a name="lambda-cdk-step-1"></a>

Erstellen Sie ein Verzeichnis für Ihre neue AWS CDK App und initialisieren Sie das Projekt.

------
#### [ JavaScript ]

```
mkdir hello-lambda
cd hello-lambda
cdk init --language javascript
```

------
#### [ TypeScript ]

```
mkdir hello-lambda
cd hello-lambda
cdk init --language typescript
```

------
#### [ Python ]

```
mkdir hello-lambda
cd hello-lambda
cdk init --language python
```

Nach dem Start des Projekts aktivieren Sie die virtuelle Umgebung des Projekts und installieren die Basisabhängigkeiten für AWS CDK.

```
source .venv/bin/activate
python -m pip install -r requirements.txt
```

------
#### [ Java ]

```
mkdir hello-lambda
cd hello-lambda
cdk init --language java
```

Importieren Sie dieses Maven-Projekt in Ihre integrierte Java-Entwicklungsumgebung (IDE). Verwenden Sie in Eclipse beispielsweise **Datei**, **Import**, **Maven**, **Vorhandene Maven-Projekte**.

------
#### [ C\$1 ]

```
mkdir hello-lambda
cd hello-lambda
cdk init --language csharp
```

------

**Anmerkung**  
Die AWS CDK Anwendungsvorlage verwendet den Namen des Projektverzeichnisses, um Namen für Quelldateien und Klassen zu generieren. In diesem Beispiel trägt das Verzeichnis den Namen `hello-lambda`. Wenn Sie einen anderen Projektverzeichnisnamen verwenden, stimmt Ihre App nicht mit diesen Anweisungen überein.

AWS CDK v2 enthält stabile Konstrukte für alle AWS-Services in einem einzigen Paket, das aufgerufen wird`aws-cdk-lib`. Dieses Paket wird als Abhängigkeit installiert, wenn Sie das Projekt initialisieren. Wenn Sie mit bestimmten Programmiersprachen arbeiten, wird das Paket installiert, wenn Sie das Projekt zum ersten Mal erstellen.

## Schritt 2: Definieren Sie den Stapel AWS CDK
<a name="lambda-cdk-step-2"></a>

Ein *CDK-Stack* ist eine Sammlung von einem oder mehreren Konstrukten, die Ressourcen definieren AWS . Jeder CDK-Stack steht für einen CloudFormation Stack in Ihrer CDK-App.

Um Ihren CDK-Stack zu definieren, folgen Sie den Anweisungen für Ihre bevorzugte Programmiersprache. Dieser Stack definiert das Folgende:
+ Der logische Name der Funktion: `MyFunction`
+ Der Speicherort des Funktionscodes, der in der `code`-Eigenschaft angegeben ist. Weitere Informationen finden Sie unter [Handler-Code](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda-readme.html#handler-code) in der *AWS Cloud Development Kit (AWS CDK) -API-Referenz*.
+ Der logische Name der REST-API: `HelloApi`
+ Der logische Name des API-Gateway-Endpunkts: `ApiGwEndpoint`

Beachten Sie, dass alle CDK-Stacks in diesem Tutorial die [Laufzeit](lambda-runtimes.md)-Node.js für die Lambda-Funktion verwenden. Sie können verschiedene Programmiersprachen für den CDK-Stack und die Lambda-Funktion verwenden, um die Stärken der einzelnen Sprachen zu nutzen. Sie können ihn beispielsweise TypeScript für den CDK-Stack verwenden, um die Vorteile der statischen Typisierung für Ihren Infrastrukturcode zu nutzen. Sie können die Lambda-Funktion verwenden JavaScript , um die Flexibilität und schnelle Entwicklung einer dynamisch typisierten Sprache zu nutzen.

------
#### [ JavaScript ]

Öffnen Sie die Datei `lib/hello-lambda-stack.js` und ersetzen Sie den Inhalt durch Folgendes.

```
const { Stack } = require('aws-cdk-lib');
const lambda = require('aws-cdk-lib/aws-lambda');
const apigw = require('aws-cdk-lib/aws-apigateway');

class HelloLambdaStack extends Stack {
  /**
   *
   * @param {Construct} scope
   * @param {string} id
   * @param {StackProps=} props
   */
  constructor(scope, id, props) {
    super(scope, id, props);
    const fn = new lambda.Function(this, 'MyFunction', {
      code: lambda.Code.fromAsset('lib/lambda-handler'),
      runtime: lambda.Runtime.NODEJS_LATEST,
      handler: 'index.handler'
    });

    const endpoint = new apigw.LambdaRestApi(this, 'MyEndpoint', {
      handler: fn,
      restApiName: "HelloApi"
    });

  }
}

module.exports = { HelloLambdaStack }
```

------
#### [ TypeScript ]

Öffnen Sie die Datei `lib/hello-lambda-stack.ts` und ersetzen Sie den Inhalt durch Folgendes.

```
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as apigw from "aws-cdk-lib/aws-apigateway";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as path from 'node:path';

export class HelloLambdaStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps){
    super(scope, id, props)
    const fn = new lambda.Function(this, 'MyFunction', {
      runtime: lambda.Runtime.NODEJS_LATEST,
      handler: 'index.handler',
      code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
    });

    const endpoint = new apigw.LambdaRestApi(this, `ApiGwEndpoint`, {
      handler: fn,
      restApiName: `HelloApi`,
    });

  }
}
```

------
#### [ Python ]

Öffnen Sie die Datei `/hello-lambda/hello_lambda/hello_lambda_stack.py` und ersetzen Sie den Inhalt durch Folgendes.

```
from aws_cdk import (
    Stack,
    aws_apigateway as apigw,
    aws_lambda as _lambda
)
from constructs import Construct

class HelloLambdaStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        fn = _lambda.Function(
            self,
            "MyFunction",
            runtime=_lambda.Runtime.NODEJS_LATEST,
            handler="index.handler",
            code=_lambda.Code.from_asset("lib/lambda-handler")
        )

        endpoint = apigw.LambdaRestApi(
            self,
            "ApiGwEndpoint",
            handler=fn,
            rest_api_name="HelloApi"
        )
```

------
#### [ Java ]

Öffnen Sie die Datei `/hello-lambda/src/main/java/com/myorg/HelloLambdaStack.java` und ersetzen Sie den Inhalt durch Folgendes.

```
package com.myorg;

import software.constructs.Construct;
import software.amazon.awscdk.Stack;
import software.amazon.awscdk.StackProps;
import software.amazon.awscdk.services.apigateway.LambdaRestApi;
import software.amazon.awscdk.services.lambda.Function;

public class HelloLambdaStack extends Stack {
    public HelloLambdaStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public HelloLambdaStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        Function hello = Function.Builder.create(this, "MyFunction")
                            .runtime(software.amazon.awscdk.services.lambda.Runtime.NODEJS_LATEST)
                            .code(software.amazon.awscdk.services.lambda.Code.fromAsset("lib/lambda-handler"))
                            .handler("index.handler")
                            .build();

        LambdaRestApi api = LambdaRestApi.Builder.create(this, "ApiGwEndpoint")
                                .restApiName("HelloApi")
                                .handler(hello)
                                .build();

    }
}
```

------
#### [ C\$1 ]

Öffnen Sie die Datei `src/HelloLambda/HelloLambdaStack.cs` und ersetzen Sie den Inhalt durch Folgendes.

```
using Amazon.CDK;
using Amazon.CDK.AWS.APIGateway;
using Amazon.CDK.AWS.Lambda;
using Constructs;

namespace HelloLambda
{
    public class HelloLambdaStack : Stack
    {
        internal HelloLambdaStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var fn = new Function(this, "MyFunction", new FunctionProps
            {
                Runtime = Runtime.NODEJS_LATEST,
                Code = Code.FromAsset("lib/lambda-handler"),
                Handler = "index.handler"
            });

            var api = new LambdaRestApi(this, "ApiGwEndpoint", new LambdaRestApiProps
            {
                Handler = fn
            });
        }
    }
}
```

------

## Schritt 3: Den Lambda-Funktionscode erstellen
<a name="lambda-cdk-step-3"></a>

1. Erstellen Sie im Stammverzeichnis Ihres Projekts (`hello-lambda`) das `/lib/lambda-handler`-Verzeichnis für den Lambda-Funktionscode. Dieses Verzeichnis ist in der `code` Eigenschaft Ihres AWS CDK Stacks angegeben.

1. Erstellen Sie in dem Verzeichnis `/lib/lambda-handler` eine neue Datei namens `index.js`. Fügen Sie folgenden Code in die Datei ein. Die Funktion extrahiert bestimmte Eigenschaften aus der API-Anfrage und gibt sie als JSON-Antwort zurück.

   ```
   exports.handler = async (event) => {
     // Extract specific properties from the event object
     const { resource, path, httpMethod, headers, queryStringParameters, body } = event;
     const response = {
       resource,
       path,
       httpMethod,
       headers,
       queryStringParameters,
       body,
     };
     return {
       body: JSON.stringify(response, null, 2),
       statusCode: 200,
     };
   };
   ```

## Schritt 4: Stellen Sie den AWS CDK Stack bereit
<a name="lambda-cdk-step-4"></a>

1. Führen Sie im Stammverzeichnis Ihres Projekts den Befehl [cdk synth](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html) aus:

   ```
   cdk synth
   ```

   Dieser Befehl synthetisiert eine AWS CloudFormation Vorlage aus Ihrem CDK-Stack. Die Vorlage ist eine ca. 400 Zeilen lange YAML-Datei, ähnlich der folgenden. 
**Anmerkung**  
Wenn Sie die folgende Fehlermeldung erhalten, vergewissern Sie sich, dass Sie sich im Stammverzeichnis Ihres Projektverzeichnisses befinden.  

   ```
   --app is required either in command-line, in cdk.json or in ~/.cdk.json
   ```  
**Example CloudFormation Vorlage**  

   ```
   Resources:
     MyFunctionServiceRole3C357FF2:
       Type: AWS::IAM::Role
       Properties:
         AssumeRolePolicyDocument:
           Statement:
             - Action: sts:AssumeRole
               Effect: Allow
               Principal:
                 Service: lambda.amazonaws.com
           Version: "2012-10-17"		 	 	 
         ManagedPolicyArns:
           - Fn::Join:
               - ""
               - - "arn:"
                 - Ref: AWS::Partition
                 - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
       Metadata:
         aws:cdk:path: HelloLambdaStack/MyFunction/ServiceRole/Resource
     MyFunction1BAA52E7:
       Type: AWS::Lambda::Function
       Properties:
         Code:
           S3Bucket:
             Fn::Sub: cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}
           S3Key: ab1111111cd32708dc4b83e81a21c296d607ff2cdef00f1d7f48338782f92l3901.zip
         Handler: index.handler
         Role:
           Fn::GetAtt:
             - MyFunctionServiceRole3C357FF2
             - Arn
         Runtime: nodejs24.x
         ...
   ```

1. Führen Sie den Befehl [cdk deploy](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-deploy.html) aus:

   ```
   cdk deploy
   ```

   Warten Sie, bis Ihre Ressourcen erstellt wurden. Die endgültige Ausgabe enthält die URL für Ihren API-Gateway-Endpunkt. Beispiel:

   ```
   Outputs:
   HelloLambdaStack.ApiGwEndpoint77F417B1 = https://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
   ```

## Schritt 5: Testen der Funktion
<a name="lambda-cdk-step-5"></a>

Um die Lambda-Funktion aufzurufen, kopieren Sie den API Gateway-Endpunkt und fügen Sie ihn in einen Webbrowser ein oder führen Sie einen `curl`-Befehl aus:

```
curl -s https://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
```

Die Antwort ist eine JSON-Darstellung ausgewählter Eigenschaften aus dem ursprünglichen Ereignisobjekt, das Informationen über die Anfrage an den API-Gateway-Endpunkt enthält. Beispiel:

```
{
  "resource": "/",
  "path": "/",
  "httpMethod": "GET",
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Accept-Encoding": "gzip, deflate, br, zstd",
    "Accept-Language": "en-US,en;q=0.9",
    "CloudFront-Forwarded-Proto": "https",
    "CloudFront-Is-Desktop-Viewer": "true",
    "CloudFront-Is-Mobile-Viewer": "false",
    "CloudFront-Is-SmartTV-Viewer": "false",
    "CloudFront-Is-Tablet-Viewer": "false",
    "CloudFront-Viewer-ASN": "16509",
    "CloudFront-Viewer-Country": "US",
    "Host": "abcd1234.execute-api.us-east-1.amazonaws.com",
     ...
```

## Schritt 6: Bereinigen Ihrer Ressourcen
<a name="lambda-cdk-step-6"></a>

Der API-Gateway-Endpunkt ist öffentlich zugänglich. Um unerwartete Gebühren zu vermeiden, führen Sie den Befehl [cdk destroy](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-destroy.html) aus, um den Stack und alle zugehörigen Ressourcen zu löschen.

```
cdk destroy
```

## Nächste Schritte
<a name="lambda-cdk-next-steps"></a>

Informationen zum Schreiben von AWS CDK Apps in der Sprache Ihrer Wahl finden Sie im Folgenden:

------
#### [ TypeScript ]

[Arbeiten mit AWS CDK dem TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html)

------
#### [ JavaScript ]

[Mit der Tinte AWS CDK arbeiten JavaScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-javascript.html)

------
#### [ Python ]

[Arbeiten mit dem AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)

------
#### [ Java ]

[Arbeiten mit dem AWS CDK in Java](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-java.html)

------
#### [ C\$1 ]

[Arbeiten mit dem AWS CDK in C\$1](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-csharp.html)

------
#### [ Go ]

[Arbeiten mit dem AWS CDK in Go](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-go.html)

------