

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à.

# Testa la tua applicazione serverless con AWS SAM
<a name="serverless-test-and-debug"></a>

Dopo aver scritto e creato l'applicazione, sarete pronti a testarla per verificarne il corretto funzionamento. Con l'interfaccia a riga di AWS SAM comando (CLI), puoi testare localmente la tua applicazione serverless prima di caricarla sul Cloud. AWS Il test dell'applicazione consente di confermare la funzionalità, l'affidabilità e le prestazioni dell'applicazione, identificando al contempo i problemi (bug) che dovranno essere risolti.

Questa sezione fornisce indicazioni sulle pratiche comuni da seguire per testare l'applicazione. Gli argomenti di questa sezione si concentrano principalmente sui test locali che è possibile eseguire prima della distribuzione nel AWS cloud. Il test prima della distribuzione consente di identificare i problemi in modo proattivo, riducendo i costi non necessari associati ai problemi di implementazione. Ogni argomento di questa sezione descrive un test che è possibile eseguire, dice a yoxi include href? u i vantaggi del suo utilizzo e include esempi che mostrano come eseguire il test. Dopo aver testato l'applicazione, sarete pronti a eseguire il debug di eventuali problemi riscontrati.

**Topics**
+ [Introduzione ai test con il sam local comando](using-sam-cli-local.md)
+ [Richiama localmente le funzioni Lambda con AWS SAM](serverless-sam-cli-using-invoke.md)
+ [API Gateway eseguito localmente con AWS SAM](serverless-sam-cli-using-start-api.md)
+ [Introduzione al cloud testing con sam remote test-event](using-sam-cli-remote-test-event.md)
+ [Introduzione ai test nel cloud con sam remote invoke](using-sam-cli-remote-invoke.md)
+ [Automatizza i test di integrazione locali con AWS SAM](serverless-sam-cli-using-automated-tests.md)
+ [Genera payload di eventi di esempio con AWS SAM](serverless-sam-cli-using-generate-event.md)
+ [Test e debug di funzioni durevoli](test-and-debug-durable-functions.md)

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

Utilizzate il AWS Serverless Application Model comando Command Line Interface (AWS SAMCLI) `sam local` per testare localmente le vostre applicazioni serverless.

Per un'introduzione a AWS SAMCLI, vedere[Che cos'è il? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli).

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

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

Prima dell'uso`sam local`, 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).

## Utilizzo del sam local comando
<a name="using-sam-cli-local-command"></a>

Utilizzate il `sam local` comando con uno qualsiasi dei suoi sottocomandi per eseguire diversi tipi di test locali per l'applicazione.

```
$ sam local <subcommand>
```

Per ulteriori informazioni su ciascun sottocomando, vedere quanto segue:
+ **[Introduzione a sam local generate-event](using-sam-cli-local-generate-event.md)**— Genera Servizio AWS eventi per test locali.
+ **[Introduzione a sam local invoke](using-sam-cli-local-invoke.md)**— Avvia una chiamata una tantum di una funzione localmente. AWS Lambda 
+ **[Introduzione a sam local start-api](using-sam-cli-local-start-api.md)**— Esegui le tue funzioni Lambda utilizzando un server HTTP locale.
+ **[Introduzione a sam local start-lambda](using-sam-cli-local-start-lambda.md)**— Esegui le tue funzioni Lambda utilizzando un server HTTP locale da utilizzare con o. AWS CLI SDKs

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

