

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.

# Einführung in das Testen mit sam local invoke
<a name="using-sam-cli-local-invoke"></a>

Verwenden Sie den AWS Serverless Application Model `sam local invoke` Unterbefehl Command Line Interface (AWS SAMCLI), um einen einmaligen lokalen Aufruf einer AWS Lambda Funktion zu initiieren.
+ Eine Einführung in das finden Sie unter AWS SAMCLI [Was ist das? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)
+ Eine Liste der `sam local invoke` Befehlsoptionen finden Sie unter[sam local invoke](sam-cli-command-reference-sam-local-invoke.md).
+ Ein Beispiel für die Verwendung `sam local invoke` während eines typischen Entwicklungsworkflows finden Sie unter[Schritt 7: (Optional) Testen Sie Ihre Anwendung lokal](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**Anmerkung**  
Es wird nicht empfohlen, die lokalen Aufruffunktionen von SAM CLI in nicht vertrauenswürdigem Code zu verwenden. Um eine vollständige Isolierung von Ihrer lokalen Umgebung zu erreichen, führen Sie den Code direkt im Lambda-Service aus.

**Anmerkung**  
`sam local invoke`unterstützt langlebige Funktionen mit automatischen Checkpoint- und Wiedergabefunktionen. Beim lokalen Aufrufen dauerhafter Funktionen wird der Ausführungsstatus automatisch verwaltet.

## Voraussetzungen
<a name="using-sam-cli-local-invoke-prerequisites"></a>

Um das zu verwenden`sam local invoke`, installieren Sie das, AWS SAMCLI indem Sie die folgenden Schritte ausführen:
+ [AWS SAM Voraussetzungen](prerequisites.md).
+ [Installieren Sie das AWS SAMCLI](install-sam-cli.md).

Vor der Verwendung empfehlen wir`sam local invoke`, sich mit folgenden Grundkenntnissen vertraut zu machen:
+ [Konfiguration der AWS SAMCLI](using-sam-cli-configure.md).
+ [Erstellen Sie Ihre Bewerbung in AWS SAM](using-sam-cli-init.md).
+ [Einführung in das Bauen mit AWS SAM](using-sam-cli-build.md).
+ [Einführung in die Bereitstellung mit AWS SAM](using-sam-cli-deploy.md).

## Lokal eine Lambda-Funktion aufrufen
<a name="using-sam-cli-local-invoke-use"></a>

Bei der Ausführung AWS SAMCLI wird davon ausgegangen`sam local invoke`, dass Ihr aktuelles Arbeitsverzeichnis das Stammverzeichnis Ihres Projekts ist. Das AWS SAMCLI sucht zuerst nach einer `template.[yaml|yml]` Datei in einem `.aws-sam` Unterordner. Wenn nicht gefunden, sucht der AWS SAMCLI nach einer `template.[yaml|yml]` Datei in Ihrem aktuellen Arbeitsverzeichnis.

**Um eine Lambda-Funktion lokal aufzurufen**

1. Führen Sie im Stammverzeichnis Ihres Projekts Folgendes aus:

   ```
   $ sam local invoke <options>
   ```

1. Wenn Ihre Anwendung mehr als eine Funktion enthält, geben Sie die logische ID der Funktion an. Im Folgenden wird ein Beispiel gezeigt:

   ```
   $ sam local invoke HelloWorldFunction
   ```

1. Das AWS SAMCLI erstellt Ihre Funktion in einem lokalen Container mitDocker. Es ruft dann Ihre Funktion auf und gibt die Antwort Ihrer Funktion aus.

   Im Folgenden wird ein Beispiel gezeigt:

   ```
   $ sam local invoke
   Invoking app.lambda_handler (python3.9)
   Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image
   Building image....................................................................................................................
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
   START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST
   END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df
   REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df  Init Duration: 1.09 ms  Duration: 608.42 ms       Billed Duration: 609 ms Memory Size: 128 MB     Max Memory Used: 128 MB
   {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
   ```

### Verwalten von -Protokollen
<a name="using-sam-cli-local-invoke-logs"></a>

Bei der Verwendung `sam local invoke` wird die Laufzeitausgabe der Lambda-Funktion (z. B. Protokolle) und das Ergebnis der Lambda-Funktion an ausgegeben. `stderr` `stdout`

Das Folgende ist ein Beispiel für eine grundlegende Lambda-Funktion:

```
def handler(event, context):
    print("some log") # this goes to stderr
    return "hello world" # this goes to stdout
```

Sie können diese Standardausgaben speichern. Im Folgenden wird ein Beispiel gezeigt:

```
$ sam local invoke 1> stdout.log
...

$ cat stdout.log
"hello world"

$ sam local invoke 2> stderr.log
...

$ cat stderr.log
Invoking app.lambda_handler (python3.9)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST
some log
END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46
REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46  Init Duration: 0.91 ms  Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
```

Sie können diese Standardausgaben verwenden, um Ihre lokalen Entwicklungsprozesse weiter zu automatisieren.

## Optionen
<a name="using-sam-cli-local-invoke-options"></a>

### Übergeben Sie benutzerdefinierte Ereignisse, um die Lambda-Funktion aufzurufen
<a name="using-sam-cli-local-invoke-options-events"></a>

Verwenden Sie die `--event` Option, um ein Ereignis an die Lambda-Funktion zu übergeben. Im Folgenden wird ein Beispiel gezeigt:

```
$ sam local invoke --event events/s3.json S3JsonLoggerFunction
```

Sie können Ereignisse mit dem `sam local generate-event` Unterbefehl erstellen. Weitere Informationen hierzu finden Sie unter [Einführung in das Testen mit sam local generate-event](using-sam-cli-local-generate-event.md).

### Übergeben Sie Umgebungsvariablen, wenn Sie Ihre Lambda-Funktion aufrufen
<a name="using-sam-cli-local-invoke-options-env"></a>

Wenn Ihre Lambda-Funktion Umgebungsvariablen verwendet, können Sie diese bei lokalen Tests mit der `--env-vars` Option übergeben. Dies ist eine hervorragende Möglichkeit, eine Lambda-Funktion lokal mit Diensten in Ihrer Anwendung zu testen, die bereits in der Cloud bereitgestellt sind. Im Folgenden wird ein Beispiel gezeigt:

```
$ sam local invoke --env-vars locals.json
```

### Geben Sie eine Vorlage oder Funktion an
<a name="using-sam-cli-local-invoke-options-specify"></a>

Verwenden Sie die `--template` Option, AWS SAMCLI um eine Vorlage anzugeben, auf die verwiesen werden soll. Es AWS SAMCLI werden nur diese AWS SAM Vorlage und die Ressourcen, auf die sie verweist, geladen.

Um eine Funktion einer verschachtelten Anwendung oder eines geschachtelten Stacks aufzurufen, geben Sie die logische ID der Anwendung oder des Stacks zusammen mit der logischen ID der Funktion an. Im Folgenden wird ein Beispiel gezeigt:

```
$ sam local invoke StackLogicalId/FunctionLogicalId
```

### Testen Sie eine Lambda-Funktion aus Ihrem Projekt Terraform
<a name="using-sam-cli-local-invoke-options-terraform"></a>

Verwenden Sie die `--hook-name` Option, um Lambda-Funktionen aus Ihren Terraform Projekten lokal zu testen. Weitere Informationen hierzu finden Sie unter [Verwenden von AWS SAMCLI with Terraform für lokales Debuggen und Testen](using-samcli-terraform.md).

Im Folgenden wird ein Beispiel gezeigt:

```
$ sam local invoke --hook-name terraform --beta-features
```

## Best Practices
<a name="using-sam-cli-local-invoke-best"></a>

Wenn in Ihrer Anwendung ein `.aws-sam` Verzeichnis nicht ausgeführt wird`sam build`, stellen Sie sicher, dass es `sam build` jedes Mal ausgeführt wird, wenn Sie Ihren Funktionscode aktualisieren. Führen Sie dann `sam local invoke` den Befehl aus, um Ihren aktualisierten Funktionscode lokal zu testen.

Lokales Testen ist eine hervorragende Lösung für schnelles Entwickeln und Testen vor der Bereitstellung in der Cloud. Bei lokalen Tests wird jedoch nicht alles überprüft, z. B. die Berechtigungen zwischen Ihren Ressourcen in der Cloud. Testen Sie Ihre Anwendungen so oft wie möglich in der Cloud. Wir empfehlen `sam sync` die [Verwendung](using-sam-cli-sync.md), um Ihre Cloud-Test-Workflows zu beschleunigen.

## Beispiele
<a name="using-sam-cli-local-invoke-examples"></a>

### Generieren Sie ein Amazon API Gateway Gateway-Beispielereignis und verwenden Sie es, um lokal eine Lambda-Funktion aufzurufen
<a name="using-sam-cli-local-invoke-examples-api"></a>

Zunächst generieren wir eine API Gateway Gateway-HTTP-API-Event-Payload und speichern sie in unserem `events` Ordner.

```
$ sam local generate-event apigateway http-api-proxy > events/apigateway_event.json
```

Als Nächstes ändern wir unsere Lambda-Funktion, um einen Parameterwert aus dem Ereignis zurückzugeben.

```
def lambda_handler(event, context):
    print("HelloWorldFunction invoked")
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": event['queryStringParameters']['parameter2'],
        }),
    }
```

Als Nächstes rufen wir lokal unsere Lambda-Funktion auf und stellen unser benutzerdefiniertes Ereignis bereit.

```
$ sam local invoke --event events/apigateway_event.json

Invoking app.lambda_handler (python3.9)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.

Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST
some log
END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8
REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8  Init Duration: 1.63 ms  Duration: 564.07 ms       Billed Duration: 565 ms Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"value\"}"}%
```

### Übergeben Sie Umgebungsvariablen, wenn Sie eine Lambda-Funktion lokal aufrufen
<a name="using-sam-cli-local-invoke-examples-env"></a>

Diese Anwendung hat eine Lambda-Funktion, die eine Umgebungsvariable für einen Amazon DynamoDB-Tabellennamen verwendet. Das Folgende ist ein Beispiel für die in der Vorlage definierte Funktion: AWS SAM 

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
...
Resources:
  getAllItemsFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/get-all-items.getAllItemsHandler
      Description: get all items
      Policies:
        - DynamoDBReadPolicy:
            TableName: !Ref SampleTable
      Environment:
        Variables:
          SAMPLE_TABLE: !Ref SampleTable
...
```

Wir möchten unsere Lambda-Funktion lokal testen und gleichzeitig mit unserer DynamoDB-Tabelle in der Cloud interagieren lassen. Dazu erstellen wir unsere Umgebungsvariablendatei und speichern sie im Stammverzeichnis unseres Projekts unter. `locals.json` Der hier angegebene Wert für `SAMPLE_TABLE` verweist auf unsere DynamoDB-Tabelle in der Cloud.

```
{
    "getAllItemsFunction": {
        "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98"
    }
}
```

Als Nächstes führen wir unsere Umgebungsvariablen mit der Option aus `sam local invoke` und übergeben sie. `--env-vars`

```
$ sam local invoke getAllItemsFunction --env-vars locals.json

Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST
some log
END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8
REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8  Init Duration: 1.63 ms  Duration: 564.07 ms       Billed Duration: 565 ms Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode":200,"body":"{}"}
```

## Weitere Informationen
<a name="using-sam-cli-local-invoke-learn"></a>

Eine Liste aller `sam local invoke` Optionen finden Sie unter[sam local invoke](sam-cli-command-reference-sam-local-invoke.md).

Eine Demo der Verwendung `sam local` finden Sie unter [AWS SAM Lokale Entwicklung. Testen von AWS Cloud Ressourcen aus lokalen Entwicklungsumgebungen](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) in der *Serverless Land Sessions with SAM-Serie*. YouTube