

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

# Tutorial: Utilizzo delle variabili con le azioni di richiamo Lambda
<a name="tutorials-lambda-variables"></a>

Un'azione di richiamo Lambda può utilizzare le variabili di un'altra azione come parte del suo input e restituire nuove variabili insieme al relativo output. Per informazioni sulle variabili per le azioni in CodePipeline, vedi. [Riferimento alle variabili](reference-variables.md)

**Importante**  
Come parte della creazione di una pipeline, per gli artefatti verrà utilizzato un bucket di artefatti S3 fornito dal cliente. CodePipeline (Questo è diverso dal bucket utilizzato per un'azione sorgente S3.) Se il bucket di artefatti S3 si trova in un account diverso da quello della pipeline, assicurati che il bucket di artefatti S3 sia di proprietà di utenti sicuri e affidabili. Account AWS 

Alla fine di questo tutorial, avrai:
+ Un'azione di richiamo Lambda che:
  + Consuma la `CommitId` variabile da un'azione di origine CodeCommit 
  + Restituisce tre nuove variabili: `dateTime`, `testRunId`, e `region`
+ Un'azione di approvazione manuale che utilizza le nuove variabili dell'azione di invocazione Lambda per fornire un URL di test e un ID di esecuzione del test
+ Una pipeline aggiornata con le nuove operazioni

**Topics**
+ [Prerequisiti](#lambda-variables-prereqs)
+ [Fase 1: creare una funzione Lambda](#lambda-variables-function)
+ [Fase 2: aggiungi un'azione di richiamo Lambda e un'azione di approvazione manuale alla tua pipeline](#lambda-variables-pipeline)

## Prerequisiti
<a name="lambda-variables-prereqs"></a>

Prima di iniziare, devi: 
+ Puoi creare o utilizzare la pipeline con il codice sorgente inserito. CodeCommit [Tutorial: crea una pipeline semplice (CodeCommit repository)](tutorials-simple-codecommit.md)
+ Modifica la pipeline esistente in modo che l'azione di CodeCommit origine abbia un namespace. Assegna all'operazione le `SourceVariables` dello spazio dei nomi.

## Fase 1: creare una funzione Lambda
<a name="lambda-variables-function"></a>

Utilizza i seguenti passaggi per creare una funzione Lambda e un ruolo di esecuzione Lambda. L'azione Lambda viene aggiunta alla pipeline dopo aver creato la funzione Lambda.

**Per creare una funzione Lambda e un ruolo di esecuzione**

1. Accedi a Console di gestione AWS e apri la AWS Lambda console all'indirizzo [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Scegli **Crea funzione**. Lasciare selezionato **Author from scratch (Crea da zero)**.

1. In **Function name (Nome funzione)**, immettere il nome della funzione, ad esempio **myInvokeFunction**. In **Runtime**, lasciare selezionata l'opzione predefinita.

1. Espandere **Choose or create an execution role (Scegli o crea un ruolo di esecuzione)**. Scegliere **Create a new role with basic Lambda permissions (Crea un nuovo ruolo con le autorizzazioni Lambda di base)**.

1. Scegli **Crea funzione**.

1. Per utilizzare una variabile da un'altra operazione, deve essere passata ai `UserParameters` nella configurazione dell'operazione di invocazione Lambda. Configuri l'operazione nella pipeline più avanti in questo tutorial, ma aggiungi il codice presumendo che la variabile venga passata.

   Per produrre nuove variabili, imposta una proprietà denominata `outputVariables` sull'input di `putJobSuccessResult`. Tieni presente che non è possibile produrre variabili come parte di un file `putJobFailureResult`.

   ```
    const putJobSuccess = async (message) => {
           const params = {
               jobId: jobId,
               outputVariables: {
                   testRunId: Math.floor(Math.random() * 1000).toString(),
                   dateTime: Date(Date.now()).toString(),
                   region: lambdaRegion
               }
           };
   ```

   Nella nuova funzione, nella scheda **Codice**, incolla il seguente codice di esempio sotto`index.mjs`.

   ```
   import { CodePipeline } from '@aws-sdk/client-codepipeline';
   
   export const handler = async (event, context) => {
       const codepipeline = new CodePipeline({});
       
       // Retrieve the Job ID from the Lambda action
       const jobId = event["CodePipeline.job"].id;
       
       // Retrieve UserParameters
       const params = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters;
       
       // The region from where the lambda function is being executed
       const lambdaRegion = process.env.AWS_REGION;
       
       // Notify CodePipeline of a successful job
       const putJobSuccess = async (message) => {
           const params = {
               jobId: jobId,
               outputVariables: {
                   testRunId: Math.floor(Math.random() * 1000).toString(),
                   dateTime: Date(Date.now()).toString(),
                   region: lambdaRegion
               }
           };
           
           try {
               await codepipeline.putJobSuccessResult(params);
               return message;
           } catch (err) {
               throw err;
           }
       };
       
       // Notify CodePipeline of a failed job
       const putJobFailure = async (message) => {
           const params = {
               jobId: jobId,
               failureDetails: {
                   message: JSON.stringify(message),
                   type: 'JobFailed',
                   externalExecutionId: context.invokeid
               }
           };
           
           try {
               await codepipeline.putJobFailureResult(params);
               throw message;
           } catch (err) {
               throw err;
           }
       };
       
       try {
           console.log("Testing commit - " + params);
           
           // Your tests here
           
           // Succeed the job
           return await putJobSuccess("Tests passed.");
       } catch (ex) {
           // If any of the assertions failed then fail the job
           return await putJobFailure(ex);
       }
   };
   ```

1. Consenti il salvataggio automatico della funzione.

1. Copia l'Amazon Resource Name (ARN) contenuto nel campo **Function ARN** nella parte superiore dello schermo.

1. Come ultimo passaggio, apri la console AWS Identity and Access Management (IAM) all'indirizzo. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) Modifica il ruolo di esecuzione Lambda per aggiungere la seguente politica:. [AWSCodePipelineCustomActionAccess](https://console.aws.amazon.com/iam/home?region=us-west-2#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCodePipelineCustomActionAccess) Per le fasi della creazione di un ruolo di esecuzione Lambda o della modifica della policy di ruolo, consulta [Fase 2: Creare la funzione Lambda](actions-invoke-lambda-function.md#actions-invoke-lambda-function-create-function) . 

## Fase 2: aggiungi un'azione di richiamo Lambda e un'azione di approvazione manuale alla tua pipeline
<a name="lambda-variables-pipeline"></a>

In questo passaggio, aggiungi un'azione di richiamo Lambda alla tua pipeline. È possibile aggiungere l'operazione come parte di una fase denominata **Test**. Il tipo di operazione è un'operazione di richiamo. È quindi possibile aggiungere un'operazione di approvazione manuale dopo l'operazione di richiamo.

**Per aggiungere un'azione Lambda e un'azione di approvazione manuale alla pipeline**

1. Apri la CodePipeline console all'indirizzo. [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)

   Vengono visualizzati i nomi di tutte le pipeline associate al tuo AWS account. Scegliere la pipeline in cui si desidera aggiungere l'operazione.

1. Aggiungi l'azione di test Lambda alla tua pipeline.

   1. Per modificare la pipeline, scegliere **Edit (Modifica)**. Aggiungere una fase dopo l'operazione di origine nella pipeline esistente. Immettere un nome per la fase, ad esempio **Test**.

   1. Nella nuova fase, scegli **Aggiungi gruppo di azioni** per aggiungere un'azione. In **Action name (Nome operazione)**, immettere il nome dell'operazione di richiamo, ad esempio **Test\$1Commit**.

   1. In **Action provider**, scegli **AWS Lambda**.

   1. In **Input artifacts (Artefatti di input)**, scegliere il nome dell'artefatto di output dell'operazione di origine, ad esempio `SourceArtifact`.

   1. In **FunctionName**, aggiungi l'ARN della funzione Lambda che hai creato.

   1. In **Variable namespace (Spazio dei nomi delle variabili)** aggiungere il nome dello spazio dei nomi, ad esempio **TestVariables**.

   1. In **Elementi di output, aggiungi il nome dell'artefatto** di output, ad esempio. **LambdaArtifact**

   1. Seleziona **Fatto**.

1. Aggiungere l'operazione di approvazione manuale alla pipeline.

   1. Con la pipeline ancora in modalità di modifica, aggiungere una fase dopo l'operazione di richiamo. Immettere un nome per la fase, ad esempio **Approval**.

   1. Nella nuova fase, scegliere l'icona per aggiungere un'operazione. In **Action name (Nome operazione)**, immettere il nome dell'operazione di approvazione, ad esempio **Change\$1Approval**.

   1. In **Action provider (Provider operazione)**, scegliere **Manual approval (Approvazione manuale)**.

   1. In **URL for review (URL per revisione)**, costruire l'URL aggiungendo la sintassi della variabile per le variabili `region` e `CommitId`. Assicurarsi di utilizzare gli spazi dei nomi assegnati alle operazioni che forniscono le variabili di output. 

      Per questo esempio, l'URL con la sintassi variabile per un' CodeCommit azione ha lo spazio dei nomi predefinito. `SourceVariables` La variabile di output della regione Lambda ha lo spazio dei nomi `TestVariables`. L'URL ha il seguente aspetto:

      ```
      https://#{TestVariables.region}.console.aws.amazon.com/codesuite/codecommit/repositories/MyDemoRepo/commit/#{SourceVariables.CommitId}
      ```

      In **Comments (Commenti)**, costruire il testo del messaggio di approvazione aggiungendo la sintassi della variabile per la variabile `testRunId`. Per questo esempio, l'URL con la sintassi della variabile di output `testRunId` Lambda ha lo spazio dei nomi `TestVariables`. Inserire il seguente messaggio.

      ```
      Make sure to review the code before approving this action. Test Run ID: #{TestVariables.testRunId}
      ```

1. Scegliere **Done (Fatto)** per chiudere la schermata di modifica per l'operazione, quindi scegliere **Done (Fatto)** per chiudere la schermata di modifica per la fase. Per salvare la pipeline, scegliere **Done (Fatto)**. La pipeline completata ora contiene una struttura con fasi di origine, test, approvazione e distribuzione.

   Scegliere **Release change (Rilascia modifica)** per eseguire l'ultima modifica nella struttura della pipeline.

1. Quando la pipeline raggiunge la fase di approvazione manuale, scegliere **Review (Revisione)**. Le variabili risolte vengono visualizzate come URL per l'ID commit. L'approvatore può scegliere l'URL per visualizzare il commit.

1. Dopo che la pipeline è stata eseguita correttamente, è anche possibile visualizzare i valori delle variabili nella pagina della cronologia dell'esecuzione delle operazioni.