Utilizzate il AWS Serverless Application Model `sam local generate-event` sottocomando Command Line Interface (AWS SAMCLI) per generare esempi di payload di eventi supportati. Servizi AWS Potete quindi modificare e passare questi eventi alle risorse locali per i test.
+ Per un'introduzione a AWS SAMCLI, vedere [Che cos'è il? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)
+ Per un elenco delle opzioni di `sam local generate-event` comando, vedere[sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

Un *evento* è un oggetto JSON che viene generato quando un Servizio AWS esegue un'azione o un'attività. Questi eventi contengono informazioni specifiche, come i dati elaborati o il timestamp dell'evento. La maggior parte Servizi AWS genera eventi e gli eventi di ogni servizio sono formattati in modo univoco per il relativo servizio.

Gli eventi generati da un servizio vengono passati ad altri servizi come fonte di *eventi*. Ad esempio, un articolo inserito in un bucket Amazon Simple Storage Service (Amazon S3) può generare un evento. Questo evento può quindi essere utilizzato come origine dell'evento per una AWS Lambda funzione che elabora ulteriormente i dati.

Gli eventi generati con `sam local generate-event` sono formattati nella stessa struttura degli eventi effettivi creati dal AWS servizio. È possibile modificare il contenuto di questi eventi e utilizzarli per testare le risorse dell'applicazione.

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

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

Prima dell'uso`sam local generate-event`, 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).

## Genera eventi di esempio
<a name="using-sam-cli-local-generate-event-generate"></a>

Usa il AWS SAMCLI `sam local generate-event` sottocomando per generare eventi per i supporti Servizi AWS.

**Per visualizzare un elenco di quelli supportati Servizi AWS**

1. Esegui il seguente codice:

   ```
   $ sam local generate-event
   ```

1.  Servizi AWS Verrà visualizzato l'elenco dei supportati. Di seguito è riportato un esempio:

   ```
   $ sam local generate-event
   ...
   Commands:
     alb
     alexa-skills-kit
     alexa-smart-home
     apigateway
     appsync
     batch
     cloudformation
     ...
   ```

**Per generare un evento locale**

1. Esegui `sam local generate-event` e fornisci il nome del servizio supportato. Verrà visualizzato un elenco di tipi di eventi che è possibile generare. Di seguito è riportato un esempio:

   ```
   $ sam local generate-event s3
   
   Usage: sam local generate-event s3 [OPTIONS] COMMAND [ARGS]...
   
   Options:
     -h, --help  Show this message and exit.
   
   Commands:
     batch-invocation  Generates an Amazon S3 Batch Operations Invocation Event
     delete            Generates an Amazon S3 Delete Event
     put               Generates an Amazon S3 Put Event
   ```

1. Per generare l'evento di esempio, esegui`sam local generate-event`, fornendo il servizio e il tipo di evento.

   ```
   $ sam local generate-event <service> <event>
   ```

   Di seguito è riportato un esempio:

   ```
   $ sam local generate-event s3 put
   {
     "Records": [
       {
         "eventVersion": "2.0",
         "eventSource": "aws:s3",
         "awsRegion": "us-east-1",
         "eventTime": "1970-01-01T00:00:00.000Z",
         "eventName": "ObjectCreated:Put",
         "userIdentity": {
           "principalId": "EXAMPLE"
         },
         "requestParameters": {
           "sourceIPAddress": "127.0.0.1"
         },
         "responseElements": {
           "x-amz-request-id": "EXAMPLE123456789",
           "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
         },
         "s3": {
           "s3SchemaVersion": "1.0",
           "configurationId": "testConfigRule",
           "bucket": {
             "name": "sam-s3-demo-bucket",
             "ownerIdentity": {
               "principalId": "EXAMPLE"
             },
             "arn": "arn:aws:s3:::sam-s3-demo-bucket"
           },
           "object": {
             "key": "test/key",
             "size": 1024,
             "eTag": "0123456789abcdef0123456789abcdef",
             "sequencer": "0A1B2C3D4E5F678901"
           }
         }
       }
     ]
   }
   ```

Questi eventi di esempio contengono valori segnaposto. È possibile modificare questi valori in modo che facciano riferimento alle risorse effettive dell'applicazione o ai valori per facilitare i test locali.

**Per modificare un evento di esempio**

1. È possibile modificare gli eventi di esempio al prompt dei comandi. Per visualizzare le opzioni disponibili, esegui quanto segue:

   ```
   $ sam local generate-event <service> <event> --help
   ```

   Di seguito è riportato un esempio:

   ```
   $ sam local generate-event s3 put --help
   
   Usage: sam local generate-event s3 put [OPTIONS]
   
   Options:
     --region TEXT       Specify the region name you'd like, otherwise the
                         default = us-east-1
     --partition TEXT    Specify the partition name you'd like, otherwise the
                         default = aws
     --bucket TEXT       Specify the bucket name you'd like, otherwise the
                         default = example-bucket
     --key TEXT          Specify the key name you'd like, otherwise the default =
                         test/key
     --debug             Turn on debug logging to print debug message generated
                         by AWS SAM CLI and display timestamps.
     --config-file TEXT  Configuration file containing default parameter values.
                         [default: samconfig.toml]
     --config-env TEXT   Environment name specifying default parameter values in
                         the configuration file.  [default: default]
     -h, --help          Show this message and exit.
   ```

1. Utilizzate una di queste opzioni al prompt dei comandi per modificare il payload dell'evento di esempio. Di seguito è riportato un esempio:

   ```
   $ sam local generate-event s3 put--bucket sam-s3-demo-bucket
   
   {
     "Records": [
       {
         "eventVersion": "2.0",
         "eventSource": "aws:s3",
         "awsRegion": "us-east-1",
         "eventTime": "1970-01-01T00:00:00.000Z",
         "eventName": "ObjectCreated:Put",
         "userIdentity": {
           "principalId": "EXAMPLE"
         },
         "requestParameters": {
           "sourceIPAddress": "127.0.0.1"
         },
         "responseElements": {
           "x-amz-request-id": "EXAMPLE123456789",
           "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
         },
         "s3": {
           "s3SchemaVersion": "1.0",
           "configurationId": "testConfigRule",
           "bucket": {
             "name": "sam-s3-demo-bucket",
             "ownerIdentity": {
               "principalId": "EXAMPLE"
             },
             "arn": "arn:aws:s3:::sam-s3-demo-bucket"
           },
           "object": {
             "key": "test/key",
             "size": 1024,
             "eTag": "0123456789abcdef0123456789abcdef",
             "sequencer": "0A1B2C3D4E5F678901"
           }
         }
       }
     ]
   }
   ```

## Usa gli eventi generati per i test locali
<a name="using-sam-cli-local-generate-event-use"></a>

Salva gli eventi generati localmente e usa altri `sam local` sottocomandi per eseguire i test.

**Per salvare gli eventi generati localmente**
+ Esegui il seguente codice:

  ```
  $ sam local generate-event <service> <event> <event-option> > <filename.json>
  ```

  Di seguito è riportato un esempio di evento salvato come `s3.json` file nella `events` cartella del nostro progetto.

  ```
  sam-app$ sam local generate-event s3 put --bucket amzn-s3-demo-bucket > events/s3.json
  ```

**Per utilizzare un evento generato per i test locali**
+ Passa l'evento con altri `sam local` sottocomandi utilizzando l'`--event`opzione.

  Di seguito è riportato un esempio di utilizzo dell'`s3.json`evento per richiamare la nostra funzione Lambda localmente:

  ```
  sam-app$ sam local invoke --event events/s3.json S3JsonLoggerFunction
  
  Invoking src/handlers/s3-json-logger.s3JsonLoggerHandler (nodejs18.x)
  Local image is up-to-date
  Using local image: public.ecr.aws/lambda/nodejs:18-rapid-x86_64.
  
  Mounting /Users/.../sam-app/.aws-sam/build/S3JsonLoggerFunction as /var/task:ro,delegated, inside runtime container
  START RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128 Version: $LATEST
  END RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128
  REPORT RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128  Init Duration: 1.23 ms  Duration: 9371.93 ms      Billed Duration: 9372 ms        Memory Size: 128 MB     Max Memory Used: 128 MB
  ```

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

Per un elenco di tutte le `sam local generate-event` opzioni, consulta[sam local generate-event](sam-cli-command-reference-sam-local-generate-event.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*.

# 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*.

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

Utilizzate il AWS Serverless Application Model `sam local start-api` sottocomando Command Line Interface (AWS SAMCLI) per eseguire le AWS Lambda funzioni localmente e testarle tramite un host di server HTTP locale. Questo tipo di test è utile per le funzioni Lambda richiamate da un endpoint Amazon API Gateway.
+ Per un'introduzione a, consulta AWS SAMCLI [Che cos'è il? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)
+ Per un elenco delle opzioni di `sam local start-api` comando, vedere[sam local start-api](sam-cli-command-reference-sam-local-start-api.md).
+ Per un esempio di utilizzo `sam local start-api` 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**  
`sam local start-api`supporta funzioni durevoli con funzionalità di checkpoint e replay automatici. Le funzioni durevoli funzionano perfettamente con l'endpoint API Gateway locale.

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

Per utilizzarlo`sam local start-api`, 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 start-api`, 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).

## Usare sam local start-api
<a name="using-sam-cli-local-start-api-use"></a>

Quando si esegue`sam local start-api`, 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 avviare un server HTTP locale**

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

   ```
   $ sam local start-api <options>
   ```

1.  AWS SAMCLICrea le tue funzioni Lambda in un Docker contenitore locale. Quindi restituisce l'indirizzo locale dell'endpoint del server HTTP. Di seguito è riportato un esempio:

   ```
   $ sam local start-api
   
   Initializing the lambda functions containers.
   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
   Containers Initialization is done.
   Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
   You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template
   2023-04-12 14:41:05 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3000
   ```

1. È possibile richiamare la funzione Lambda tramite il browser o il prompt dei comandi. Di seguito è riportato un esempio:

   ```
   sam-app$ curl http://127.0.0.1:3000/hello
   {"message": "Hello world!"}%
   ```

1. Quando apporti modifiche al codice della funzione Lambda, considera quanto segue per aggiornare il server HTTP locale:
   + Se l'applicazione non dispone di una `.aws-sam` directory e la funzione utilizza un linguaggio interpretato, AWS SAMCLI aggiornerà automaticamente la funzione creando un nuovo contenitore e ospitandolo.
   + Se l'applicazione dispone di una `.aws-sam` directory, è necessario eseguirla `sam build` per aggiornare la funzione. Quindi esegui `sam local start-api` nuovamente per ospitare la funzione.
   + Se la tua funzione utilizza un linguaggio compilato o se il tuo progetto richiede un supporto complesso per la creazione di pacchetti, esegui la tua soluzione di compilazione per aggiornare la funzione. Quindi esegui `sam local start-api` nuovamente per ospitare la funzione.

### Funzioni Lambda che utilizzano gli autorizzatori Lambda
<a name="using-sam-cli-local-start-api-authorizers"></a>

**Nota**  
Questa funzionalità è nuova nella AWS SAMCLI versione 1.80.0. Per eseguire l'aggiornamento, consulta [Aggiornamento del AWS SAMCLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Per le funzioni Lambda che utilizzano gli autorizzatori Lambda, richiameranno AWS SAMCLI automaticamente l'autorizzatore Lambda prima di richiamare l'endpoint della funzione Lambda.

Di seguito è riportato un esempio di avvio di un server HTTP locale per una funzione che utilizza un autorizzatore Lambda:

```
$ sam local start-api
2023-04-17 15:02:13 Attaching import module proxy for analyzing dynamic imports

AWS SAM CLI does not guarantee 100% fidelity between authorizers locally
and authorizers deployed on AWS. Any application critical behavior should
be validated thoroughly before deploying to production.

Testing application behaviour against authorizers deployed on AWS can be done using the sam sync command.

Mounting HelloWorldFunction at http://127.0.0.1:3000/authorized-request [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template
2023-04-17 15:02:13 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:3000
2023-04-17 15:02:13 Press CTRL+C to quit
```

Quando richiami l'endpoint della funzione Lambda tramite il server HTTP locale, il primo richiama AWS SAMCLI l'autorizzazione Lambda. Se l'autorizzazione ha esito positivo, AWS SAMCLI invocherà l'endpoint della funzione Lambda. Di seguito è riportato un esempio:

```
$ curl http://127.0.0.1:3000/authorized-request --header "header:my_token"
{"message": "from authorizer"}%

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

Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container
START RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0 Version: $LATEST
END RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0
REPORT RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0    Init Duration: 1.08 ms    Duration: 628.26 msBilled Duration: 629 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
Invoking app.request_handler (python3.8)
Using local image: public.ecr.aws/lambda/python:3.8-rapid-x86_64.

Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container
START RequestId: fdc12255-79a3-4365-97e9-9459d06446ff Version: $LATEST
END RequestId: fdc12255-79a3-4365-97e9-9459d06446ff
REPORT RequestId: fdc12255-79a3-4365-97e9-9459d06446ff    Init Duration: 0.95 ms    Duration: 659.13 msBilled Duration: 660 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
No Content-Type given. Defaulting to 'application/json'.
2023-04-17 15:03:03 127.0.0.1 - - [17/Apr/2023 15:03:03] "GET /authorized-request HTTP/1.1" 200 -
```

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

### Riutilizza continuamente i contenitori per velocizzare le chiamate alle funzioni locali
<a name="using-sam-cli-local-start-api-options-warm"></a>

Per impostazione predefinita, AWS SAMCLI crea un nuovo contenitore ogni volta che la funzione viene richiamata tramite il server HTTP locale. Utilizzate l'`--warm-containers`opzione per riutilizzare automaticamente il contenitore per le chiamate di funzioni. Ciò velocizza il tempo necessario per AWS SAMCLI preparare la funzione Lambda per la chiamata locale. È possibile personalizzare ulteriormente questa opzione fornendo l'`eager`argomento or. `lazy`
+ `eager`— I contenitori per tutte le funzioni vengono caricati all'avvio e persistono tra una chiamata e l'altra.
+ `lazy`— I contenitori vengono caricati solo quando ogni funzione viene richiamata per la prima volta. Quindi persistono per ulteriori invocazioni.

Di seguito è riportato un esempio:

```
$ sam local start-api --warm-containers eager
```

Quando usi `--warm-containers` e modifichi il codice della funzione Lambda:
+ Se l'applicazione ha una `.aws-sam` directory, eseguila `sam build` per aggiornare il codice della funzione negli artefatti di build dell'applicazione.
+ Quando viene rilevata una modifica al codice, spegne AWS SAMCLI automaticamente il contenitore delle funzioni Lambda.
+ Quando richiami nuovamente la funzione, crea AWS SAMCLI automaticamente un nuovo contenitore.

### Specificate un'immagine del contenitore da usare per le funzioni Lambda
<a name="using-sam-cli-local-start-api-options-specify"></a>

Per impostazione predefinita, AWS SAMCLI utilizza immagini di base Lambda da Amazon Elastic Container Registry (Amazon ECR) per richiamare le funzioni localmente. Usa l'`--invoke-image`opzione per fare riferimento a un'immagine del contenitore personalizzata. Di seguito è riportato un esempio:

```
$ sam local start-api --invoke-image public.ecr.aws/sam/emu-python3.8
```

È possibile specificare la funzione da utilizzare con l'immagine del contenitore personalizzata. Di seguito è riportato un esempio:

```
$ sam local start-api --invoke-image Function1=amazon/aws/sam-cli-emulation-image-python3.8
```

### Specificate un modello da testare localmente
<a name="using-sam-cli-local-start-api-options-template"></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. Di seguito è riportato un esempio:

```
$ sam local start-api --template myTemplate.yaml
```

### Specificate l'ambiente di sviluppo host della vostra funzione Lambda
<a name="using-sam-cli-local-start-api-options-dev"></a>

Per impostazione predefinita, il `sam local start-api` sottocomando crea un server HTTP utilizzando `localhost` un indirizzo IP. `127.0.0.1` È possibile personalizzare questi valori se l'ambiente di sviluppo locale è isolato dal computer locale.

Utilizzate l'`--container-host`opzione per specificare un host. Di seguito è riportato un esempio:

```
$ sam local start-api --container-host host.docker.internal
```

Utilizzate l'`--container-host-interface`opzione per specificare l'indirizzo IP della rete host a cui devono collegarsi le porte del contenitore. Di seguito è riportato un esempio:

```
$ sam local start-api --container-host-interface 0.0.0.0
```

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

Se l'applicazione ha una `.aws-sam` directory in esecuzione`sam build`, assicuratevi di eseguirla `sam build` ogni volta che aggiornate il codice della funzione. Quindi, `sam local start-api` 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.

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

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

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

Usa il AWS SAMCLI sottocomando `sam local start-lambda` per richiamare la funzione Lambda tramite and. AWS CLI SDKs Questo comando avvia un endpoint locale che emula 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 start-lambda` comando, vedere[sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

**Nota**  
`sam local start-lambda`supporta funzioni durevoli con funzionalità di checkpoint e replay automatici. Le funzioni durevoli funzionano perfettamente con l'endpoint Lambda locale.

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

Per utilizzarlo`sam local start-lambda`, 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 start-lambda`, 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).

## Usare sam local start-lambda
<a name="using-sam-cli-local-start-lambda-use"></a>

Quando si esegue`sam local start-lambda`, 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 usare sam local start-lambda**

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

   ```
   $ sam local start-lambda <options>
   ```

1.  AWS SAMCLICrea le tue funzioni Lambda in un Docker contenitore locale. Quindi invia l'indirizzo locale all'endpoint del server HTTP. Di seguito è riportato un esempio:

   ```
   $ sam local start-lambda
   Initializing the lambda functions containers.
   Local image is up-to-date
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/hello_world as /var/task:ro,delegated, inside runtime container
   Containers Initialization is done.
   Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint.
   2023-04-13 07:25:43 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3001
   2023-04-13 07:25:43 Press CTRL+C to quit
   ```

1. Usa AWS CLI o SDKs per richiamare la funzione Lambda localmente.

   Di seguito è riportato un esempio di utilizzo di: AWS CLI

   ```
   $ aws lambda invoke --function-name "HelloWorldFunction" --endpoint-url "http://127.0.0.1:3001" --no-verify-ssl out.txt
       
   StatusCode: 200
   (END)
   ```

   Di seguito è riportato un esempio di utilizzo del AWS SDK comando forPython:

   ```
   import boto3
   from botocore.config import Config
   from botocore import UNSIGNED
   
   lambda_client = boto3.client('lambda',
                                endpoint_url="http://127.0.0.1:3001",
                                use_ssl=False,
                                verify=False,
                                config=Config(signature_version=UNSIGNED,
                                              read_timeout=1,
                                              retries={'max_attempts': 0}
                                              )
                               )
   lambda_client.invoke(FunctionName="HelloWorldFunction")
   ```

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

### Specificare un modello
<a name="using-sam-cli-local-start-lambda-options-template"></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. Di seguito è riportato un esempio:

```
$ sam local start-lambda --template myTemplate.yaml
```

Per ulteriori informazioni sui AWS SAM modelli, vedere[AWS SAM anatomia del modello](sam-specification-template-anatomy.md).

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

Se l'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 start-lambda` 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.

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

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

# Richiama localmente le funzioni Lambda con AWS SAM
<a name="serverless-sam-cli-using-invoke"></a>

Richiamare localmente una funzione Lambda prima del test o dell'implementazione nel cloud può avere una serie di vantaggi. Ti consente di testare più rapidamente la logica della tua funzione. I test innanzitutto a livello locale riducono la probabilità di identificare problemi durante i test nel cloud o durante l'implementazione, il che può aiutarvi a evitare costi inutili. Inoltre, i test locali semplificano l'esecuzione del debug.

È possibile richiamare la funzione Lambda localmente utilizzando [sam local invoke](sam-cli-command-reference-sam-local-invoke.md) il comando e fornendo l'ID logico della funzione e un file di eventi. **sam local invoke**accetta anche `stdin` come evento. Per ulteriori informazioni sugli eventi, consulta [Event](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-event) nella *AWS Lambda Developer Guide*. Per informazioni sui formati dei messaggi relativi agli eventi di diversi AWS servizi, consulta [Utilizzo AWS Lambda con altri servizi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html) nella *Guida per gli AWS Lambda sviluppatori*.

**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**  
Il **sam local invoke** comando corrisponde al comando AWS Command Line Interface [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html)(AWS CLI). È possibile utilizzare entrambi i comandi per richiamare una funzione Lambda.

È necessario eseguire il **sam local invoke** comando nella directory del progetto che contiene la funzione che si desidera richiamare.

 Esempi:

```
# Invoking function with event file
$ sam local invoke "Ratings" -e event.json

# Invoking function with event via stdin
$ echo '{"message": "Hey, are you there?" }' | sam local invoke --event - "Ratings"

# For more options
$ sam local invoke --help
```

## File di variabili di ambiente
<a name="serverless-sam-cli-using-invoke-environment-file"></a>

Per dichiarare localmente le variabili di ambiente che sovrascrivono i valori definiti nei modelli, procedi come segue:

1. Crea un JSON o un `.env` file che contenga le variabili di ambiente da sovrascrivere.

1. Usa l'`--env-vars`argomento per sovrascrivere i valori definiti nei tuoi modelli.

L'`--env-vars`opzione supporta due formati di file. Il formato del file viene rilevato automaticamente in base al contenuto del file.

### Dichiarazione delle variabili di ambiente con JSON
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Per dichiarare le variabili di ambiente che si applicano globalmente a tutte le risorse, specificate un `Parameters` oggetto come il seguente:

```
{
    "Parameters": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
        "STAGE": "dev"
    }
}
```

Per dichiarare variabili di ambiente diverse per ogni risorsa, specificate gli oggetti per ogni risorsa come segue:

```
{
    "MyFunction1": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
    },
    "MyFunction2": {
        "TABLE_NAME": "localtable",
        "STAGE": "dev"
    }
}
```

Quando si specificano oggetti per ogni risorsa, è possibile utilizzare i seguenti identificatori, elencati in ordine di precedenza dalla più alta alla più bassa:

1. `logical_id`

1. `function_id`

1. `function_name`

1. Identificatore di percorso completo

È possibile utilizzare entrambi i metodi precedenti per dichiarare le variabili di ambiente insieme in un unico file. In tal caso, le variabili di ambiente fornite per risorse specifiche hanno la precedenza sulle variabili di ambiente globali.

Salva le variabili di ambiente in un file JSON, ad esempio. `env.json`

### Dichiarazione delle variabili di ambiente con i file.env
<a name="serverless-sam-cli-using-invoke-environment-file-dotenv"></a>

Puoi anche usare un `.env` file per dichiarare le variabili di ambiente. Le variabili dichiarate in un `.env` file si applicano globalmente a tutte le funzioni, equivalenti all'`Parameters`oggetto in formato JSON.

```
TABLE_NAME=localtable
BUCKET_NAME=amzn-s3-demo-bucket
STAGE=dev
```

Il `.env` formato supporta commenti (righe che iniziano con`#`) e valori tra virgolette.

**Nota**  
Il `.env` formato supporta solo variabili di ambiente globali. Per dichiarare variabili di ambiente specifiche della funzione, utilizzate il formato JSON.

### Ignorare i valori delle variabili di ambiente
<a name="serverless-sam-cli-using-invoke-environment-file-override"></a>

Per sovrascrivere le variabili di ambiente con quelle definite nel file delle variabili di ambiente, utilizzate l'`--env-vars`argomento con i comandi **invoke** or**start-api**. Esempio:

```
# Using a JSON file
sam local invoke --env-vars env.json

# Using a .env file
sam local invoke --env-vars .env
```

## Livelli
<a name="serverless-sam-cli-using-invoke-layers"></a>

Se l'applicazione include livelli, per informazioni su come eseguire il debug dei problemi con i layer sull'host locale, consulta[Aumenta l'efficienza utilizzando i livelli Lambda con AWS SAM](serverless-sam-cli-layers.md).

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

Per un esempio pratico di invocazione di funzioni a livello locale, vedi [Modulo 2 - Esegui localmente](https://s12d.com/sam-ws-en-local) in *The* Complete Workshop. AWS SAM 

# API Gateway eseguito localmente con AWS SAM
<a name="serverless-sam-cli-using-start-api"></a>

L'esecuzione locale di Amazon API Gateway può offrire una serie di vantaggi. Ad esempio, l'esecuzione locale di API Gateway consente di testare gli endpoint API localmente prima della distribuzione nel AWS cloud. Se esegui prima il test localmente, spesso puoi ridurre i test e lo sviluppo nel cloud, il che può aiutare a ridurre i costi. Inoltre, l'esecuzione locale semplifica il debug. 

Per avviare un'istanza locale di API Gateway da utilizzare per testare la funzionalità di richiesta/risposta HTTP, utilizzate il `sam local start-api` AWS SAMCLI comando. Questa funzionalità include il ricaricamento a caldo in modo da poter sviluppare e iterare rapidamente le funzioni.

**Nota**  
Il *ricaricamento a caldo* avviene quando vengono aggiornati solo i file modificati e lo stato dell'applicazione rimane lo stesso. Al contrario, *il ricaricamento in tempo reale* avviene quando l'intera applicazione viene aggiornata e lo stato dell'applicazione viene perso.

Per istruzioni sull'uso del `sam local start-api` comando, vedere. [Introduzione ai test con sam local start-api](using-sam-cli-local-start-api.md)

Per impostazione predefinita, AWS SAM utilizza integrazioni AWS Lambda proxy e supporta sia i tipi di risorse che `HttpApi` i tipi di `Api` risorse. Per ulteriori informazioni sulle integrazioni proxy per i tipi di `HttpApi` risorse, consulta [Working with AWS Lambda proxy integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) nella *API Gateway Developer Guide*. Per ulteriori informazioni sulle integrazioni proxy con i tipi di `Api` risorse, consulta [Understand API Gateway Lambda Proxy](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-create-api-as-simple-proxy) Integration nella *API Gateway Developer Guide*.

**Esempio**:

```
$ sam local start-api
```

AWS SAM trova automaticamente tutte le funzioni all'interno del AWS SAM modello che hanno `HttpApi` o sono state definite fonti di `Api` eventi. Quindi, monta la funzione nei percorsi HTTP definiti.

Nell'`Api`esempio seguente, la `Ratings` funzione viene montata `ratings.py:handler()` su `/ratings` per `GET` le richieste:

```
Ratings:
  Type: AWS::Serverless::Function
  Properties:
    Handler: ratings.handler
    Runtime: python3.9
    Events:
      Api:
        Type: Api
        Properties:
          Path: /ratings
          Method: get
```

Ecco un esempio di `Api` risposta:

```
// Example of a Proxy Integration response
exports.handler = (event, context, callback) => {
    callback(null, {
        statusCode: 200,
        headers: { "x-custom-header" : "my custom header value" },
        body: "hello world"
    });
}
```

Se modifichi il codice della funzione, esegui il `sam build` comando for `sam local start-api` per rilevare le modifiche.

## File di variabili di ambiente
<a name="serverless-sam-cli-using-start-api-environment-variable"></a>

Per dichiarare localmente le variabili di ambiente che sovrascrivono i valori definiti nei modelli, procedi come segue:

1. Crea un file JSON che contenga le variabili di ambiente da sovrascrivere.

1. Usa l'`--env-vars`argomento per sovrascrivere i valori definiti nei tuoi modelli.

### Dichiarazione delle variabili di ambiente
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Per dichiarare variabili di ambiente che si applicano globalmente a tutte le risorse, specificate un `Parameters` oggetto come il seguente:

```
{
    "Parameters": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
        "STAGE": "dev"
    }
}
```

Per dichiarare variabili di ambiente diverse per ogni risorsa, specificate gli oggetti per ogni risorsa come segue:

```
{
    "MyFunction1": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
    },
    "MyFunction2": {
        "TABLE_NAME": "localtable",
        "STAGE": "dev"
    }
}
```

Quando si specificano oggetti per ogni risorsa, è possibile utilizzare i seguenti identificatori, elencati in ordine di precedenza dalla più alta alla più bassa:

1. `logical_id`

1. `function_id`

1. `function_name`

1. Identificatore di percorso completo

È possibile utilizzare entrambi i metodi precedenti per dichiarare le variabili di ambiente insieme in un unico file. In tal caso, le variabili di ambiente fornite per risorse specifiche hanno la precedenza sulle variabili di ambiente globali.

Salva le variabili di ambiente in un file JSON, ad esempio. `env.json`

### Ignorare i valori delle variabili di ambiente
<a name="serverless-sam-cli-using-start-api-environment-file-override"></a>

Per sovrascrivere le variabili di ambiente con quelle definite nel tuo file JSON, usa l'`--env-vars`argomento con i **invoke** comandi or. **start-api** Esempio:

```
$ sam local start-api --env-vars env.json
```

## Livelli
<a name="serverless-sam-cli-using-start-api-layers"></a>

Se l'applicazione include livelli, per informazioni su come eseguire il debug dei problemi con i layer sull'host locale, consulta[Aumenta l'efficienza utilizzando i livelli Lambda con AWS SAM](serverless-sam-cli-layers.md).

# Introduzione al cloud testing con sam remote test-event
<a name="using-sam-cli-remote-test-event"></a>

Utilizzate il AWS Serverless Application Model comando Command Line Interface (AWS SAM CLI) `sam remote test-event` per accedere e gestire eventi di test condivisibili per le vostre AWS Lambda funzioni.

*Per ulteriori informazioni sugli eventi di test condivisibili, consulta gli eventi di [test condivisibili nella Guida per gli](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) sviluppatori.AWS Lambda *

**Topics**
+ [Configura AWS SAMCLI da usare sam remote test-event](#using-sam-cli-remote-test-event-setup)
+ [Utilizzo del comando sam remote test-event](#using-sam-cli-remote-test-event-use)
+ [Utilizzo di eventi di test condivisibili](#using-sam-cli-remote-test-event-invoke)
+ [Gestione di eventi di test condivisibili](#using-sam-cli-remote-test-event-manage)

## Prerequisiti
<a name="using-sam-cli-remote-test-event-prerequisites"></a>

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

Se l'hai già AWS SAM CLI installato, ti consigliamo di eseguire l'aggiornamento alla versione più recente della AWS SAMCLI versione. Per ulteriori informazioni, consulta [Aggiornamento del AWS SAMCLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Prima dell'uso`sam remote test-event`, 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).
+ [Introduzione all'uso sam sync della sincronizzazione con Cloud AWS](using-sam-cli-sync.md).

## Configura AWS SAMCLI da usare sam remote test-event
<a name="using-sam-cli-remote-test-event-setup"></a>

Completa i seguenti passaggi di configurazione per utilizzare il AWS SAM CLI `sam remote test-event` comando:

1. **Configuralo AWS SAM CLI per utilizzare il tuo Account AWS**: gli eventi di test condivisibili per Lambda sono accessibili e gestiti dagli utenti all'interno della stessa. Account AWS Per configurare l' AWS SAM CLIutilizzo del tuo Account AWS, vedi. [Configurazione del AWS SAMCLI](using-sam-cli-configure.md)

1. **Configura le autorizzazioni per gli eventi di test condivisibili**: per accedere e gestire gli eventi di test condivisibili, devi disporre delle autorizzazioni appropriate. *Per ulteriori informazioni, consulta [Shareable test events](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) nella Developer Guide.AWS Lambda *

## Utilizzo del comando sam remote test-event
<a name="using-sam-cli-remote-test-event-use"></a>

Il AWS SAM CLI `sam remote test-event` comando fornisce i seguenti sottocomandi che potete utilizzare per accedere e gestire gli eventi di test condivisibili:
+ `delete`— Eliminare un evento di test condivisibile dal registro degli EventBridge schemi di Amazon.
+ `get`— Ottieni un evento di test condivisibile dal registro dello EventBridge schema.
+ `list`— Elenca gli eventi di test condivisibili esistenti per una funzione dal registro dello EventBridge schema.
+ `put`— Salva un evento da un file locale nel registro dello EventBridge schema.

Per elencare questi sottocomandi utilizzando il AWS SAM CLI, esegui quanto segue:

```
$ sam remote test-event --help
```

### Eliminazione di eventi di test condivisibili
<a name="using-sam-cli-remote-test-event-use-delete"></a>

È possibile eliminare un evento di test condivisibile utilizzando il `delete` sottocomando insieme a quanto segue:
+ Fornire il nome dell'evento di test condivisibile da eliminare.
+ Fornisci un ID accettabile della funzione Lambda associata all'evento.
+ Se si fornisce l'ID logico della funzione Lambda, è necessario fornire anche il nome dello AWS CloudFormation stack associato alla funzione Lambda.

Di seguito è riportato un esempio:

```
$ sam remote test-event delete HelloWorldFunction --stack-name sam-app --name demo-event
```

Per un elenco delle opzioni da utilizzare con il `delete` sottocomando, vedere. [sam remote test-event delete](sam-cli-command-reference-remote-test-event-delete.md) È inoltre possibile eseguire quanto segue da: AWS SAM CLI

```
$ sam remote test-event delete --help
```

### Ottenere eventi di test condivisibili
<a name="using-sam-cli-remote-test-event-use-get"></a>

È possibile ottenere un evento di test condivisibile dal registro dello EventBridge schema utilizzando il `get` sottocomando insieme a quanto segue:
+ Fornisci il nome dell'evento di test condivisibile da ottenere.
+ Fornisci un ID accettabile della funzione Lambda associata all'evento.
+ Se si fornisce l'ID logico della funzione Lambda, è necessario fornire anche il nome dello AWS CloudFormation stack associato alla funzione Lambda.

Di seguito è riportato un esempio che ottiene un evento di test condivisibile denominato `demo-event` associato alla funzione `HelloWorldFunction` Lambda dello `sam-app` stack. Questo comando stamperà l'evento sulla tua console.

```
$ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event
```

Per ottenere un evento di test condivisibile e salvarlo sul computer locale, usa l'`--output-file`opzione e fornisci un percorso e un nome del file. Di seguito è riportato un esempio che salva `demo-event` come `demo-event.json` nella directory di lavoro corrente:

```
$ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
```

Per un elenco delle opzioni da utilizzare con il `get` sottocomando, vedete[sam remote test-event get](sam-cli-command-reference-remote-test-event-get.md). È inoltre possibile eseguire quanto segue da: AWS SAM CLI

```
$ sam remote test-event get --help
```

### Elenco degli eventi di test condivisibili
<a name="using-sam-cli-remote-test-event-use-list"></a>

Puoi elencare tutti gli eventi di test condivisibili per una particolare funzione Lambda dal registro dello schema. Utilizzate il `list` sottocomando insieme a quanto segue:
+ Fornisci un ID accettabile della funzione Lambda associata agli eventi.
+ Se si fornisce l'ID logico della funzione Lambda, è necessario fornire anche il nome dello CloudFormation stack associato alla funzione Lambda.

Di seguito è riportato un esempio che ottiene un elenco di tutti gli eventi di test condivisibili associati alla funzione `HelloWorldFunction` Lambda dello stack: `sam-app`

```
$ sam remote test-event list HelloWorldFunction --stack-name sam-app
```

Per un elenco delle opzioni da utilizzare con il sottocomando, vedere. `list` [sam remote test-event list](sam-cli-command-reference-remote-test-event-list.md) È inoltre possibile eseguire quanto segue da: AWS SAM CLI

```
$ sam remote test-event list --help
```

### Salvataggio di eventi di test condivisibili
<a name="using-sam-cli-remote-test-event-use-put"></a>

È possibile salvare eventi di test condivisibili nel registro dello EventBridge schema. Utilizzate il `put` sottocomando insieme a quanto segue:
+ Fornisci un ID accettabile della funzione Lambda associata all'evento di test condivisibile.
+ Fornisci un nome per l'evento di test condivisibile.
+ Fornisci il percorso e il nome del file all'evento locale da caricare.

Di seguito è riportato un esempio che salva l'`demo-event.json`evento locale come `demo-event` e lo associa alla funzione `HelloWorldFunction` Lambda dello `sam-app` stack:

```
$ sam remote test-event put HelloWorldFunction --stack-name sam-app --name demo-event --file demo-event.json
```

Se nel registro dello EventBridge schema esiste un evento di test condivisibile con lo stesso nome, non lo AWS SAM CLI sovrascriverà. Per sovrascrivere, aggiungi l'`--force`opzione al tuo comando.

Per un elenco delle opzioni da utilizzare con il `put` sottocomando, vedere. [sam remote test-event put](sam-cli-command-reference-remote-test-event-put.md) È inoltre possibile eseguire quanto segue da: AWS SAM CLI

```
$ sam remote test-event put --help
```

## Utilizzo di eventi di test condivisibili
<a name="using-sam-cli-remote-test-event-invoke"></a>

Usa eventi di test condivisibili per testare le tue funzioni Lambda con Cloud AWS `sam remote invoke` il comando. Per ulteriori informazioni, consulta [Passa eventi di test condivisibili a una funzione Lambda nel cloud](using-sam-cli-remote-invoke.md#using-sam-cli-remote-invoke-shareable).

## Gestione di eventi di test condivisibili
<a name="using-sam-cli-remote-test-event-manage"></a>

Questo argomento contiene esempi su come gestire e utilizzare eventi di test condivisibili.

### Ottieni un evento di test condivisibile, modificalo e utilizzalo
<a name="using-sam-cli-remote-test-event-manage-example1"></a>

È possibile ottenere un evento di test condivisibile dal registro degli EventBridge schemi, modificarlo localmente e utilizzare l'evento di test locale con la funzione Lambda in. Cloud AWS Di seguito è riportato un esempio:

1. **Recupera l'evento di test condivisibile**: utilizza il `sam remote test-event get` sottocomando per recuperare un evento di test condivisibile per una funzione Lambda specifica e salvarlo localmente:

   ```
   $ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
   ```

1. **Modifica l'evento di test condivisibile**: utilizza un editor di testo a tua scelta per modificare l'evento di test condivisibile.

1. **Usa l'evento di test condivisibile**: utilizza il `sam remote invoke` comando e fornisci il percorso del file e il nome dell'evento con: `--event-file`

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file demo-event.json
   ```

### Ottieni un evento di test condivisibile, modificalo, caricalo e usalo
<a name="using-sam-cli-remote-test-event-manage-example2"></a>

È possibile ottenere un evento di test condivisibile dal registro dello EventBridge schema, modificarlo localmente e caricarlo. Quindi, puoi passare l'evento di test condivisibile direttamente alla tua funzione Lambda in. Cloud AWS Di seguito è riportato un esempio:

1. **Recupera l'evento di test condivisibile**: utilizza il `sam remote test-event get` sottocomando per recuperare un evento di test condivisibile per una funzione Lambda specifica e salvarlo localmente:

   ```
   $ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
   ```

1. **Modifica l'evento di test condivisibile**: utilizza un editor di testo a tua scelta per modificare l'evento di test condivisibile.

1. **Carica l'evento di test condivisibile**: utilizza il `sam remote test-event put` sottocomando per caricare e salvare l'evento di test condivisibile nel registro dello schema. EventBridge In questo esempio, utilizziamo l'`--force`opzione per sovrascrivere una versione precedente del nostro test condivisibile:

   ```
   $ sam remote test-event put HelloWorldFunction --stack-name sam-app --name demo-event --file demo-event.json --force
   ```

1. **Passa l'evento di test condivisibile alla tua funzione Lambda**: usa `sam remote invoke` il comando per passare l'evento di test condivisibile direttamente alla tua funzione Lambda in: Cloud AWS

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app --test-event-name demo-event
   ```

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

Utilizzate il AWS Serverless Application Model comando Command Line Interface (AWS SAM CLI) `sam remote invoke` per interagire con AWS le risorse supportate in Cloud AWS. È possibile utilizzare `sam remote invoke` per richiamare le seguenti risorse:
+ **Amazon Kinesis Data** Streams: invia record di dati alle applicazioni Kinesis Data Streams.
+ **AWS Lambda**— Richiama e passa eventi alle funzioni Lambda.
+ **Amazon Simple Queue Service (Amazon SQS): invia messaggi alle code di Amazon** SQS.
+ **AWS Step Functions**— Richiama le macchine a stati Step Functions per avviare l'esecuzione.

Per un'introduzione a AWS SAMCLI, vedere [Che cos'è il? AWS SAMCLI](what-is-sam-overview.md#what-is-sam-cli)

Per un esempio di utilizzo `sam remote invoke` durante un tipico flusso di lavoro di sviluppo, vedi[Fase 5: Interagite con la vostra funzione nel Cloud AWS](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-remote-invoke).

**Topics**
+ [Utilizzo del comando sam remote invoke](#using-sam-cli-remote-invoke-use)
+ [Utilizzo delle opzioni del comando sam remote invoke](#using-sam-cli-remote-invoke-options)
+ [Configura il file di configurazione del progetto](#using-sam-cli-remote-invoke-configure)
+ [Esempi](#using-sam-cli-remote-invoke-examples)
+ [Link correlati](#using-sam-cli-remote-invoke-links)

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

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

Ti consigliamo inoltre di eseguire l'aggiornamento alla versione più recente di. AWS SAMCLI Per ulteriori informazioni, consulta [Aggiornamento del AWS SAMCLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Prima dell'uso`sam remote 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).
+ [Introduzione all'uso sam sync della sincronizzazione con Cloud AWS](using-sam-cli-sync.md).

## Utilizzo del comando sam remote invoke
<a name="using-sam-cli-remote-invoke-use"></a>

Prima di utilizzare questo comando, la risorsa deve essere distribuita su. Cloud AWS

Utilizza la seguente struttura di comandi ed esegui dalla directory principale del progetto:

```
$ sam remote invoke <arguments> <options>
```

**Nota**  
Questa pagina mostrerà le opzioni fornite al prompt dei comandi. È inoltre possibile configurare le opzioni nel file di configurazione del progetto anziché passarle al prompt dei comandi. Per ulteriori informazioni, vedi [Configura le impostazioni del progetto](using-sam-cli-configure.md#using-sam-cli-configure-project).

Per una descrizione degli `sam remote invoke` argomenti e delle opzioni, vedere[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Utilizzo con Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-use-kinesis"></a>

È possibile inviare record di dati a un'applicazione Kinesis Data Streams. AWS SAM CLIInvierà il record di dati e restituirà uno shard ID e un numero di sequenza. Di seguito è riportato un esempio:

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world
	
	Putting record to Kinesis data stream KinesisStream                                                             
	Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide
	a JSON string as event                                                                                          
	{
	  "ShardId": "shardId-000000000000",
	  "SequenceNumber": "49646251411914806775980850790050483811301135051202232322"
	}%
```

**Per inviare un record di dati**

1. Fornisci un valore ID risorsa come argomento per l'applicazione Kinesis Data Streams. Per informazioni sulla risorsa valida IDs, consulta [Resource](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id) ID.

1. Fornisci il record di dati come evento da inviare all'applicazione Kinesis Data Streams. È possibile fornire l'evento dalla riga di comando utilizzando l'`--event`opzione o da un file utilizzando. `--event-file` Se non fornisci un evento, AWS SAM CLI invia un evento vuoto.

### Utilizzo con le funzioni Lambda
<a name="using-sam-cli-remote-invoke-use-lambda"></a>

Puoi richiamare una funzione Lambda nel cloud e passare un evento vuoto o fornire un evento dalla riga di comando o da un file. AWS SAM CLIInvocherà la funzione Lambda e restituirà la sua risposta. Di seguito è riportato un esempio:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app

Invoking Lambda Function HelloWorldFunction                                       
START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST
END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9
REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9  Duration: 6.62 ms       Billed Duration: 7 ms     Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 164.06 ms
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

**Per richiamare una funzione Lambda**

1. Fornisci un valore ID risorsa come argomento per la tua funzione Lambda. Per informazioni sulla risorsa valida IDs, consulta [Resource ID.](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id)

1. Fornisci un evento da inviare alla tua funzione Lambda. Puoi fornire l'evento dalla riga di comando utilizzando l'`--event`opzione o da un file utilizzando`--event-file`. Se non fornisci un evento, AWS SAM CLI invia un evento vuoto.

#### Funzioni Lambda configurate con lo streaming di risposte
<a name="using-sam-cli-remote-invoke-invoke-stream"></a>

Il `sam remote invoke` comando supporta le funzioni Lambda configurate per lo streaming di risposte. Puoi configurare una funzione Lambda per lo streaming delle risposte utilizzando la `FunctionUrlConfig` proprietà nei tuoi AWS SAM modelli. Quando si utilizza`sam remote invoke`, rileva AWS SAMCLI automaticamente la configurazione Lambda e la richiama con lo streaming di risposta.

Per vedere un esempio, consulta [Richiama una funzione Lambda configurata per lo streaming di risposte](#using-sam-cli-remote-invoke-examples-lambda-stream).

#### Passa eventi di test condivisibili a una funzione Lambda nel cloud
<a name="using-sam-cli-remote-invoke-shareable"></a>

Gli eventi di test condivisibili sono eventi di test che puoi condividere con altri nello stesso ambiente. Account AWS Per saperne di più, consulta [Shareable test events](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) nella *AWS Lambda Developer* Guide.

##### Accesso e gestione degli eventi di test condivisibili
<a name="using-sam-cli-remote-invoke-shareable-access"></a>

È possibile utilizzare il AWS SAM CLI `sam remote test-event` comando per accedere e gestire eventi di test condivisibili. Ad esempio, puoi usare `sam remote test-event` per fare quanto segue:
+ Recupera eventi di test condivisibili dal registro degli EventBridge schemi di Amazon.
+ Modifica gli eventi di test condivisibili localmente e caricali nel registro dello EventBridge schema.
+ Elimina gli eventi di test condivisibili dal registro dello EventBridge schema.

Per ulteriori informazioni, consulta [Introduzione al cloud testing con sam remote test-event](using-sam-cli-remote-test-event.md).

##### Passa un evento di test condivisibile a una funzione Lambda nel cloud
<a name="using-sam-cli-remote-invoke-shareable-pass"></a>

Per passare un evento di test condivisibile dal registro degli EventBridge schemi alla tua funzione Lambda nel cloud, usa l'opzione e fornisci `--test-event-name` il nome dell'evento di test condivisibile. Di seguito è riportato un esempio:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --test-event-name demo-event
```

Se salvi l'evento di test condivisibile localmente, puoi utilizzare l'`--event-file`opzione e fornire il percorso del file e il nome dell'evento di test locale. Di seguito è riportato un esempio:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file demo-event.json
```

### Using with Amazon SQS
<a name="using-sam-cli-remote-invoke-use-sqs"></a>

Puoi inviare messaggi alle code di Amazon SQS. AWS SAM CLIRestituisce quanto segue:
+ ID messaggio
+ MD5 del corpo del messaggio
+ Metadati di risposta

 Di seguito è riportato un esempio:

```
$ sam remote invoke MySqsQueue --stack-name sqs-example -event hello

Sending message to SQS queue MySqsQueue                                                                         
{
  "MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592",
  "MessageId": "05c7af65-9ae8-4014-ae28-809d6d8ec652"
}%
```

**Come inviare un messaggio**

1. Fornisci un valore ID risorsa come argomento per la coda Amazon SQS. Per informazioni sulla risorsa valida IDs, consulta [Resource](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id) ID.

1. Fornisci un evento da inviare alla tua coda Amazon SQS. Puoi fornire l'evento dalla riga di comando utilizzando l'`--event`opzione o da un file utilizzando. `--event-file` Se non fornisci un evento, AWS SAM CLI invia un evento vuoto.

### Utilizzo con Step Functions
<a name="using-sam-cli-remote-invoke-use-sf"></a>

È possibile richiamare una macchina a stati Step Functions per avviare l'esecuzione. AWS SAM CLIAttenderà il completamento del flusso di lavoro della macchina a stati e restituirà un output dell'ultimo passaggio dell'esecuzione. Di seguito è riportato un esempio:

```
$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example --event '{"is_developer": true}'

Invoking Step Function HelloWorldStateMachine                                                                   
"Hello Developer World"%
```

**Per richiamare una macchina a stati**

1. Fornisci un valore ID risorsa come argomento per la macchina a stati Step Functions. Per informazioni sulla risorsa valida IDs, vedere [Resource ID](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Fornisci un evento da inviare alla tua macchina a stati. È possibile fornire l'evento dalla riga di comando utilizzando l'`--event`opzione o da un file utilizzando`--event-file`. Se non fornisci un evento, AWS SAM CLI invia un evento vuoto.

## Utilizzo delle opzioni del comando sam remote invoke
<a name="using-sam-cli-remote-invoke-options"></a>

Questa sezione descrive alcune delle opzioni principali che è possibile utilizzare con il `sam remote invoke` comando. Per un elenco completo delle opzioni, consulta[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Passa un evento alla tua risorsa
<a name="using-sam-cli-remote-invoke-options-event"></a>

Usa le seguenti opzioni per passare eventi alle tue risorse nel cloud:
+ `--event`— Passa un evento dalla riga di comando.
+ `--event-file`— Passa un evento da un file.

#### Esempi Lambda
<a name="using-sam-cli-remote-invoke-options-event-lambda-examples"></a>

**Si usa `--event` per passare un evento alla riga di comando come valore di stringa:**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event '{"message": "hello!"}'

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab Version: $LATEST
END RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab
REPORT RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab  Duration: 16.41 ms      Billed Duration: 17 ms  Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 185.96 ms
{"statusCode":200,"body":"{\"message\":\"hello!\"}"}%
```

**`--event-file`Utilizzate per passare un evento da un file e fornire il percorso del file:**

```
$ cat event.json
			
{"message": "hello from file"}%    
			
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file event.json       

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 Version: $LATEST
END RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9
REPORT RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9  Duration: 21.15 ms      Billed Duration: 22 ms  Memory Size: 128 MB     Max Memory Used: 67 MB
{"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%
```

**Passa un evento usando`stdin`:**

```
$ cat event.json
			
{"message": "hello from file"}%    
                                                                       
$ cat event.json | sam remote invoke HelloWorldFunction --stack-name sam-app --event-file -

Reading event from stdin (you can also pass it from file with --event-file)                               
Invoking Lambda Function HelloWorldFunction                                                               
START RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a Version: $LATEST
END RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a
REPORT RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a  Duration: 1.36 ms       Billed Duration: 2 ms   Memory Size: 128 MB       Max Memory Used: 67 MB
{"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%
```

### Configura l'output di AWS SAMCLI risposta
<a name="using-sam-cli-remote-invoke-options-output"></a>

Quando si richiama una risorsa supportata con`sam remote invoke`, AWS SAMCLI restituisce una risposta che contiene quanto segue:
+ Metadati della **richiesta: metadati** associati alla richiesta. Ciò include l'ID della richiesta e l'ora di inizio della richiesta.
+ **Risposta della risorsa**: la risposta della risorsa dopo essere stata richiamata nel cloud.

È possibile utilizzare l'`--output`opzione per configurare la risposta AWS SAM CLI in uscita. Sono disponibili i seguenti valori di opzione:
+ `json`— I metadati e la risposta delle risorse vengono restituiti in una JSON struttura. La risposta contiene l'SDKoutput completo.
+ `text`— I metadati vengono restituiti nella struttura del testo. La risposta della risorsa viene restituita nel formato di output della risorsa.

Di seguito è riportato un esempio di `json` output:

```
$ sam remote invoke --stack-name sam-app --output json

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
{
  "ResponseMetadata": {
    "RequestId": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "date": "Mon, 19 Jun 2023 17:15:46 GMT",
      "content-type": "application/json",
      "content-length": "57",
      "connection": "keep-alive",
      "x-amzn-requestid": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41",
      "x-amzn-remapped-content-length": "0",
      "x-amz-executed-version": "$LATEST",
      "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==",
      "x-amzn-trace-id": "root=1-64908d42-17dab270273fcc6b527dd6b8;sampled=0;lineage=2301f8dc:0"
    },
    "RetryAttempts": 0
  },
  "StatusCode": 200,
  "LogResult": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==",
  "ExecutedVersion": "$LATEST",
  "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}"
}%
```

Quando si specifica un `json` output, viene restituita l'intera risposta a`stdout`. Di seguito è riportato un esempio:

```
$ sam remote invoke --stack-name sam-app --output json 1> stdout.log

Invoking Lambda Function HelloWorldFunction           
                                                                                                                                                                                                          
$ cat stdout.log
			
{
  "ResponseMetadata": {
    "RequestId": "d30d280f-8188-4372-bc94-ce0f1603b6bb",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "date": "Mon, 19 Jun 2023 17:35:56 GMT",
      "content-type": "application/json",
      "content-length": "57",
      "connection": "keep-alive",
      "x-amzn-requestid": "d30d280f-8188-4372-bc94-ce0f1603b6bb",
      "x-amzn-remapped-content-length": "0",
      "x-amz-executed-version": "$LATEST",
      "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=",
      "x-amzn-trace-id": "root=1-649091fc-771473c7778689627a6122b7;sampled=0;lineage=2301f8dc:0"
    },
    "RetryAttempts": 0
  },
  "StatusCode": 200,
  "LogResult": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=",
  "ExecutedVersion": "$LATEST",
  "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}"
}%
```

Di seguito è riportato un esempio di `text` output:

```
$ sam remote invoke --stack-name sam-app --output text

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 Version: $LATEST
END RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6
REPORT RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6  Duration: 9.13 ms       Billed Duration: 10 ms  Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 165.50 ms
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

Quando si specifica un `text` output, viene restituito l'output del runtime della funzione Lambda (ad esempio, i log). `stderr` Il payload della funzione Lambda viene restituito a. `stdout` Di seguito è riportato un esempio:

```
$ sam remote invoke --stack-name sam-app --output text 2> stderr.log

{"statusCode":200,"body":"{\"message\":\"hello world\"}"}% 
                                                                                                                                                                                                     
$ cat stderr.log

Invoking Lambda Function HelloWorldFunction
START RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 Version: $LATEST
END RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891
REPORT RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891  Duration: 40.62 ms      Billed Duration: 41 ms  Memory Size: 128 MB     Max Memory Used: 68 MB

$ sam remote invoke --stack-name sam-app --output text 1> stdout.log
 
Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd Version: $LATEST
END RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd
REPORT RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd  Duration: 2.31 ms       Billed Duration: 3 ms   Memory Size: 128 MB     Max Memory Used: 67 MB

$ cat stdout.log

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

### Personalizza i parametri Boto3
<a name="using-sam-cli-remote-invoke-options-boto3"></a>

Infatti`sam remote invoke`, AWS SAM CLI utilizza l' AWS SDK for Python (Boto3) per interagire con le tue risorse nel cloud. È possibile utilizzare l'opzione per personalizzare i parametri. `--parameter` Boto3 Per un elenco dei parametri supportati che è possibile personalizzare, vedere`--parameter`.

#### Esempi
<a name="using-sam-cli-remote-invoke-options-boto3-examples"></a>

**Invoca una funzione Lambda per convalidare i valori dei parametri e verificare le autorizzazioni:**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="DryRun"
```

**Usa l'`--parameter`opzione più volte in un unico comando per fornire più parametri:**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="Event" --parameter LogType="None"
```

### Altre opzioni
<a name="using-sam-cli-remote-invoke-options-other"></a>

Per un elenco completo delle `sam remote invoke` opzioni, consulta[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

## Configura il file di configurazione del progetto
<a name="using-sam-cli-remote-invoke-configure"></a>

Per configurare `sam remote invoke` nel tuo file di configurazione, `remote_invoke` usalo nella tua tabella. Di seguito è riportato un esempio di `samconfig.toml` file che configura i valori predefiniti per il `sam remote invoke` comando.

```
...
version =0.1

[default]
...
[default.remote_invoke.parameters]
stack_name = "cloud-app"
event = '{"message": "Hello!"}'
```

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

Per un esempio di base di utilizzo`sam remote invoke`, consulta [Testing AWS Lambda functions with AWS SAM remote](https://aws.amazon.com/blogs/compute/testing-aws-lambda-functions-with-aws-sam-remote-invoke/) nel *blog di AWS Compute*.

### Esempi di Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-examples-kinesis"></a>

#### Esempi di base
<a name="using-sam-cli-remote-invoke-examples-kinesis-basic"></a>

**Invia un record di dati a un'applicazione Kinesis Data Streams da un file. L'applicazione Kinesis Data Streams viene identificata fornendo un ARN per l'ID della risorsa:**

```
$ sam remote invoke arn:aws:kinesis:us-west-2:01234567890:stream/kinesis-example-KinesisStream-BgnLcAey4xUQ --event-file event.json
```

**Invia un evento fornito dalla riga di comando a un'applicazione Kinesis Data Streams:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world

Putting record to Kinesis data stream KinesisStream                                                             
Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide
a JSON string as event                                                                                          
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980903986194508740483329854174920706"
}%
```

**Ottieni l'ID fisico dell'applicazione Kinesis Data Streams. Quindi, fornisci un evento nella riga di comando:**

```
$ sam list resources --stack-name kinesis-example --output json

[
  {
    "LogicalResourceId": "KinesisStream",
    "PhysicalResourceId": "kinesis-example-KinesisStream-ZgnLcQey4xUQ"
  }
]

$ sam remote invoke kinesis-example-KinesisStream-ZgnLcQey4xUQ --event hello

Putting record to Kinesis data stream KinesisStream                                                             
Auto converting value 'hello' into JSON '"hello"'. If you don't want auto-conversion, please provide a JSON     
string as event                                                                                                 
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904340716841045751814812900261890"
}%
```

**Fornisci una stringa JSON nella riga di comando come evento:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"method": "GET", "body": ""}'                      

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904492868617924990209230536441858"
}%
```

**Invia un evento vuoto all'applicazione Kinesis Data Streams:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904866469008589597168190416224258"
}%
```

**Restituisci la AWS SAM CLI risposta in formato JSON:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980905078409420803696667195489648642",
  "ResponseMetadata": {
    "RequestId": "ebbbd307-3e9f-4431-b67c-f0715e9e353e",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "ebbbd307-3e9f-4431-b67c-f0715e9e353e",
      "x-amz-id-2": "Q3yBcgTwtPaQTV26IKclbECmZikUYOzKY+CzcxA84ZHgCkc5T2N/ITWg6RPOQcWw8Gn0tNPcEJBEHyVVqboJAPgCritqsvCu",
      "date": "Thu, 09 Nov 2023 18:13:10 GMT",
      "content-type": "application/x-amz-json-1.1",
      "content-length": "110"
    },
    "RetryAttempts": 0
  }
}%
```

**Restituisce l'output JSON su stdout:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json 1> stdout.log

Putting record to Kinesis data stream KinesisStream                                                             

$ cat stdout.log
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980906397777867595039988349006774274",
  "ResponseMetadata": {
    "RequestId": "f4290006-d84b-b1cd-a9ee-28306eeb2939",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "f4290006-d84b-b1cd-a9ee-28306eeb2939",
      "x-amz-id-2": "npCqz+IBKpoL4sQ1ClbUmxuJlbeA24Fx1UgpIrS6mm2NoIeV2qdZSN5AhNurdssykXajBrXaC9anMhj2eG/h7Hnbf+bPuotU",
      "date": "Thu, 09 Nov 2023 18:33:26 GMT",
      "content-type": "application/x-amz-json-1.1",
      "content-length": "110"
    },
    "RetryAttempts": 0
  }
}%
```

### Esempi Lambda
<a name="using-sam-cli-remote-invoke-examples-lambda"></a>

#### Esempi di base
<a name="using-sam-cli-remote-invoke-examples-lambda-basic"></a>

**Invoca una funzione Lambda fornendo l'ARN come ID di risorsa:**

```
$ sam remote invoke arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-ohRFEn2RuAvp
```

**Invoca una funzione Lambda fornendo l'ID logico come ID di risorsa:**

È inoltre necessario fornire il nome dello CloudFormation stack utilizzando l'opzione. `--stack-name` Di seguito è riportato un esempio:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app
```

Se l'applicazione contiene una sola funzione Lambda, non è necessario specificarne l'ID logico. Puoi fornire solo l'`--stack-name`opzione. Di seguito è riportato un esempio:

```
$ sam remote invoke --stack-name sam-app
```

**Invoca una funzione Lambda fornendo l'ID fisico come ID della risorsa:**

L'ID fisico viene creato quando si distribuisce utilizzando. CloudFormation

```
$ sam remote invoke sam-app-HelloWorldFunction-TZvxQRFNv0k4
```

**Invoca una funzione Lambda di uno stack secondario:**

Per questo esempio, la nostra applicazione contiene la seguente struttura di directory:

```
lambda-example
├── childstack
│   ├── function
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── template.yaml
├── events
│   └── event.json
├── samconfig.toml
└── template.yaml
```

Per richiamare la `childstack` nostra funzione Lambda, eseguiamo quanto segue:

```
$ sam remote invoke ChildStack/HelloWorldFunction --stack-name lambda-example

Invoking Lambda Function HelloWorldFunction                                                                     
START RequestId: 207a864b-e67c-4307-8478-365b004d4bcd Version: $LATEST
END RequestId: 207a864b-e67c-4307-8478-365b004d4bcd
REPORT RequestId: 207a864b-e67c-4307-8478-365b004d4bcd  Duration: 1.27 ms       Billed Duration: 2 ms   Memory Size: 128 MB     Max Memory Used: 36 MB  Init Duration: 111.07 ms
{"statusCode": 200, "body": "{\"message\": \"Hello\", \"received_event\": {}}"}%
```

#### Richiama una funzione Lambda configurata per lo streaming di risposte
<a name="using-sam-cli-remote-invoke-examples-lambda-stream"></a>

In questo esempio, utilizziamo il AWS SAMCLI per inizializzare una nuova applicazione serverless che contiene una funzione Lambda configurata per lo streaming della risposta. Implementiamo la nostra applicazione Cloud AWS e la utilizziamo `sam remote invoke` per interagire con la nostra funzione nel cloud.

Iniziamo eseguendo il `sam init` comando per creare una nuova applicazione serverless. Selezioniamo il modello di avvio rapido **Lambda Response Streaming** e assegniamo un nome alla nostra applicazione. **lambda-streaming-nodejs-app**

```
$ sam init
	
	You can preselect a particular runtime or package type when using the `sam init` experience.
	Call `sam init --help` to learn more.
	
	Which template source would you like to use?
	        1 - AWS Quick Start Templates
	        2 - Custom Template Location
	Choice: 1
	
	Choose an AWS Quick Start application template
	        1 - Hello World Example
	        ...
	        9 - Lambda Response Streaming
	        ...
	        15 - Machine Learning
	Template: 9
	
	Which runtime would you like to use?
	        1 - go (provided.al2)
	        2 - nodejs18.x
	        3 - nodejs16.x
	Runtime: 2
	
	Based on your selections, the only Package type available is Zip.
	We will proceed to selecting the Package type as Zip.
	
	Based on your selections, the only dependency manager available is npm.
	We will proceed copying the template using npm.
	
	Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: ENTER
	
	Would you like to enable monitoring using CloudWatch Application Insights?
	For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER
	
	Project name [sam-app]: lambda-streaming-nodejs-app
	
	    -----------------------
	    Generating application:
	    -----------------------
	    Name: lambda-streaming-nodejs-app
	    Runtime: nodejs18.x
	    Architectures: x86_64
	    Dependency Manager: npm
	    Application Template: response-streaming
	    Output Directory: .
	    Configuration file: lambda-streaming-nodejs-app/samconfig.toml
	    
	    Next steps can be found in the README file at lambda-streaming-nodejs-app/README.md
	        
	
	Commands you can use next
	=========================
	[*] Create pipeline: cd lambda-streaming-nodejs-app && sam pipeline init --bootstrap
	[*] Validate SAM template: cd lambda-streaming-nodejs-app && sam validate
	[*] Test Function in the Cloud: cd lambda-streaming-nodejs-app && sam sync --stack-name {stack-name} --watch
```

 AWS SAMCLICrea il nostro progetto con la seguente struttura:

```
lambda-streaming-nodejs-app
	├── README.md
	├── __tests__
	│   └── unit
	│       └── index.test.js
	├── package.json
	├── samconfig.toml
	├── src
	│   └── index.js
	└── template.yaml
```

Di seguito è riportato un esempio del nostro codice di funzione Lambda:

```
exports.handler = awslambda.streamifyResponse(
	  async (event, responseStream, context) => {
	    const httpResponseMetadata = {
	      statusCode: 200,
	      headers: {
	        "Content-Type": "text/html",
	        "X-Custom-Header": "Example-Custom-Header"
	      }
	    };
	
	    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
	    // It's recommended to use a `pipeline` over the `write` method for more complex use cases.
	    // Learn more: https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html
	    responseStream.write("<html>");
	    responseStream.write("<p>First write!</p>");
	
	    responseStream.write("<h1>Streaming h1</h1>");
	    await new Promise(r => setTimeout(r, 1000));
	    responseStream.write("<h2>Streaming h2</h2>");
	    await new Promise(r => setTimeout(r, 1000));
	    responseStream.write("<h3>Streaming h3</h3>");
	    await new Promise(r => setTimeout(r, 1000));
	
	    // Long strings will be streamed
	    const loremIpsum1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.";
	    responseStream.write(`<p>${loremIpsum1}</p>`);
	    await new Promise(r => setTimeout(r, 1000));
	
	    responseStream.write("<p>DONE!</p>");
	    responseStream.write("</html>");
	    responseStream.end();
	  }
	);
```

Di seguito è riportato un esempio del nostro `template.yaml` file. Lo streaming di risposta per la nostra funzione Lambda è configurato utilizzando la `FunctionUrlConfig` proprietà.

```
AWSTemplateFormatVersion: '2010-09-09'
	Transform: AWS::Serverless-2016-10-31
	
	Description: >
	  Sample SAM Template for lambda-streaming-nodejs-app
	  
	Resources:
	  StreamingFunction:
	    Type: AWS::Serverless::Function
	    Properties:
	      CodeUri: src/
	      Handler: index.handler
	      Runtime: nodejs18.x
	      Architectures:
	        - x86_64
	      Timeout: 10
	      FunctionUrlConfig:
	        AuthType: AWS_IAM
	        InvokeMode: RESPONSE_STREAM
	
	Outputs:
	  StreamingFunction:
	    Description: "Streaming Lambda Function ARN"
	    Value: !GetAtt StreamingFunction.Arn
	  StreamingFunctionURL:
	    Description: "Streaming Lambda Function URL"
	    Value: !GetAtt StreamingFunctionUrl.FunctionUrl
```

In genere, è possibile utilizzare `sam build` e `sam deploy --guided` creare e distribuire un'applicazione di produzione. In questo esempio, assumeremo un ambiente di sviluppo e utilizzeremo il `sam sync` comando per creare e distribuire la nostra applicazione.

**Nota**  
Il `sam sync` comando è consigliato per ambienti di sviluppo. Per ulteriori informazioni, consulta [Introduzione all'uso sam sync della sincronizzazione con Cloud AWS](using-sam-cli-sync.md).

Prima dell'esecuzione`sam sync`, verifichiamo che il nostro progetto sia configurato correttamente nel nostro `samconfig.toml` file. Soprattutto, verifichiamo i valori di `stack_name` e`watch`. Con questi valori specificati nel nostro file di configurazione, non è necessario fornirli nella riga di comando.

```
version = 0.1
	
	[default]
	[default.global.parameters]
	stack_name = "lambda-streaming-nodejs-app"
	
	[default.build.parameters]
	cached = true
	parallel = true
	
	[default.validate.parameters]
	lint = true
	
	[default.deploy.parameters]
	capabilities = "CAPABILITY_IAM"
	confirm_changeset = true
	resolve_s3 = true
	s3_prefix = "lambda-streaming-nodejs-app"
	region = "us-west-2"
	image_repositories = []
	
	[default.package.parameters]
	resolve_s3 = true
	
	[default.sync.parameters]
	watch = true
	
	[default.local_start_api.parameters]
	warm_containers = "EAGER"
	
	[default.local_start_lambda.parameters]
	warm_containers = "EAGER"
```

Successivamente, eseguiamo `sam sync` la creazione e la distribuzione della nostra applicazione. Poiché l'`--watch`opzione è configurata nel nostro file di configurazione, AWS SAMCLI creerà la nostra applicazione, distribuirà la nostra applicazione e controllerà le modifiche.

```
$ sam sync
	
	The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code   
	without                                                                                                   
	performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.               
	**The sync command should only be used against a development stack**.                                     
	                                                                                                          
	Queued infra sync. Waiting for in progress code syncs to complete...                                      
	Starting infra sync.                                                                                      
	Building codeuri:                                                                                         
	/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture: x86_64 functions: StreamingFunction  
	package.json file not found. Continuing the build without dependencies.                                   
	Running NodejsNpmBuilder:CopySource                                                                       
	
	Build Succeeded
	
	Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp.
	Execute the following command to deploy the packaged template
	sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp --stack-name <YOUR STACK NAME>
	
	
	        Deploying with following values
	        ===============================
	        Stack name                   : lambda-streaming-nodejs-app
	        Region                       : us-west-2
	        Disable rollback             : False
	        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
	        Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
	        Parameter overrides          : {}
	        Signing Profiles             : null
	
	Initiating deployment
	=====================
	
	
	2023-06-20 12:11:16 - Waiting for stack create/update to complete
	
	CloudFormation events from stack operations (refresh every 0.5 seconds)
	-----------------------------------------------------------------------------------------------------
	ResourceStatus            ResourceType              LogicalResourceId         ResourceStatusReason    
	-----------------------------------------------------------------------------------------------------
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   lambda-streaming-         Transformation          
	                          ack                       nodejs-app                succeeded               
	CREATE_IN_PROGRESS        AWS::IAM::Role            StreamingFunctionRole     -                       
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   AwsSamAutoDependencyLay   -                       
	                          ack                       erNestedStack                                     
	CREATE_IN_PROGRESS        AWS::IAM::Role            StreamingFunctionRole     Resource creation       
	                                                                              Initiated               
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   AwsSamAutoDependencyLay   Resource creation       
	                          ack                       erNestedStack             Initiated               
	CREATE_COMPLETE           AWS::IAM::Role            StreamingFunctionRole     -                       
	CREATE_COMPLETE           AWS::CloudFormation::St   AwsSamAutoDependencyLay   -                       
	                          ack                       erNestedStack                                     
	CREATE_IN_PROGRESS        AWS::Lambda::Function     StreamingFunction         -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Function     StreamingFunction         Resource creation       
	                                                                              Initiated               
	CREATE_COMPLETE           AWS::Lambda::Function     StreamingFunction         -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Url          StreamingFunctionUrl      -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Url          StreamingFunctionUrl      Resource creation       
	                                                                              Initiated               
	CREATE_COMPLETE           AWS::Lambda::Url          StreamingFunctionUrl      -                       
	CREATE_COMPLETE           AWS::CloudFormation::St   lambda-streaming-         -                       
	                          ack                       nodejs-app                                        
	-----------------------------------------------------------------------------------------------------
	
	CloudFormation outputs from deployed stack
	-------------------------------------------------------------------------------------------------------
	Outputs                                                                                               
	-------------------------------------------------------------------------------------------------------
	Key                 StreamingFunction                                                                 
	Description         Streaming Lambda Function ARN                                                     
	Value               arn:aws:lambda:us-west-2:012345678910:function:lambda-streaming-nodejs-app-       
	StreamingFunction-gUmhO833A0vZ                                                                        
	
	Key                 StreamingFunctionURL                                                              
	Description         Streaming Lambda Function URL                                                     
	Value               https://wxgkcc2dyntgtrwhf2dgdcvylu0rnnof.lambda-url.us-west-2.on.aws/             
	-------------------------------------------------------------------------------------------------------
	
	                                                                                                          
	Stack creation succeeded. Sync infra completed.                                                           
	                                                                                                          
	Infra sync completed.
```

Ora che la nostra funzione è implementata nel cloud, possiamo usarla `sam remote invoke` per interagire con la nostra funzione. Rileva AWS SAMCLI automaticamente che la nostra funzione è configurata per lo streaming di risposte e inizia immediatamente a emettere una risposta in streaming della nostra funzione in tempo reale.

```
$ sam remote invoke StreamingFunction
	
	Invoking Lambda Function StreamingFunction                                              
	{"statusCode":200,"headers":{"Content-Type":"text/html","X-Custom-Header":"Example-Custom-Header"}}<html><p>First write!</p><h1>Streaming h1</h1><h2>Streaming h2</h2><h3>Streaming h3</h3><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.</p><p>DONE!</p></html>START RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 Version: $LATEST
	END RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4
	REPORT RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4  Duration: 4088.66 ms    Billed Duration: 4089 ms        Memory Size: 128 MB     Max Memory Used: 68 MB  Init Duration: 168.45 ms
```

Quando modifichiamo il codice della nostra funzione, rileva e AWS SAMCLI implementa immediatamente le nostre modifiche. Ecco un esempio dell' AWS SAMCLIoutput dopo aver apportato modifiche al nostro codice di funzione:

```
Syncing Lambda Function StreamingFunction...                                             
	Building codeuri:                                                                        
	/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture:    
	x86_64 functions: StreamingFunction                                                      
	package.json file not found. Continuing the build without dependencies.                  
	Running NodejsNpmBuilder:CopySource                                                      
	Finished syncing Lambda Function StreamingFunction.                                      
	Syncing Layer StreamingFunctione9cfe924DepLayer...                                       
	SyncFlow [Layer StreamingFunctione9cfe924DepLayer]: Skipping resource update as the      
	content didn't change                                                                    
	Finished syncing Layer StreamingFunctione9cfe924DepLayer.
```

Ora possiamo `sam remote invoke` riutilizzarlo per interagire con la nostra funzione nel cloud e testare le nostre modifiche.

### Esempi SQS
<a name="using-sam-cli-remote-invoke-examples-sqs"></a>

#### Esempi di base
<a name="using-sam-cli-remote-invoke-examples-sqs-basic"></a>

**Richiama una coda Amazon SQS fornendo l'ARN come ID di risorsa:**

```
$ sam remote invoke arn:aws:sqs:us-west-2:01234567890:sqs-example-4DonhBsjsW1b --event '{"hello": "world"}' --output json

Sending message to SQS queue MySqsQueue                                                                         
{
  "MD5OfMessageBody": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9",
  "MessageId": "4f464cdd-15ef-4b57-bd72-3ad225d80adc",
  "ResponseMetadata": {
    "RequestId": "95d39377-8323-5ef0-9223-ceb198bd09bd",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "95d39377-8323-5ef0-9223-ceb198bd09bd",
      "date": "Wed, 08 Nov 2023 23:27:26 GMT",
      "content-type": "application/x-amz-json-1.0",
      "content-length": "106",
      "connection": "keep-alive"
    },
    "RetryAttempts": 0
  }
}%
```

### Esempi di Step Functions
<a name="using-sam-cli-remote-invoke-examples-sf"></a>

#### Esempi di base
<a name="using-sam-cli-remote-invoke-examples-sf-basic"></a>

**Richiama una macchina a stati fornendo il suo ID fisico come ID di risorsa:**

Innanzitutto, `sam list resources` per ottenere il nostro ID fisico, utilizziamo:

```
$ sam list resources --stack-name state-machine-example --output json

[
  {
    "LogicalResourceId": "HelloWorldStateMachine",
    "PhysicalResourceId": "arn:aws:states:us-west-2:513423067560:stateMachine:HelloWorldStateMachine-z69tFEUx0F66"
  },
  {
    "LogicalResourceId": "HelloWorldStateMachineRole",
    "PhysicalResourceId": "simple-state-machine-HelloWorldStateMachineRole-PduA0BDGuFXw"
  }
]
```

Successivamente, invochiamo la nostra macchina a stati utilizzando l'ID fisico come ID di risorsa. Passiamo un evento alla riga di comando con l'`--event`opzione:

```
$ sam remote invoke arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66 --event '{"is_developer": true}'

Invoking Step Function arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66   
"Hello Developer World"%
```

**Invoca una macchina a stati passando un evento vuoto:**

```
$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example

Invoking Step Function HelloWorldStateMachine                                                                   
"Hello World"%
```

## Link correlati
<a name="using-sam-cli-remote-invoke-links"></a>

Per la documentazione relativa `sam remote invoke` e all'utilizzo di AWS SAMCLI, vedere quanto segue:
+ [sam remote invoke](sam-cli-command-reference-remote-invoke.md)
+ [AWS SAMCLIrisoluzione dei problemi](sam-cli-troubleshooting.md)

# Automatizza i test di integrazione locali con AWS SAM
<a name="serverless-sam-cli-using-automated-tests"></a>

Sebbene sia possibile utilizzarlo [Introduzione ai test con sam local invoke](using-sam-cli-local-invoke.md) per testare manualmente il codice, consente AWS SAM anche di testarlo utilizzando test di integrazione automatizzati. I test di integrazione consentono di rilevare i problemi nelle prime fasi del ciclo di sviluppo, migliorare la qualità del codice e risparmiare tempo riducendo al contempo i costi.

Per creare test di integrazione automatizzati AWS SAM, devi prima eseguire test sulle funzioni Lambda locali prima di distribuirli nel Cloud. AWS Il [Introduzione ai test con sam local start-lambda](using-sam-cli-local-start-lambda.md) comando avvia un endpoint locale che emula l'endpoint Invoke Lambda. Puoi richiamarlo dai tuoi test automatici. Poiché questo endpoint emula l'endpoint Lambda invoke, puoi scrivere i test una volta e poi eseguirli (senza alcuna modifica) sulla funzione Lambda locale o su una funzione Lambda distribuita. Puoi anche eseguire gli stessi test su uno stack distribuito nella tua pipeline. AWS SAM CI/CD 

Ecco come funziona il processo:

1. Avvia l'endpoint Lambda locale.

   Avvia l'endpoint Lambda locale eseguendo il seguente comando nella directory che contiene il modello: AWS SAM 

   ```
   sam local start-lambda
   ```

   Questo comando avvia un endpoint locale in cui viene emulato`http://127.0.0.1:3001`. AWS Lambda Puoi eseguire test automatici su questo endpoint Lambda locale. Quando richiami questo endpoint utilizzando AWS CLI o SDK, esegue localmente la funzione Lambda specificata nella richiesta e restituisce una risposta.

1. Esegui un test di integrazione sull'endpoint Lambda locale.

   Nel test di integrazione, puoi utilizzare l' AWS SDK per richiamare la funzione Lambda con i dati di test, attendere la risposta e verificare che la risposta sia quella prevista. Per eseguire il test di integrazione localmente, devi configurare l' AWS SDK per inviare una chiamata API Lambda Invoke per richiamare l'endpoint Lambda locale avviato nel passaggio precedente.

   Quello che segue è un esempio di Python (i quattro AWS SDKs linguaggi hanno configurazioni simili):

   ```
   import boto3
   import botocore
   
   # Set "running_locally" flag if you are running the integration test locally
   running_locally = True
   
   if running_locally:
   
       # Create Lambda SDK client to connect to appropriate Lambda endpoint
       lambda_client = boto3.client('lambda',
           region_name="us-west-2",
           endpoint_url="http://127.0.0.1:3001",
           use_ssl=False,
           verify=False,
           config=botocore.client.Config(
               signature_version=botocore.UNSIGNED,
               read_timeout=15,
               retries={'max_attempts': 0},
           )
       )
   else:
       lambda_client = boto3.client('lambda')
   
   
   # Invoke your Lambda function as you normally usually do. The function will run
   # locally if it is configured to do so
   response = lambda_client.invoke(FunctionName="HelloWorldFunction")
   
   # Verify the response
   assert response == "Hello World"
   ```

   È possibile utilizzare questo codice per testare le funzioni Lambda distribuite impostando su`running_locally`. `False` Questo configura l' AWS SDK a cui connettersi AWS Lambda nel cloud. AWS 

# Genera payload di eventi di esempio con AWS SAM
<a name="serverless-sam-cli-using-generate-event"></a>

Per testare le tue funzioni Lambda, puoi generare e personalizzare payload di eventi di esempio che imitano i dati che le tue funzioni Lambda riceveranno quando vengono attivate da altri servizi. AWS Ciò include servizi come API Gateway CloudFormation, Amazon S3 e altro ancora.

La generazione di payload di eventi di esempio consente di testare il comportamento della funzione Lambda con una varietà di input diversi senza dover lavorare in un ambiente live. Questo approccio consente inoltre di risparmiare tempo rispetto alla creazione manuale di esempi di eventi di AWS servizio per testare le funzioni. 

Per l'elenco completo dei servizi per i quali è possibile generare payload di eventi di esempio, utilizzate questo comando:

```
sam local generate-event --help
```

Per l'elenco delle opzioni che puoi usare per un particolare servizio, usa questo comando:

```
sam local generate-event [SERVICE] --help
```

Esempi:

```
#Generates the event from S3 when a new object is created
sam local generate-event s3 put

# Generates the event from S3 when an object is deleted
sam local generate-event s3 delete
```

# Test e debug di funzioni durevoli
<a name="test-and-debug-durable-functions"></a>

Il test e il debug delle funzioni durevoli a livello locale funzionano in modo simile alle normali funzioni Lambda, con supporto automatico per checkpoint e replay. Questa guida illustra gli scenari di test e le tecniche di risoluzione dei problemi più comuni.

## Flusso di lavoro di test locale
<a name="test-and-debug-durable-functions-workflow"></a>

Quando si testano funzioni durevoli a livello locale, il flusso di lavoro è diverso dalle normali funzioni Lambda:

**Flusso di lavoro durevole per la verifica**

1. Crea la tua applicazione:

   ```
   $ sam build
   ```

1. Invoca la tua funzione duratura:

   ```
   $ sam local invoke MyDurableFunction --durable-execution-name test 
   ```

1. Controlla la cronologia delle esecuzioni, se necessario:

   ```
   $ sam local execution history execution-id
   ```

## Scenari di test comuni
<a name="test-and-debug-durable-functions-scenarios"></a>

### Test del comportamento dei checkpoint
<a name="test-and-debug-durable-functions-scenarios-checkpoints"></a>

Per verificare che la tua funzione funzioni correttamente, i checkpoint indicano:

```
# Example Python durable function
def handler(event, context):
    # This will create a checkpoint
    context.wait(10)  # Wait 10 seconds
    
    # Function resumes here after wait
    return {"message": "Function resumed after wait"}
```

Quando si richiama questa funzione localmente, il periodo di attesa viene gestito automaticamente.

### Scenari di callback di test
<a name="test-and-debug-durable-functions-scenarios-callbacks"></a>

Per le funzioni che attendono callback esterni:

1. Avvia la tua funzione duratura che attende una richiamata

1. In un altro terminale, risolvi il callback:

   ```
   $ sam local callback succeed callback-id
   ```

1. Osserva che la funzione riprende l'esecuzione

## Risoluzione dei problemi
<a name="test-and-debug-durable-functions-troubleshooting"></a>

### Funzione durevole che non viene eseguita correttamente
<a name="test-and-debug-durable-functions-troubleshooting-config"></a>

**Problema:** la funzione non si comporta come una funzione durevole.

**Soluzioni:**
+ Verifica che `DurableConfig` sia impostato nel tuo modello SAM
+ Assicurati che il codice della funzione utilizzi metodi SDK per funzioni durevoli (ad esempio,`context.wait()`)
+ Verifica di utilizzare un runtime supportato (TypeScript, JavaScript, Python)

### Impossibile recuperare la cronologia delle esecuzioni
<a name="test-and-debug-durable-functions-troubleshooting-history"></a>

**Problema:** il `local execution history` comando non restituisce risultati.

**Soluzioni:**
+ Verifica che l'ID di esecuzione sia corretto
+ Verifica che la funzione sia stata richiamata almeno una volta

### I comandi di callback non funzionano
<a name="test-and-debug-durable-functions-troubleshooting-callbacks"></a>

**Problema:** i comandi di callback non risolvono le operazioni in sospeso.

**Soluzioni:**
+ Verifica che l'ID di callback sia corretto
+ Assicurati che la funzione sia effettivamente in attesa di una richiamata
+ Verifica di utilizzare la sintassi corretta del comando di callback

## Suggerimenti per il debug
<a name="test-and-debug-durable-functions-debugging"></a>
+ **Usa la cronologia di esecuzione**: esamina la cronologia delle esecuzioni per comprendere il flusso della tua funzione duratura
+ **Esegui test in modo incrementale**: inizia con semplici operazioni di attesa prima di aggiungere una logica complessa
+ **Usa la registrazione dettagliata: abilita la registrazione** dettagliata per tracciare il flusso di esecuzione

## Ulteriori informazioni
<a name="test-and-debug-durable-functions-learn"></a>

Per ulteriori informazioni su test e debug, consulta:
+ [Introduzione ai test con sam local invoke](using-sam-cli-local-invoke.md)- Documentazione locale sulle invoke
+ [sam local execution history](sam-cli-command-reference-sam-local-execution-history.md)- Cronologia delle esecuzioni