

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Introduzione ai test con sam local invoke
<a name="using-sam-cli-local-invoke"></a>

Utilizzate il AWS Serverless Application Model `sam local invoke` sottocomando Command Line Interface (AWS SAMCLI) per avviare una chiamata una tantum di una funzione localmente. AWS Lambda 
+ Per un'introduzione a, vedere AWS SAMCLI [Che cos'è il? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)
+ Per un elenco delle opzioni di `sam local invoke` comando, vedere[sam local invoke](sam-cli-command-reference-sam-local-invoke.md).
+ Per un esempio di utilizzo `sam local invoke` durante un tipico flusso di lavoro di sviluppo, vedi[Passaggio 7: (Facoltativo) Testa l'applicazione localmente](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**Nota**  
Non è consigliabile utilizzare le funzionalità di richiamo locale di SAM CLI in codice non attendibile. Per ottenere un isolamento completo dall'ambiente locale, esegui il codice direttamente nel servizio Lambda.

**Nota**  
`sam local invoke`supporta funzioni durevoli con funzionalità di checkpoint e replay automatici. Quando si richiamano funzioni durevoli localmente, lo stato di esecuzione viene gestito automaticamente.

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

Per utilizzarlo`sam local invoke`, installa il AWS SAMCLI completando quanto segue:
+ [AWS SAM prerequisiti](prerequisites.md).
+ [Installa il AWS SAMCLI](install-sam-cli.md).

Prima dell'uso`sam local invoke`, si consiglia una conoscenza di base di quanto segue:
+ [Configurazione del AWS SAMCLI](using-sam-cli-configure.md).
+ [Crea la tua candidatura in AWS SAM](using-sam-cli-init.md).
+ [Introduzione alla costruzione con AWS SAM](using-sam-cli-build.md).
+ [Introduzione alla distribuzione con AWS SAM](using-sam-cli-deploy.md).

## Richiama una funzione Lambda localmente
<a name="using-sam-cli-local-invoke-use"></a>

Quando si esegue`sam local invoke`, si AWS SAMCLI presuppone che la directory di lavoro corrente sia la directory principale del progetto. AWS SAMCLICercheranno innanzitutto un `template.[yaml|yml]` file all'interno di una `.aws-sam` sottocartella. Se non viene trovato, AWS SAMCLI cercherà un `template.[yaml|yml]` file all'interno della directory di lavoro corrente.

**Per richiamare una funzione Lambda localmente**

1. Dalla directory principale del progetto, esegui quanto segue:

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

1. Se l'applicazione contiene più di una funzione, fornite l'ID logico della funzione. Di seguito è riportato un esempio:

   ```
   $ sam local invoke HelloWorldFunction
   ```

1.  AWS SAMCLICostruisce la tua funzione in un contenitore locale utilizzandoDocker. Quindi richiama la tua funzione e restituisce la risposta della tua funzione.

   Di seguito è riportato un esempio:

   ```
   $ 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\"}"}%
   ```

### Gestione dei log
<a name="using-sam-cli-local-invoke-logs"></a>

Quando si utilizza`sam local invoke`, l'output del runtime della funzione Lambda (ad esempio, i log) viene emesso su e il risultato della funzione Lambda viene emesso su. `stderr` `stdout`

Di seguito è riportato un esempio di una funzione Lambda di base:

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

È possibile salvare queste uscite standard. Di seguito è riportato un esempio:

```
$ 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
```

È possibile utilizzare questi output standard per automatizzare ulteriormente i processi di sviluppo locale.

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

### Passa eventi personalizzati per richiamare la funzione Lambda
<a name="using-sam-cli-local-invoke-options-events"></a>

Per passare un evento alla funzione Lambda, utilizzate l'`--event`opzione. Di seguito è riportato un esempio:

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

È possibile creare eventi con il `sam local generate-event` sottocomando. Per ulteriori informazioni, consulta [Introduzione ai test con sam local generate-event](using-sam-cli-local-generate-event.md).

### Passa le variabili di ambiente quando richiami la funzione Lambda
<a name="using-sam-cli-local-invoke-options-env"></a>

Se la tua funzione Lambda utilizza variabili di ambiente, puoi passarle durante i test locali con l'`--env-vars`opzione. Questo è un ottimo modo per testare una funzione Lambda localmente con i servizi dell'applicazione che sono già distribuiti nel cloud. Di seguito è riportato un esempio:

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

### Specificate un modello o una funzione
<a name="using-sam-cli-local-invoke-options-specify"></a>

Per specificare un modello AWS SAMCLI a cui fare riferimento, utilizzate l'`--template`opzione. AWS SAMCLICaricherà solo quel AWS SAM modello e le risorse a cui punta.

Per richiamare una funzione di un'applicazione o di uno stack annidato, fornisci l'ID logico dell'applicazione o dello stack insieme all'ID logico della funzione. Di seguito è riportato un esempio:

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

### Prova una funzione Lambda dal tuo progetto Terraform
<a name="using-sam-cli-local-invoke-options-terraform"></a>

Usa l'`--hook-name`opzione per testare localmente le funzioni Lambda dei tuoi Terraform progetti. Per ulteriori informazioni, consulta [Utilizzo di AWS SAMCLI with Terraform per il debug e il test locali](using-samcli-terraform.md).

Di seguito è riportato un esempio:

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

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

Se la tua applicazione ha una `.aws-sam` directory in esecuzione`sam build`, assicurati di eseguirla `sam build` ogni volta che aggiorni il codice della funzione. Quindi, `sam local invoke` esegui per testare localmente il codice funzionale aggiornato.

I test locali sono un'ottima soluzione per lo sviluppo e il test rapidi prima della distribuzione nel cloud. Tuttavia, i test locali non convalidano tutto, come le autorizzazioni tra le risorse nel cloud. Per quanto possibile, testa le tue applicazioni nel cloud. Ti consigliamo di [`sam sync`utilizzarlo](using-sam-cli-sync.md) per velocizzare i flussi di lavoro di test sul cloud.

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

### Genera un evento di esempio Amazon API Gateway e utilizzalo per richiamare una funzione Lambda localmente
<a name="using-sam-cli-local-invoke-examples-api"></a>

Innanzitutto, generiamo un payload di eventi API Gateway HTTP API Gateway e lo salviamo `events` nella nostra cartella.

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

Successivamente, modifichiamo la nostra funzione Lambda per restituire un valore di parametro dall'evento.

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

Successivamente, invochiamo localmente la nostra funzione Lambda e forniamo il nostro evento personalizzato.

```
$ 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\"}"}%
```

### Passa le variabili di ambiente quando richiami una funzione Lambda localmente
<a name="using-sam-cli-local-invoke-examples-env"></a>

Questa applicazione dispone di una funzione Lambda che utilizza una variabile di ambiente per il nome di una tabella Amazon DynamoDB. Di seguito è riportato un esempio della funzione definita nel modello: 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
...
```

Vogliamo testare localmente la nostra funzione Lambda facendola interagire con la nostra tabella DynamoDB nel cloud. Per fare ciò, creiamo il nostro file delle variabili di ambiente e lo salviamo nella directory principale del nostro progetto come. `locals.json` Il valore fornito qui per `SAMPLE_TABLE` fa riferimento alla nostra tabella DynamoDB nel cloud.

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

Successivamente, eseguiamo `sam local invoke` e passiamo le nostre variabili di ambiente con l'`--env-vars`opzione.

```
$ 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":"{}"}
```

## Ulteriori informazioni
<a name="using-sam-cli-local-invoke-learn"></a>

Per un elenco di tutte le `sam local invoke` opzioni, vedi[sam local invoke](sam-cli-command-reference-sam-local-invoke.md).

Per una dimostrazione dell'utilizzo`sam local`, vedi [AWS SAM per lo sviluppo locale. Test Cloud AWS delle risorse provenienti da ambienti di sviluppo locali](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) nella *serie Serverless Land Sessions with SAM on YouTube*.