

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

# Copiar dados CSV em grande escala usando o mapa distribuído no Step Functions
<a name="tutorial-map-distributed"></a>

Este tutorial ajuda você a começar a usar o estado `Map` no modo distribuído. Um estado `Map` definido como **Distribuído** é conhecido como *estado Mapa distribuído*. Você usa o *estado Mapa distribuído* em seus fluxos de trabalho para iterar em fontes de dados de grande escala do Amazon S3. O estado `Map` executa cada iteração como uma execução de fluxo de trabalho secundário, o que permite alta simultaneidade. Para obter mais informações sobre o modo distribuído, consulte [estado Mapa no modo distribuído](state-map-distributed.md).

Neste tutorial, você usa o *estado Mapa distribuído* para iterar sobre um arquivo CSV em um bucket do Amazon S3. Em seguida, você retorna seu conteúdo com o ARN da execução de um fluxo de trabalho secundário em outro bucket do Amazon S3. Você começa criando um protótipo de fluxo de trabalho no Workflow Studio. Em seguida, você define o [modo de processamento do estado `Map`](state-map.md#concepts-map-process-modes) como Distribuído, especifica o arquivo CSV como conjunto de dados e fornece sua localização ao estado `Map`. Você também especifica o tipo de fluxo de trabalho para as execuções do fluxo de trabalho secundário que o *estado Mapa distribuído* começa como **Express**.

Além dessas configurações, você também especifica outras configurações, como o número máximo de execuções simultâneas de fluxos de trabalho secundários e o local para exportar o resultado `Map`, para o exemplo de fluxo de trabalho usado neste tutorial.

## Pré-requisitos
<a name="use-dist-map-prereqs"></a>
+ Faça upload de um arquivo CSV para bucket do Amazon S3. Você deve definir uma linha de cabeçalho no seu arquivo CSV. Para obter informações sobre os limites de tamanho impostos ao arquivo CSV e como especificar a linha do cabeçalho, consulte [Arquivo CSV em um bucket do Amazon S3](input-output-itemreader.md#itemsource-example-csv-data).
+ Crie outro bucket do Amazon S3 e uma pasta dentro desse bucket para a qual exportar o resultado do estado `Map`.

**Requisitos de conta e região**  
Os buckets do Amazon S3 devem estar na mesma Conta da AWS e Região da AWS que a máquina de estado.  
Observe que, embora a máquina de estado possa acessar arquivos em buckets de diferentes Contas da AWS que estejam na mesma Região da AWS, o Step Functions só oferece suporte à listagem de objetos em buckets do Amazon S3 que estejam *ambos* na mesma Conta da AWS e Região da AWS que a máquina de estado.

## Etapa 1: Criar o protótipo do fluxo de trabalho
<a name="use-dist-map-create-workflow"></a>

Nesta e tapa, você cria o protótipo para seu fluxo de trabalho usando o Workflow Studio. O Workflow Studio é um designer visual de fluxo de trabalho disponível no console do Step Functions. Você escolhe o estado necessário e a ação da API nas guias **Fluxo** e **Ações**, respectivamente. Você vai usar o atributo de arrastar e soltar do Workflow Studio para criar o protótipo do fluxo de trabalho.

1. Abra o [console do Step Functions](https://console.aws.amazon.com/states/home). No menu, selecione **Máquinas de estado** e, em seguida, selecione **Criar máquina de estado**.

1. Selecione **Criar do zero**.

1. Nomeie sua máquina de estado e clique em **Continuar** para editá-la no Workflow Studio.

1. Na guia **Fluxo**, arraste o estado **Mapa** e solte no estado vazio chamado **Arrastar o primeiro estado aqui**.

1. Na guia **Configuração**, em **Nome do estado**, insira **Process data**.

1. Na guia **Ações**, arraste uma ação da API **Invocação do AWS Lambda** e solte-a dentro do estado **Processar dados**.

1. Altere o nome do estado **Invocar AWS Lambda** para **Process CSV data**.

## Etapa 2: Configurar os campos necessários para o estado Mapa
<a name="use-dist-map-config-fields"></a>

Nesta etapa, você configura os seguintes campos obrigatórios do *estado Mapa Distribuído* (Mapa distribuído):
+ [ItemReader](input-output-itemreader.md): especifica o conjunto de dados e sua localização da qual o estado `Map` pode ler a entrada.
+ [ItemProcessor](state-map-distributed.md#distitemprocessor): especifica os seguintes valores:
  + `ProcessorConfig`: define o `Mode` e o `ExecutionType` como `DISTRIBUTED` e `EXPRESS`, respectivamente. Isso define o modo de processamento do estado `Map` e o tipo de fluxo de trabalho para execuções de fluxo de trabalho secundário que o *estado Mapa distribuído* inicia.
  + `StartAt`: o primeiro estado no fluxo de trabalho do Mapa.
  + `States`: define o fluxo de trabalho Mapear, que é um conjunto de etapas a serem repetidas em cada execução do fluxo de trabalho secundário.
+ [ResultWriter](input-output-resultwriter.md): especifica a localização do Amazon S3 em que o Step Functions grava os resultados do estado *Mapa distribuído*.
**Importante**  
Certifique-se de que o bucket do Amazon S3 utilizado para exportar os resultados de uma Execução de mapa esteja sob a mesma Conta da AWS e Região da AWS que a sua máquina de estado. Caso contrário, a execução da sua máquina de estado falhará com o erro `States.ResultWriterFailed`.

**Para configurar os campos obrigatórios:**

1. Escolha o estado **Process data** (Dados processo) e, na guia **Configuração**, faça o seguinte:

   1. Para **Modo de processamento**, escolha **Distribuído**.

   1. Em **Origem do item**, selecione **Amazon S3** e depois **Arquivo CSV no S3** na lista suspensa **Origem do item do S3**.

   1. Faça o seguinte para especificar a localização do seu arquivo CSV no Amazon S3:

      1. Para **Objeto do S3**, selecione **Enter bucket and key** (Inserir bucket e chave) na lista suspensa.

      1. Para **Bucket**, insira o nome do bucket do Amazon S3 que contém o arquivo CSV. Por exemplo, **amzn-s3-demo-source-bucket**.

      1. Em **Chave**, insira o nome do objeto Amazon S3 no qual você salvou o arquivo CSV. Você também deve especificar o nome do arquivo CSV nesse campo. Por exemplo, **csvDataset/ratings.csv**.

   1. Para arquivos CSV, também é necessário especificar a local do cabeçalho da coluna. Para fazer isso, escolha **Configuração adicional** e, para **CSV header location** (Localização do cabeçalho CSV), retenha a seleção-padrão de **First row** (Primeira linha) se a primeira linha do seu arquivo CSV for o cabeçalho. Caso contrário, escolha **Given** (Fornecido) para especificar o cabeçalho na definição da máquina de estado. Para obter mais informações, consulte `ReaderConfig`.

   1. Para o **Child execution type** (Tipo de execução secundária), escolha **Express**.

1. Em **Local de exportação**, para exportar os resultados da Execução do mapa para um local específico do Amazon S3, escolha **Exportar a saída do estado do mapa para o Amazon S3**.

1. Faça o seguinte:

   1. Para **Bucket do S3**, escolha **Enter bucket name and prefix** (Inserir nome e prefixo do bucket) na lista suspensa.

   1. Para **Bucket**, insira o nome do bucket do Amazon S3 para o qual você quer exportar os resultados. Por exemplo, **mapOutputs**.

   1. Em **Prefixo**, insira o nome da pasta na qual você deseja salvar os resultados. Por exemplo, **resultData**.

## Etapa 3: Configurar opções adicionais
<a name="use-dist-map-config-misc-fields"></a>

Além das configurações necessárias para um *estado Mapa Distribuído* (Mapa Distribuído), você também pode especificar outras opções. Isso pode incluir o número máximo de execuções simultâneas de fluxos de trabalho secundários e o local para o qual exportar o resultado do estado `Map`.

1. Escolha o estado **Process data** (Processar dados). Em seguida, em **Origem do item**, escolha **Configuração adicional**.

1. Faça o seguinte:

   1. Escolha **Modify items with ItemSelector** (Modificar itens com ItemSelector) para especificar uma entrada JSON personalizada para cada execução do fluxo de trabalho secundário.

   1. Insira a seguinte entrada JSON:

      ```
      {
        "index.$": "$$.Map.Item.Index",
        "value.$": "$$.Map.Item.Value"
      }
      ```

      Para obter informações sobre como criar uma entrada personalizada, consulte `ItemSelector (mapa)`.

1. Nas **Configurações de tempo de execução**, em **Limite de simultaneidade**, especifique o número de execuções simultâneas de fluxo de trabalho secundário que o *estado Mapa distribuído* pode iniciar. Por exemplo, digite **100**.

1. Abra uma nova janela ou guia no seu navegador e conclua a configuração da função do Lambda que você usará nesse fluxo de trabalho, conforme explicado em [Etapa 4: Configurar uma função do Lambda](#use-dist-map-config-resource).

## Etapa 4: Configurar uma função do Lambda
<a name="use-dist-map-config-resource"></a>

**Importante**  
Verifique se a função do Lambda está na mesma Região da AWS que a máquina de estado.

1. Abra o [console do Lambda](https://console.aws.amazon.com/lambda/home) e clique em **Criar função**.

1. Na página **Create function**, selecione **Author from scratch**.

1. Na seção **Informações básicas**, configure a função do Lambda:

   1. Em **Function name** (Nome da função), insira **distributedMapLambda**.

   1. Em **Runtime (Tempo de execução)**, selecione **Node.js**.

   1. Mantenha todas as seleções padrão e escolha **Criar função**.

   1. Depois de criar a função do Lambda, copie o nome do recurso da Amazon (ARN) da função exibido no canto superior direito da página. Você precisará fornecer isso em seu protótipo de fluxo de trabalho. A seguir está um exemplo de ARN.

      ```
      arn:aws:lambda:us-east-2:123456789012:function:distributedMapLambda
      ```

1. Copie o código a seguir para a função do Lambda e cole-o na seção **Origem do código** da página **distributedMapLambda**.

   ```
   exports.handler = async function(event, context) {
       console.log("Received Input:\n", event);
   
       return {
           'statusCode' : 200,
           'inputReceived' : event //returns the input that it received
       }
   };
   ```

1. Escolha **Implantar**. Depois que sua função for implantada, escolha **Testar** para ver a saída da sua função do Lambda.

## Etapa 5: Atualizar o protótipo do fluxo de trabalho
<a name="use-dist-map-update-workflow"></a>

No console do Step Functions, você atualizará seu fluxo de trabalho para adicionar o ARN da função do Lambda.

1. Volte para a guia ou janela em que você criou o protótipo do fluxo de trabalho.

1. Escolha a etapa **Process CSV data** (Processar dados CSV) e, na guia **Configuração**, faça o seguinte:

   1. Em **Tipo de integração**, escolha **Otimizado**.

   1. Para **Nome da função**, insira o nome da função do Lambda. Escolha a função na lista suspensa exibida ou escolha **Enter function name** (Inserir nome da função) e forneça o ARN da função do Lambda.

## Etapa 6: Revisar a definição da Amazon States Language gerada automaticamente e salvar o fluxo de trabalho
<a name="use-dist-map-review-asl"></a>

Conforme você arrasta e solta os estados das guias **Ação** e **Fluxo** para a tela, o Workflow Studio cria automaticamente a definição da [Amazon States Language](concepts-amazon-states-language.md) do fluxo de trabalho em tempo real. Você pode editar essa definição conforme necessário.

1. (Opcional) Clique em **Definição** no painel [Painel Inspetor](workflow-studio.md#workflow-studio-components-formdefinition) e veja a definição da máquina de estado.
**dica**  
Você também pode ver a definição de ASL no [Editor de código](workflow-studio.md#wfs-interface-code-editor) do Workflow Studio. No editor de código, você também pode editar a definição de ASL do fluxo de trabalho.

   O código de exemplo a seguir mostra a definição da Amazon States Language gerada automaticamente para seu fluxo de trabalho.

   ```
   {
     "Comment": "Using Map state in Distributed mode",
     "StartAt": "Process data",
     "States": {
       "Process data": {
         "Type": "Map",
         "MaxConcurrency": 100,
         "ItemReader": {
           "ReaderConfig": {
             "InputType": "CSV",
             "CSVHeaderLocation": "FIRST_ROW"
           },
           "Resource": "arn:aws:states:::s3:getObject",
           "Parameters": {
             "Bucket": "amzn-s3-demo-source-bucket",
             "Key": "csvDataset/ratings.csv"
           }
         },
         "ItemProcessor": {
           "ProcessorConfig": {
             "Mode": "DISTRIBUTED",
             "ExecutionType": "EXPRESS"
           },
           "StartAt": "Process CSV data",
           "States": {
             "Process CSV data": {
               "Type": "Task",
               "Resource": "arn:aws:states:::lambda:invoke",
               "OutputPath": "$.Payload",
               "Parameters": {
                 "Payload.$": "$",
                 "FunctionName": "arn:aws:lambda:us-east-2:account-id:function:distributedMapLambda"
               },
               "End": true
             }
           }
         },
         "Label": "Processdata",
         "End": true,
         "ResultWriter": {
           "Resource": "arn:aws:states:::s3:putObject",
           "Parameters": {
             "Bucket": "mapOutputs",
             "Prefix": "resultData"
           }
         },
         "ItemSelector": {
           "index.$": "$$.Map.Item.Index",
           "value.$": "$$.Map.Item.Value"
         }
       }
     }
   }
   ```

1. Especifique um nome para a máquina de estado. Para fazer isso, clique no ícone de edição ao lado do nome da máquina de estado padrão **MyStateMachine**. Em seguida, em **Configuração da máquina de estado**, insira um nome na caixa **Nome da máquina de estado**.

   Para este tutorial, insira o nome **DistributedMapDemo**.

1. (Opcional) Em **Configuração da máquina de estado**, especifique outras configurações do fluxo de trabalho, como o tipo de máquina de estado e a função de execução.

   Para este tutorial, mantenha todas as seleções padrão na **Configuração da máquina de estado**.

1. Na caixa de diálogo **Confirmar criação do perfil**, selecione **Confirmar** para continuar.

   Você também pode escolher **Exibir configurações do perfil** para voltar às **Configurações da máquina de estado**.
**nota**  
Se você excluir o perfil do IAM criado pelo Step Functions, não será possível recriá-lo posteriormente. Da mesma forma, se você modificar a função (por exemplo, removendo o Step Functions das entidades principais na política do IAM), o Step Functions não poderá restaurar as configurações originais dela posteriormente. 

## Etapa 7: Executar a máquina de estado
<a name="use-dist-map-sm-run"></a>

Uma *execução* é uma instância da máquina de estado em que você executa o fluxo de trabalho para realizar tarefas.

1. Na página **DistributedMapDemo**, escolha **Iniciar execução**.

1. Na caixa de diálogo **Iniciar execução**, faça o seguinte:

   1. (Opcional) Insira um nome de execução personalizado para substituir o padrão gerado.
**Nomes e registro em log não ASCII**  
O Step Functions aceita nomes de máquina de estado, execuções, atividades e rótulos que contenham caracteres não ASCII. Como esses caracteres não permitem que o Amazon CloudWatch registre dados em log, recomendamos usar somente caracteres ASCII para monitorar as métricas do Step Functions.

   1. (Opcional) No campo **Entrada**, insira os valores de entrada no formato JSON para executar o fluxo de trabalho.

   1. Selecione **Iniciar execução**.

   1. O console do Step Functions direciona você para uma página na qual o título é o ID da execução, conhecida como a página de *Detalhes da execução*. Você pode revisar os resultados da execução tanto à medida que o fluxo de trabalho avança quanto após a conclusão.

      Para revisar os resultados da execução, escolha estados individuais na **Exibição em gráfico** e, em seguida, escolha as guias individuais no painel [Detalhes da etapa](concepts-view-execution-details.md#exec-details-intf-step-details) para visualizar os detalhes de cada estado, incluindo entrada, saída e definição, respectivamente. Para obter detalhes sobre as informações de execução que você pode visualizar na página *Detalhes da execução*, consulte [Visão geral dos detalhes da execução](concepts-view-execution-details.md#exec-details-interface-overview).

   Por exemplo, escolha o estado `Map` e escolha **Execução do mapa** para abrir a página *Detalhes da execução do mapa*. Nessa página, você pode visualizar todos os detalhes da execução do *estado Mapa distribuído* e as execuções do fluxo de trabalho secundário que ele iniciou. Para obter informações sobre essa página, consulte [Visualizar execuções de mapa](concepts-examine-map-run.md).