

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

# Use o Apache Beam com aplicativos Managed Service for Apache Flink
<a name="how-creating-apps-beam"></a>

**nota**  
**Não há Apache Flink Runner compatível para o Flink 1.20. Para obter mais informações, consulte [Compatibilidade de versão do Flink](https://beam.apache.org/documentation/runners/flink/#flink-version-compatibility) na documentação do Apache Beam.**>

Você pode usar a estrutura [Apache Beam](https://beam.apache.org/) com seu aplicativo Managed Service for Apache Flink para processar dados de streaming. Os aplicativos Managed for Apache Flink que usam o Apache Beam usam o [Apache Flink runner](https://beam.apache.org/documentation/runners/flink/) para executar pipelines do Beam.

Para obter um tutorial sobre como usar o Apache Beam em um aplicativo Managed Service for Apache Flink, consulte. [Use CloudFormationCriar um aplicativo usando o Apache Beam](examples-beam.md)

**Topics**
+ [Limitações do Apache Flink Runner com o Managed Service for Apache Flink](#how-creating-apps-beam-using)
+ [Use os recursos do Apache Beam com Managed Service for Apache Flink](#how-creating-apps-beam-capabilities)
+ [Crie um aplicativo usando o Apache Beam](examples-beam.md)

## Limitações do Apache Flink Runner com o Managed Service for Apache Flink
<a name="how-creating-apps-beam-using"></a>

Observe o seguinte sobre o uso do Apache Flink Runner com o Managed Service para Apache Flink:
+ As métricas do Apache Beam não podem ser visualizadas no console Managed Service for Apache Flink.
+ **O Apache Beam só é compatível com aplicativos Managed Service for Apache Flink que usam o Apache Flink versão 1.8 e superior. O Apache Beam só é compatível com aplicativos Managed Service for Apache Flink que usam o Apache Flink versão 1.6.**

## Use os recursos do Apache Beam com Managed Service for Apache Flink
<a name="how-creating-apps-beam-capabilities"></a>

O Managed Service for Apache Flink suporta os mesmos recursos do Apache Beam que o executor Apache Flink. Para obter informações sobre quais atributos são compatíveis com o executor Apache Flink, consulte a [Matriz de compatibilidade do Beam](https://beam.apache.org/documentation/runners/capability-matrix/). 

Recomendamos que você teste seu aplicativo Apache Flink no serviço Managed Service for Apache Flink para verificar se oferecemos suporte a todos os recursos de que seu aplicativo precisa.

# Crie um aplicativo usando o Apache Beam
<a name="examples-beam"></a>

[Neste exercício, você cria um aplicativo Managed Service for Apache Flink que transforma dados usando o Apache Beam.](https://beam.apache.org/) O Apache Beam é um modelo de programação para processar dados de streaming. Para obter informações sobre como usar o Apache Beam com o Managed Service para Apache Flink, consulte. [Use o Apache Beam com aplicativos Managed Service for Apache Flink](how-creating-apps-beam.md)

**nota**  
Para configurar os pré-requisitos necessários para este exercício, primeiro conclua o exercício [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md).

**Topics**
+ [Crie recursos dependentes](#examples-beam-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-beam-write)
+ [Baixe e examine o código do aplicativo](#examples-beam-download)
+ [Compilar o código do aplicativo](#examples-beam-compile)
+ [Upload do código Java de fluxo do Apache Flink](#examples-beam-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-beam-create-run)
+ [Limpe AWS os recursos](#examples-beam-cleanup)
+ [Próximas etapas](#examples-beam-nextsteps)

## Crie recursos dependentes
<a name="examples-beam-resources"></a>

Antes de criar um aplicativo Managed Service for Apache Flink para este exercício, você cria os seguintes recursos dependentes: 
+ Dois fluxos de dados do Kinesis (`ExampleInputStream` e `ExampleOutputStream`)
+ Um bucket do Amazon S3 para armazenar o código do aplicativo (`ka-app-code-<username>`) 

Você pode criar os fluxos do Kinesis e o bucket do Amazon S3 usando o console. Para obter instruções sobre como criar esses recursos, consulte os tópicos a seguir:
+ [Criando e atualizando fluxos de dados](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*. Nomeie seus fluxos de dados **ExampleInputStream** e **ExampleOutputStream**.
+ Para obter instruções, consulte [Como criar um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html) no *Guia do usuário do Amazon Simple Storage Service*. Dê ao bucket do Amazon S3 um nome globalmente exclusivo anexando seu nome de login, como **ka-app-code-*<username>***.

## Gravação de registros de amostra no fluxo de entrada
<a name="examples-beam-write"></a>

Nesta seção, você usa um script Python para gravar strings aleatórias no stream para o aplicativo processar.

**nota**  
Essa seção requer [AWS SDK para Python (Boto)](https://aws.amazon.com/developers/getting-started/python/).

1. Crie um arquivo denominado `ping.py` com o conteúdo a seguir:

   ```
   import json
   import boto3
   import random
   
   kinesis = boto3.client('kinesis')
   
   while True:
           data = random.choice(['ping', 'telnet', 'ftp', 'tracert', 'netstat'])
           print(data)
           kinesis.put_record(
                   StreamName="ExampleInputStream",
                   Data=data,
                   PartitionKey="partitionkey")
   ```

1. Execute o script `ping.py`: 

   ```
   $ python ping.py
   ```

   Mantenha o script em execução enquanto você conclui o restante do tutorial.

## Baixe e examine o código do aplicativo
<a name="examples-beam-download"></a>

O código do aplicativo Java para este exemplo está disponível em GitHub. Para fazer download do código do aplicativo, faça o seguinte:

1. Instale o cliente do Git, se isso ainda não foi feito. Para obter mais informações, consulte [Instalando o Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). 

1. Duplique o repositório remoto com o seguinte comando:

   ```
   git clone https://github.com/aws-samples/amazon-kinesis-data-analytics-examples.git
   ```

1. Navegue até o diretório `amazon-kinesis-data-analytics-java-examples/Beam`.

O código do aplicativo está localizado no arquivo `BasicBeamStreamingJob.java`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa o Apache Beam [ParDo](https://beam.apache.org/releases/javadoc/2.0.0/org/apache/beam/sdk/transforms/ParDo.html)para processar registros recebidos invocando uma função de transformação personalizada chamada. `PingPongFn`

  O código para invocar a função `PingPongFn` é o seguinte:

  ```
  .apply("Pong transform",
      ParDo.of(new PingPongFn())
  ```
+ O serviço gerenciado para aplicativos Apache Flink que usam o Apache Beam requer os seguintes componentes. Se você não incluir esses componentes e versões no seu `pom.xml`, seu aplicativo carregará as versões incorretas das dependências do ambiente e, como as versões não coincidem, seu aplicativo falhará no runtime.

  ```
  <jackson.version>2.10.2</jackson.version>
  ...
  <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-jaxb-annotations</artifactId>
      <version>2.10.2</version>
  </dependency>
  ```
+ A função de transformação `PingPongFn` passa os dados de entrada para o fluxo de saída, a menos que os dados de entrada sejam **ping**. Nesse caso, ela emite a string **pong\$1n**para o fluxo de saída. 

  O código da função de transformação é o seguinte:

  ```
      private static class PingPongFn extends DoFn<KinesisRecord, byte[]> {
      private static final Logger LOG = LoggerFactory.getLogger(PingPongFn.class);
      
      @ProcessElement
      public void processElement(ProcessContext c) {
          String content = new String(c.element().getDataAsBytes(), StandardCharsets.UTF_8);
          if (content.trim().equalsIgnoreCase("ping")) {
              LOG.info("Ponged!");
              c.output("pong\n".getBytes(StandardCharsets.UTF_8));
          } else {
              LOG.info("No action for: " + content);
              c.output(c.element().getDataAsBytes());
          }
      }
  }
  ```

## Compilar o código do aplicativo
<a name="examples-beam-compile"></a>

Para compilar o aplicativo, faça o seguinte:

1. Instale o Java e o Maven, caso ainda não o tenha feito. Para obter mais informações, consulte [Conclua os pré-requisitos exigidos](getting-started.md#setting-up-prerequisites) no tutorial [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md).

1. Compile o aplicativo com o seguinte comando: 

   ```
   mvn package -Dflink.version=1.15.2 -Dflink.version.minor=1.8
   ```
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. 

A compilação do aplicativo cria o arquivo JAR do aplicativo (`target/basic-beam-app-1.0.jar`).

## Upload do código Java de fluxo do Apache Flink
<a name="examples-beam-upload"></a>

Nesta seção, você faz o upload do seu aplicativo no bucket do Amazon S3 que você criou na seção [Crie recursos dependentes](#examples-beam-resources).

1. **No console do Amazon S3, escolha o **ka-app-code- *<username>*** bucket e escolha Upload.**

1. Na etapa **Selecionar arquivos**, selecione **Adicionar arquivos**. Navegue até o arquivo `basic-beam-app-1.0.jar`, criado na etapa anterior. 

1. Você não precisa alterar nenhuma das configurações para o objeto, em seguida, selecione **Upload**.

O código passa a ser armazenado em um bucket do Amazon S3 que pode ser acessado pelo aplicativo.

## Criar e executar a aplicação do Managed Service for Apache Flink
<a name="examples-beam-create-run"></a>

Siga estas etapas para criar, configurar, atualizar e executar o aplicativo usando o console.

### Criar o aplicativo
<a name="examples-beam-create"></a>

1. Faça login no e abra Console de gerenciamento da AWS o console Amazon MSF em https://console.aws.amazon.com /flink.

1. No painel do Managed Service for Apache Flink, selecione **Criar aplicativo de analytics**.

1. Na página **Managed Service for Apache Flink - Criar aplicativo**, forneça os detalhes do aplicativo da seguinte forma:
   + Em **Nome do aplicativo**, insira **MyApplication**.
   + Em **Runtime**, selecione **Apache Flink**.
**nota**  
Atualmente, o Apache Beam não é compatível com a versão 1.19 ou posterior do Apache Flink.
   + Selecione **Apache Flink versão 1.15** no menu suspenso de versões.

1. Em **Permissões de acesso**, selecione **Criar/atualizar o perfil do IAM `kinesis-analytics-MyApplication-us-west-2`**.

1. Selecione **Create application** (Criar aplicativo).

**nota**  
Ao criar um aplicativo Managed Service for Apache Flink usando o console, você tem a opção de ter um perfil do IAM e uma política criada para seu aplicativo. O aplicativo usa essa função e política para acessar os recursos dependentes. Esses recursos do IAM são nomeados usando o nome do aplicativo e a região da seguinte forma:  
Política: `kinesis-analytics-service-MyApplication-us-west-2`
Função: `kinesis-analytics-MyApplication-us-west-2`

### Editar a política do IAM
<a name="get-started-exercise-7-console-iam"></a>

Edite a política do IAM para adicionar permissões de acesso aos fluxos de dados do Kinesis.

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Selecione **Políticas**. Selecione a política **`kinesis-analytics-service-MyApplication-us-west-2`** que o console criou na seção anterior. 

1. Na página **Resumo**, selecione **Editar política**. Selecione a guia **JSON**.

1. Adicione a seção destacada do exemplo de política a seguir à política. Substitua a conta de amostra IDs (*012345678901*) pelo ID da sua conta.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "logs:DescribeLogGroups",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*",
                   "arn:aws:s3:::ka-app-code-<username>/basic-beam-app-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogStreams",
               "Effect": "Allow",
               "Action": "logs:DescribeLogStreams",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
           },
           {
               "Sid": "PutLogEvents",
               "Effect": "Allow",
               "Action": "logs:PutLogEvents",
               "Resource": "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteOutputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleOutputStream"
           }
       ]
   }
   ```

------

### Configure o aplicativo
<a name="examples-beam-configure"></a>

1. Na **MyApplication**página, escolha **Configurar**.

1. Na página **Configurar aplicativo**, forneça o **Local do código**:
   + Em **Bucket do Amazon S3**, insira **ka-app-code-*<username>***.
   + Em **Caminho do objeto do Amazon S3**, insira **basic-beam-app-1.0.jar**.

1. Na seção **Acesso aos recursos do aplicativo**, em **Permissões de acesso**, selecione **Criar/atualizar o perfil do IAM `kinesis-analytics-MyApplication-us-west-2`**.

1. Insira o seguinte:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/examples-beam.html)

1. Em **Monitoramento**, confirme se **Nível de monitoramento de métricas** está definido como **Aplicativo**.

1. Para **CloudWatch registrar**, marque a caixa de seleção **Ativar**.

1. Selecione **Atualizar**.

**nota**  
Quando você opta por ativar o CloudWatch registro, o Managed Service for Apache Flink cria um grupo de logs e um stream de logs para você. Os nomes desses recursos são os seguintes:   
Grupo de logs: `/aws/kinesis-analytics/MyApplication`
Fluxo de logs: `kinesis-analytics-log-stream`
Esse fluxo de logs é usado para monitorar o aplicativo. Esse não é o mesmo fluxo de logs que o aplicativo usa para enviar resultados.

### Execute o aplicativo
<a name="examples-beam-run"></a>

O gráfico de tarefas do Flink pode ser visualizado executando o aplicativo, abrindo o painel do Apache Flink e selecionando a tarefa desejada do Flink.

Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console para verificar se o aplicativo está funcionando. 

## Limpe AWS os recursos
<a name="examples-beam-cleanup"></a>

Esta seção inclui procedimentos para limpar AWS recursos criados no tutorial Tumbling Window.

**Topics**
+ [Exclua o seu aplicativo Managed Service for Apache Flink](#examples-beam-cleanup-app)
+ [Exclua seus fluxos de dados do Kinesis](#examples-beam-cleanup-stream)
+ [Excluir objeto e bucket do Amazon S3](#examples-beam-cleanup-s3)
+ [Exclua seus recursos do IAM](#examples-beam-cleanup-iam)
+ [Exclua seus CloudWatch recursos](#examples-beam-cleanup-cw)

### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-beam-cleanup-app"></a>

1. Faça login no e abra Console de gerenciamento da AWS o console Amazon MSF em https://console.aws.amazon.com /flink.

1. no painel Managed Service for Apache Flink, escolha. **MyApplication**

1. Na página do aplicativo, selecione **Excluir** e, em seguida, confirme a exclusão.

### Exclua seus fluxos de dados do Kinesis
<a name="examples-beam-cleanup-stream"></a>

1. [Abra o console do Kinesis em https://console.aws.amazon.com /kinesis.](https://console.aws.amazon.com/kinesis)

1. No painel Kinesis Data Streams, escolha. **ExampleInputStream**

1. Na **ExampleInputStream**página, escolha **Excluir Kinesis Stream** e confirme a exclusão.

1. Na página **Kinesis Streams**, escolha o, escolha **Ações **ExampleOutputStream****, escolha **Excluir** e confirme a exclusão.

### Excluir objeto e bucket do Amazon S3
<a name="examples-beam-cleanup-s3"></a>

1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Escolha o ***<username>*balde ka-app-code -.**

1. Selecione **Excluir** e, em seguida, insira o nome do bucket para confirmar a exclusão.

### Exclua seus recursos do IAM
<a name="examples-beam-cleanup-iam"></a>

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Na barra de navegação, selecione **Políticas**.

1. No controle do filtro, insira **kinesis**.

1. Escolha a política **kinesis-analytics-service- MyApplication -us-west-2**.

1. Selecione **Ações da política** e, em seguida, **Excluir**.

1. Na barra de navegação, selecione **Roles (Funções)**.

1. Escolha a função **kinesis-analytics- MyApplication** -us-west-2.

1. Selecione **Excluir função** e, em seguida, confirme a exclusão.

### Exclua seus CloudWatch recursos
<a name="examples-beam-cleanup-cw"></a>

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

1. No painel de navegação, selecione **Logs**.

1. Escolha o grupo**/aws/kinesis-analytics/MyApplication**log.

1. Selecione **Excluir grupo de logs** e, em seguida, confirme a exclusão.

## Próximas etapas
<a name="examples-beam-nextsteps"></a>

Agora que você criou e executou um aplicativo básico do Managed Service for Apache Flink que transforma dados usando o Apache Beam, consulte o aplicativo a seguir para obter um exemplo de uma solução mais avançada do Managed Service for Apache Flink.
+ **[Workshop sobre o Beam on Managed Service for Apache Flink Streaming](https://streaming-analytics.workshop.aws/beam-on-kda/)**: Neste workshop, exploramos um exemplo completo que combina aspectos de lote e streaming em um pipeline uniforme do Apache Beam. 