

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: Usar variáveis com ações de invocação do Lambda
<a name="tutorials-lambda-variables"></a>

Uma ação de invocação do Lambda pode usar variáveis de outra ação como parte de sua entrada e retornar novas variáveis juntamente com sua saída. Para obter informações sobre variáveis para ações em CodePipeline, consulte[Referência de variáveis](reference-variables.md).

**Importante**  
Como parte da criação de um pipeline, um bucket de artefatos S3 fornecido pelo cliente será usado CodePipeline por for artefacts. (Este bucket não é o mesmo utilizado para uma ação de origem do S3.) Se o bucket de artefatos do S3 estiver em uma conta diferente da conta do seu pipeline, certifique-se de que o bucket de artefatos do S3 Contas da AWS seja de propriedade de quem é seguro e confiável.

No final deste tutorial, você terá:
+ Uma ação de invocação do Lambda que:
  + Consome a `CommitId` variável de uma ação de CodeCommit origem
  + Produz três novas variáveis: `dateTime`, `testRunId` e `region`
+ Uma ação de aprovação manual que consome as novas variáveis da ação de invocação do Lambda para fornecer um URL de teste e um ID de execução de teste
+ Um pipeline atualizado com as novas ações

**Topics**
+ [Pré-requisitos](#lambda-variables-prereqs)
+ [Etapa 1: criar uma função do Lambda](#lambda-variables-function)
+ [Etapa 2: Adicionar uma ação de invocação do Lambda e uma ação de aprovação manual ao pipeline](#lambda-variables-pipeline)

## Pré-requisitos
<a name="lambda-variables-prereqs"></a>

Antes de começar, você deve ter o seguinte: 
+ Você pode criar ou usar o pipeline com a CodeCommit fonte em[Tutorial: criar um pipeline simples (CodeCommit repositório)](tutorials-simple-codecommit.md).
+ Edite seu pipeline existente para que a ação CodeCommit de origem tenha um namespace. Atribua o namespace `SourceVariables` à ação.

## Etapa 1: criar uma função do Lambda
<a name="lambda-variables-function"></a>

Use as etapas a seguir para criar uma função do Lambda e uma função de execução do Lambda. Adicione a ação do Lambda ao pipeline após criar a função do Lambda.

**Para criar uma função do Lambda e um perfil de execução**

1. Faça login no Console de gerenciamento da AWS e abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Escolha a opção **Criar função**. Deixe **Author from scratch (Criar do zero)** selecionado.

1. Em **Function Name (Nome da função)**, insira o nome da função, como **myInvokeFunction**. Em **Runtime (Tempo de Execução)**, deixe a opção padrão marcada.

1. Expanda **Choose or create an execution role (Escolher ou criar uma função de execução)**. Escolha **Create a new role with basic Lambda permissions (Criar uma nova função com permissões básicas do Lambda)**.

1. Escolha a opção **Criar função**.

1. Para usar uma variável de outra ação, ela precisará ser passada para `UserParameters` na configuração de ação de invocação do Lambda. A ação em nosso pipeline será configurada mais adiante no tutorial, mas será adicionado o código assumindo que a variável será transmitida.

   Para produzir novas variáveis, defina uma propriedade chamada `outputVariables` na entrada como `putJobSuccessResult`. Não é possível produzir variáveis como parte de um `putJobFailureResult`.

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

   Na nova função, na guia **Código**, cole o seguinte código de exemplo em `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. Permitir que a função salve automaticamente.

1. Copie o nome do recurso da Amazon (ARN) contido no campo **Função ARN** na parte superior da tela.

1. Como última etapa, abra o console AWS Identity and Access Management (IAM) em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). Modifique a função de execução do Lambda para adicionar a seguinte política:. [AWSCodePipelineCustomActionAccess](https://console.aws.amazon.com/iam/home?region=us-west-2#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCodePipelineCustomActionAccess) Para ver as etapas para criar uma função de execução do Lambda ou modificar a política de função, consulte [Etapa 2: Criar a função do Lambda](actions-invoke-lambda-function.md#actions-invoke-lambda-function-create-function). 

## Etapa 2: Adicionar uma ação de invocação do Lambda e uma ação de aprovação manual ao pipeline
<a name="lambda-variables-pipeline"></a>

Nesta etapa, você adiciona uma ação de invocação do Lambda ao pipeline. Você adiciona a ação como parte de um estágio chamado **Test (Teste)**. O tipo de ação é uma ação de chamada. Em seguida, você adiciona uma ação de aprovação manual após a ação de chamada.

**Para adicionar uma ação do Lambda e uma ação de aprovação manual ao pipeline**

1. Abra o CodePipeline console em [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

   Os nomes de todos os pipelines associados à sua AWS conta são exibidos. Escolha o pipeline onde deseja adicionar a ação.

1. Adicione uma ação de teste do Lambda ao pipeline.

   1. Para editar o pipeline, escolha **Edit (Editar)**. Adicione um estágio após a ação de origem no pipeline existente. Insira um nome para o estágio, como **Test**.

   1. No novo estágio, escolha **Adicionar grupo de ação** para adicionar uma ação. Em **Action Name (Nome da ação)**, insira o nome da ação de chamada, como **Test\$1Commit**.

   1. Em **Provedor de ação**, selecione **AWS Lambda**.

   1. Em **Input artifacts (Artefatos de entrada)**, escolha o nome do artefato de saída da ação de origem, como `SourceArtifact`.

   1. Em **FunctionName**, adicione o ARN da função Lambda que você criou.

   1. Em **Variable namespace (Namespace de variável)**, adicione o nome do namespace, como **TestVariables**.

   1. Em **Artefatos de saída**, adicione o nome do artefato de saída, como **LambdaArtifact**.

   1. Selecione **Concluído**.

1. Adicionar a ação de aprovação manual ao pipeline.

   1. Com o pipeline ainda no modo de edição, adicione um estágio após a ação de chamada. Insira um nome para o estágio, como **Approval**.

   1. No novo estágio, escolha o ícone para adicionar uma ação. Em **Action name (Nome da ação)**, insira o nome da ação de aprovação, como **Change\$1Approval**.

   1. Em **Action provider (Provedor de ação)**, escolha **Manual approval (Aprovação manual)**.

   1. No **URL for review (URL para revisão)**, construa o URL adicionando a sintaxe da variável para a variável `region` e a variável `CommitId`. Certifique-se de usar os namespaces atribuídos às ações que fornecem as variáveis de saída. 

      Neste exemplo, o URL com a sintaxe variável de uma CodeCommit ação tem o `SourceVariables` namespace padrão. A variável de saída da Região do Lambda tem o namespace `TestVariables`. O URL se parece ao seguinte:

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

      Em **Comments (Comentários)**, construa o texto da mensagem de aprovação adicionando a sintaxe da variável para a variável `testRunId`. Para este exemplo, o URL com a sintaxe variável para a variável de saída do Lambda `testRunId` tem o namespace `TestVariables`. Insira a mensagem a seguir.

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

1. Escolha **Done (Concluído)** para fechar a tela de edição da ação e **Done (Concluído)** para fechar a tela de edição para o estágio. Para salvar o pipeline, escolha **Done (Concluído)**. O pipeline concluído contém agora uma estrutura com estágios de origem, teste, aprovação e implantação.

   Escolha **Relase Change (Alteração de versão)**, para executar a alteração mais recente através da estrutura do pipeline.

1. Quando o pipeline atingir o estágio de aprovação manual, selecione **Review (Revisar)**. As variáveis resolvidas aparecem como o URL para o ID de confirmação. O aprovador pode escolher o URL para exibir a confirmação.

1. Depois que o pipeline for executado com êxito, você também poderá visualizar os valores das variáveis na página do histórico de execução da ação.