

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

# Informações sobre a versão anterior do Managed Service for Apache Flink
<a name="earlier"></a>

**nota**  
As versões 1.6, 1.8 e 1.11 do Apache Flink não são suportadas pela comunidade Apache Flink há mais de três anos. Nós emitimos um aviso sobre essa alteração em junho de 2024 e outubro de 2024 e agora encerraremos o suporte para essas versões no Amazon Managed Service for Apache Flink.  
Em 14 de julho de 2025 interromperemos os aplicativos e os colocaremos em um estado READY. Você poderá reiniciar as aplicações nesse momento e continuar a usá-las normalmente, sujeito aos limites de serviço.
A partir de 28 de julho de 2025, desativaremos a capacidade de INICIAR seus aplicativos. Você não poderá mais iniciar nem operar os aplicativos do Flink versão 1.6 a partir desse momento.
Recomendamos atualizar imediatamente todos os aplicativos existentes usando o Apache Flink versão 1.6, 1.8 ou 1.11 para o Apache Flink versão 1.20. Essa é a versão mais recente do Flink com suporte. Você pode atualizar seus aplicativos usando o recurso de atualização de versão in-place no Amazon Managed Service for Apache Flink. Para obter mais informações, consulte [Use atualizações de versão in-place para o Apache Flink](how-in-place-version-upgrades.md).  
Em caso de outras dúvidas ou preocupações, entre em contato conosco em [AWS Support](https://aws.amazon.com/support).

**nota**  
A versão **1.13** do Apache Flink não tem suporte da comunidade Apache Flink há mais de três anos. Agora planejamos encerrar o suporte para essa versão no Amazon Managed Service for Apache Flink em **16 de outubro de 2025**. Após essa data, você não poderá mais criar, iniciar ou executar aplicativos usando o Apache Flink versão 1.13 no Amazon Managed Service for Apache Flink.  
Você pode atualizar seus aplicativos de forma estável usando o recurso de atualizações de versão in-place no Managed Service for Apache Flink. Para obter mais informações, consulte [Use atualizações de versão in-place para o Apache Flink](how-in-place-version-upgrades.md).

A versão **1.15.2** é suportada pelo Managed Service for Apache Flink, mas não mais pela comunidade Apache Flink.

**Topics**
+ [Uso do conector Kinesis Streams para o Apache Flink com versões anteriores do Apache Flink](#how-creating-apps-building-kinesis)
+ [Compilação de aplicativos com o Apache Flink 1.8.2](#earlier-buildingapps-1_8)
+ [Compilação de aplicativos com o Apache Flink 1.6.2](#earlier-buildingapps-1_6)
+ [Atualização de aplicativos](#earlier-upgrading)
+ [Conectores disponíveis no Apache Flink 1.6.2 e 1.8.2](#earlier-connectors)
+ [Introdução: Flink 1.13.2](#getting-started-1-13)
+ [Introdução: Flink 1.11.1 - obsolescência](#earlier-gs-1_11)
+ [Introdução: Flink 1.8.2 - obsolescência](#earlier-gs-1_8)
+ [Introdução: Flink 1.6.2 - obsolescência](#earlier-gs-1_6)
+ [Exemplos de versões anteriores (legadas) do Managed Service for Apache Flink](#legacy-examples)

## Uso do conector Kinesis Streams para o Apache Flink com versões anteriores do Apache Flink
<a name="how-creating-apps-building-kinesis"></a>

O conector de fluxos Kinesis para o Apache Flink não estava incluído no Apache Flink antes da versão 1.11. Para que seu aplicativo use o conector Kinesis para o Apache Flink com versões anteriores do Apache Flink, você deve baixar, compilar e instalar a versão do Apache Flink que seu aplicativo usa. Esse conector é usado para consumir dados de um Kinesis Stream usado como fonte do aplicativo ou para gravar dados em um Kinesis Stream usado para saída do aplicativo.

**nota**  
Certifique-se de criar o conector com a [ versão 0.14.0 do KPL](https://mvnrepository.com/artifact/com.amazonaws/amazon-kinesis-producer/0.14.0) ou superior. 

Para baixar e instalar o código-fonte do Apache Flink versão 1.8.2, faça o seguinte:

1. Certifique-se de ter o [Apache Maven](https://maven.apache.org/) instalado e que sua variável de ambiente `JAVA_HOME` aponte para um JDK em vez de um JRE. Você pode testar a instalação do Apache Maven com o seguinte comando:

   ```
   mvn -version
   ```

1. Baixe o código-fonte do Apache Flink versão 1.8.2:

   ```
   wget https://archive.apache.org/dist/flink/flink-1.8.2/flink-1.8.2-src.tgz
   ```

1. Descompacte o código-fonte do Apache Flink:

   ```
   tar -xvf flink-1.8.2-src.tgz
   ```

1. Vá para o diretório do código-fonte do Apache Flink:

   ```
   cd flink-1.8.2
   ```

1. Compile e instale o Apache Flink:

   ```
   mvn clean install -Pinclude-kinesis -DskipTests
   ```
**nota**  
Se você estiver compilando o Flink no Microsoft Windows, precisará adicionar o parâmetro `-Drat.skip=true`.

## Compilação de aplicativos com o Apache Flink 1.8.2
<a name="earlier-buildingapps-1_8"></a>

Esta seção contém informações sobre os componentes que você usa para criar aplicativos do Managed Service for Apache Flink que funcionam com o Apache Flink 1.8.2.

Use as seguintes versões de componentes para os aplicativos do Managed Service for Apache Flink:


****  

| Componente | Versão | 
| --- | --- | 
| Java | 1.8 (recomendado) | 
| Apache Flink | 1.8.2 | 
| Serviço gerenciado para Apache Flink for Flink Runtime () aws-kinesisanalytics-runtime | 1.0.1 | 
| Serviço gerenciado para conectores Apache Flink Flink () aws-kinesisanalytics-flink | 1.0.1 | 
| Apache Maven | 3.1 | 

Para compilar um aplicativo usando o Apache Flink 1.8.2, execute o Maven com o seguinte parâmetro:

```
mvn package -Dflink.version=1.8.2
```

Para obter um exemplo de arquivo `pom.xml` para um aplicativo do Managed Service for Apache Flink que usa o Apache Flink versão 1.8.2, consulte [Aplicativo de conceitos básicos do Managed Service for Apache Flink 1.8.2](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/blob/master/GettingStarted_1_8/pom.xml).

Para obter informações sobre como criar e usar o código de aplicativo para um aplicativo do Managed Service for Apache Flink, consulte. [Criar uma aplicação do ](how-creating-apps.md)

## Compilação de aplicativos com o Apache Flink 1.6.2
<a name="earlier-buildingapps-1_6"></a>

Esta seção contém informações sobre os componentes que você usa para criar aplicativos do Managed Service for Apache Flink que funcionam com o Apache Flink 1.6.2.

Use as seguintes versões de componentes para os aplicativos do Managed Service for Apache Flink:


****  

| Componente | Versão | 
| --- | --- | 
| Java | 1.8 (recomendado) | 
| AWS SDK para Java | 1.11.379 | 
| Apache Flink | 1.6.2 | 
| Serviço gerenciado para Apache Flink for Flink Runtime () aws-kinesisanalytics-runtime | 1.0.1 | 
| Serviço gerenciado para conectores Apache Flink Flink () aws-kinesisanalytics-flink | 1.0.1 | 
| Apache Maven | 3.1 | 
| Apache Beam | Não é compatível com o Apache Flink 1.6.2. | 

**nota**  
Ao usar o Runtime do Managed Service for Apache Flink versão **1.0.1**, você especifica a versão do Apache Flink em seu arquivo `pom.xml` em vez de usar o parâmetro `-Dflink.version` ao compilar o código do aplicativo.

Para obter um exemplo de arquivo `pom.xml` para um aplicativo do Managed Service for Apache Flink que usa o Apache Flink versão 1.6.2, consulte [Aplicativo de conceitos básicos do Managed Service for Apache Flink 1.6.2](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/blob/master/GettingStarted_1_6/pom.xml).

Para obter informações sobre como criar e usar o código de aplicativo para um aplicativo do Managed Service for Apache Flink, consulte. [Criar uma aplicação do ](how-creating-apps.md)

## Atualização de aplicativos
<a name="earlier-upgrading"></a>

Para atualizar a versão Apache Flink de um aplicativo Amazon Managed Service para Apache Flink, use o recurso de atualização de versão do Apache Flink no local usando o AWS CLI SDK ou o. AWS CloudFormation Console de gerenciamento da AWS Para obter mais informações, consulte [Use atualizações de versão in-place para o Apache Flink](how-in-place-version-upgrades.md). 

Você pode usar esse recurso com qualquer aplicativo existente que você usa com o Amazon Managed Service for Apache Flink no estado `READY` ou `RUNNING`.

## Conectores disponíveis no Apache Flink 1.6.2 e 1.8.2
<a name="earlier-connectors"></a>

A estrutura do Apache Flink contém conectores para acessar dados de várias fontes. 
+ Para obter informações sobre conectores disponíveis na estrutura do Apache Flink 1.6.2, consulte [Conectores (1.6.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/connectors/) na [Documentação do Apache Flink (1.6.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.6/).
+ Para obter informações sobre conectores disponíveis na estrutura do Apache Flink 1.8.2, consulte [Conectores (1.8.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/connectors/) na [Documentação do Apache Flink (1.8.2)](https://ci.apache.org/projects/flink/flink-docs-release-1.8/).

## Introdução: Flink 1.13.2
<a name="getting-started-1-13"></a>

Esta seção apresenta os conceitos fundamentais do Managed Service for Apache Flink e da API. DataStream Ela descreve as opções disponíveis para criar e testar seus aplicativos. Ela também fornece instruções para instalar as ferramentas necessárias para concluir os tutoriais deste guia e criar seu primeiro aplicativo. 

**Topics**
+ [Componentes de um aplicativo Managed Service for Apache Flink](#getting-started-components-1-13)
+ [Pré-requisitos para concluir os exercícios](#setting-up-prerequisites-1-13)
+ [Etapa 1: configurar uma AWS conta e criar um usuário administrador](#earlier-gs-1_13-setting-up)
+ [Próxima etapa](#earlier-gs-1_13-setup-awscli)
+ [Etapa 2: configurar o AWS Command Line Interface (AWS CLI)](#setup-awscli-1-13)
+ [Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#get-started-exercise-1-13)
+ [Etapa 4: limpar AWS os recursos](#getting-started-cleanup-1-13)
+ [Etapa 5: Próximas etapas](#getting-started-next-steps-1-13)

### Componentes de um aplicativo Managed Service for Apache Flink
<a name="getting-started-components-1-13"></a>

Para processar dados, seu aplicativo Managed Service for Apache Flink usa um aplicativo Java/Apache Maven ou Scala que processa a entrada e produz a saída usando o tempo de execução do Apache Flink. 

O aplicativo do Managed Service for Apache Flink tem os seguintes componentes:
+ **Propriedades de runtime:** você pode usar as *propriedades de runtime* para configurar seu aplicativo sem recompilar o código do aplicativo. 
+ **Fonte:** o aplicativo consome dados usando uma *fonte*. Um conector de origem lê dados de um fluxo de dados do Kinesis, de um bucket do Amazon S3 etc. Para obter mais informações, consulte [Adicione fontes de dados de transmissão](how-sources.md).
+ **Operadores:** o aplicativo processa dados usando um ou mais *operadores*. Um operador pode transformar, enriquecer ou agregar dados. Para obter mais informações, consulte [Operadores](how-operators.md).
+ **Coletor: o aplicativo produz dados para fontes externas usando coletores***.* Um conector do coletor grava dados em um fluxo de dados do Kinesis, um fluxo do Firehose, um bucket do Amazon S3 etc. Para obter mais informações, consulte [Grave dados usando coletores ](how-sinks.md).

Depois de criar, compilar e empacotar o código da aplicativo, é necessário fazer o upload do pacote do código em um bucket do Amazon Simple Storage Service (Amazon S3). Em seguida, crie um aplicativo do Managed Service for Apache Flink. Você passa na localização do pacote de código, um fluxo de dados do Kinesis como fonte de dados de fluxo e, normalmente, um local de fluxo ou arquivo que recebe os dados processados do aplicativo.

### Pré-requisitos para concluir os exercícios
<a name="setting-up-prerequisites-1-13"></a>

Para concluir as etapas neste guia, é necessário ter o seguinte:
+ [Java Development Kit (JDK) versão 11.](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) Defina a variável do ambiente`JAVA_HOME` para apontar para o local de instalação do JDK.
+ Recomenda-se o uso de um ambiente de desenvolvimento (como [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) ou [IntelliJ Idea](https://www.jetbrains.com/idea/)) para desenvolver e compilar seu aplicativo.
+ [Cliente do Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). Instale o cliente do Git, se isso ainda não foi feito.
+ [Apache Maven Compiler Plugin](https://maven.apache.org/plugins/maven-compiler-plugin/). Maven deve estar em seu caminho de trabalho. Para testar a instalação do Apache Maven, insira o seguinte:

  ```
  $ mvn -version
  ```

Para começar a usar, acesse [Configurar uma AWS conta e criar um usuário administrador](setting-up.md).

### Etapa 1: configurar uma AWS conta e criar um usuário administrador
<a name="earlier-gs-1_13-setting-up"></a>

#### Inscreva-se para um Conta da AWS
<a name="sign-up-for-aws"></a>

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

**Para se inscrever em um Conta da AWS**

1. Abra a [https://portal.aws.amazon.com/billing/inscrição.](https://portal.aws.amazon.com/billing/signup)

1. Siga as instruções online.

   Parte do procedimento de inscrição envolve receber uma chamada telefônica ou uma mensagem de texto e inserir um código de verificação pelo teclado do telefone.

   Quando você se inscreve em um Conta da AWS, um *Usuário raiz da conta da AWS*é criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar [tarefas que exigem acesso de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando [https://aws.amazon.com/e](https://aws.amazon.com/) escolhendo **Minha conta**.

#### Criar um usuário com acesso administrativo
<a name="create-an-admin"></a>

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS Centro de Identidade do AWS IAM, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

**Proteja seu Usuário raiz da conta da AWS**

1.  Faça login [Console de gerenciamento da AWS](https://console.aws.amazon.com/)como proprietário da conta escolhendo **Usuário raiz** e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

   Para obter ajuda ao fazer login usando o usuário-raiz, consulte [Fazer login como usuário-raiz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) no *Guia do usuário do Início de Sessão da AWS *.

1. Habilite a autenticação multifator (MFA) para o usuário-raiz.

   Para obter instruções, consulte [Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) do *usuário do IAM*.

**Criar um usuário com acesso administrativo**

1. Habilita o Centro de Identidade do IAM.

   Para obter instruções, consulte [Habilitar o Centro de Identidade do AWS IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

   Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte [Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) no *Guia Centro de Identidade do AWS IAM do usuário*.

**Iniciar sessão como o usuário com acesso administrativo**
+ Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

  Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como [fazer login no portal de AWS acesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) no *Guia Início de Sessão da AWS do usuário*.

**Atribuir acesso a usuários adicionais**

1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

   Para obter instruções, consulte [Criar um conjunto de permissões](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. Atribua usuários a um grupo e, em seguida, atribua o acesso de logon único ao grupo.

   Para obter instruções, consulte [Adicionar grupos](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

#### Conceder acesso programático
<a name="setting-up-access-gs-13"></a>

Os usuários precisam de acesso programático se quiserem interagir com pessoas AWS fora do Console de gerenciamento da AWS. A forma de conceder acesso programático depende do tipo de usuário que está acessando AWS.

Para conceder acesso programático aos usuários, selecione uma das seguintes opções:


****  

| Qual usuário precisa de acesso programático? | Para | Por | 
| --- | --- | --- | 
| IAM | (Recomendado) Use as credenciais do console como credenciais temporárias para assinar solicitações programáticas para o AWS CLI, AWS SDKs ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
|  Identidade da força de trabalho (Usuários gerenciados no Centro de Identidade do IAM)  | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
| IAM | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs | Siga as instruções em [Como usar credenciais temporárias com AWS recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) no Guia do usuário do IAM. | 
| IAM | (Não recomendado)Use credenciais de longo prazo para assinar solicitações programáticas para o AWS CLI, AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 

#### Próxima etapa
<a name="earlier-gs-1_13-setting-up-next-step-2"></a>

[Configure o AWS Command Line Interface (AWS CLI)](#earlier-gs-1_13-setup-awscli)

### Próxima etapa
<a name="earlier-gs-1_13-setup-awscli"></a>

[Etapa 2: configurar o AWS Command Line Interface (AWS CLI)](#setup-awscli-1-13)

### Etapa 2: configurar o AWS Command Line Interface (AWS CLI)
<a name="setup-awscli-1-13"></a>

Nesta etapa, você baixa e configura o AWS CLI para usar com o Managed Service para Apache Flink.

**nota**  
Os exercícios de conceitos básicos neste guia pressupõem o uso de credenciais de administrador (`adminuser`) em sua conta para executar as operações.

**nota**  
Se você já tem o AWS CLI instalado, talvez seja necessário fazer o upgrade para obter a funcionalidade mais recente. Para obter mais informações, consulte [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) no *Guia do usuário da AWS Command Line Interface *. Para verificar a versão do AWS CLI, execute o seguinte comando:  

```
aws --version
```
Os exercícios deste tutorial exigem a seguinte AWS CLI versão ou posterior:  

```
aws-cli/1.16.63
```

**Para configurar o AWS CLI**

1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no *Guia do usuário do AWS Command Line Interface *: 
   + [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [Configurando a AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. Adicione um perfil nomeado para o usuário administrador no AWS CLI `config` arquivo. É possível usar esse perfil ao executar os comandos da AWS CLI . Para obter mais informações sobre perfis nomeados, consulte [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html) no *Guia do usuário da AWS Command Line Interface *.

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   Para obter uma lista das AWS regiões disponíveis, consulte [Regiões e endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html) no *Referência geral da Amazon Web Services*.
**nota**  
O código e os comandos de exemplo neste tutorial usam a região Oeste dos EUA (Oregon). Para usar uma região diferente, altere a região no código e nos comandos deste tutorial para a região que você deseja usar.

1. Verifique a configuração digitando o seguinte comando no prompt de comando: 

   ```
   aws help
   ```

Depois de configurar uma AWS conta e a AWS CLI, você pode tentar o próximo exercício, no qual você configura um aplicativo de amostra e testa a end-to-end configuração.

#### Próxima etapa
<a name="setup-awscli-next-step-3-1-13"></a>

[Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#get-started-exercise-1-13)

### Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink
<a name="get-started-exercise-1-13"></a>

Neste exercício, será criado um aplicativo Managed Service for Apache Flink com fluxos de dados como origem e coletor.

**Topics**
+ [Criar dois fluxos de dados do Amazon Kinesis](#get-started-exercise-1-1-13)
+ [Gravação de registros de amostra no fluxo de entrada](#get-started-exercise-2-1-13)
+ [Baixar e examinar o código Java de fluxo do Apache Flink](#get-started-exercise-5-1-13)
+ [Compilar o código da aplicação](#get-started-exercise-5.5-1-13)
+ [Upload do código Java de fluxo do Apache Flink](#get-started-exercise-6-1-13)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#get-started-exercise-7-1-13)
+ [Próxima etapa](#get-started-exercise-next-step-4-1-13)

#### Criar dois fluxos de dados do Amazon Kinesis
<a name="get-started-exercise-1-1-13"></a>

Antes de criar um aplicativo do Managed Service for Apache Flink para este exercício, crie dois fluxos de dados do Kinesis (`ExampleInputStream` e `ExampleOutputStream`). O aplicativo usa esses fluxos para os fluxos de origem e de destino do aplicativo.

É possível criar esses fluxos usando o console do Amazon Kinesis ou o comando da AWS CLI a seguir. Para obter instruções sobre o console, consulte [Criar e atualizar fluxos de dados](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*. 

**Como criar os fluxos de dados (AWS CLI)**

1. Para criar o primeiro stream (`ExampleInputStream`), use o seguinte comando do Amazon Kinesis `create-stream` AWS CLI .

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. Para criar o segundo fluxo que o aplicativo usa para gravar a saída, execute o mesmo comando, alterando o nome da transmissão para `ExampleOutputStream`.

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### Gravação de registros de amostra no fluxo de entrada
<a name="get-started-exercise-2-1-13"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
       import datetime
       import json
       import random
       import boto3
       STREAM_NAME = "ExampleInputStream"
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Mais adiante neste tutorial, será executado o script `stock.py` para enviar dados para o aplicativo. 

   ```
   $ python stock.py
   ```

#### Baixar e examinar o código Java de fluxo do Apache Flink
<a name="get-started-exercise-5-1-13"></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. Duplique o repositório remoto usando 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/GettingStarted`.

Observe o seguinte sobre o código do aplicativo:
+ Um arquivo [Project Object Model (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) contém informações sobre a configuração e as dependências da aplicação, incluindo as bibliotecas do Managed Service for Apache Flink.
+ O arquivo `BasicStreamingJob.java` contém o método `main` que define a funcionalidade do aplicativo.
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ Seu aplicativo cria conectores de origem e de destino para acessar recursos externos usando um objeto `StreamExecutionEnvironment`. 
+ O aplicativo cria conectores de origem e de destino usando propriedades estáticas. Para usar as propriedades dinâmicas do aplicativo, use os métodos `createSourceFromApplicationProperties` e `createSinkFromApplicationProperties` para criar os conectores. Esses métodos leem as propriedades do aplicativo para configurar os conectores.

  Para obter mais informações sobre as propriedades do runtime, consulte [Use as propriedades de runtime](how-properties.md).

#### Compilar o código da aplicação
<a name="get-started-exercise-5.5-1-13"></a>

Nesta seção, será usado o compilador do Apache Maven para criar o código Java para o aplicativo. Para obter informações sobre como instalar o Apache Maven e o Java Development Kit (JDK), consulte [Atenda os pré-requisitos para concluir os exercícios](getting-started.md#setting-up-prerequisites).

**Para compilar o código do aplicativo**

1. Para usar o seu código de aplicativo, compile-o e empacote-o em um arquivo JAR. Há duas formas de compilar e empacotar o código:
   + Use a ferramenta de linha de comando do Maven. Crie seu arquivo JAR executando o seguinte comando no diretório que contém o arquivo `pom.xml`:

     ```
     mvn package -Dflink.version=1.13.2
     ```
   + Use o ambiente de desenvolvimento. Consulte a documentação de seu ambiente de desenvolvimento para obter mais detalhes.
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. 

   É possível carregar o pacote como um arquivo JAR, ou pode compactar o pacote e carregá-lo como um arquivo ZIP. Se você criar seu aplicativo usando o AWS CLI, especifique o tipo de conteúdo do código (JAR ou ZIP).

1. Se houver erros durante a compilação, verifique se sua variável de ambiente `JAVA_HOME` está definida corretamente.

Se o aplicativo for compilado com êxito, o arquivo a seguir é criado:

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### Upload do código Java de fluxo do Apache Flink
<a name="get-started-exercise-6-1-13"></a>

Nesta seção, será criado um bucket do Amazon Simple Storage Service (Amazon S3) e realizado o upload do código do aplicativo.

**Para fazer upload do código do aplicativo**

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

1. Selecione **Criar bucket**.

1. Insira **ka-app-code-*<username>*** no campo **Nome do bucket**. Adicione um sufixo para o nome do bucket, como o nome do usuário, para torná-lo globalmente exclusivo. Selecione **Next** (Próximo).

1. Na etapa **Configurar opções**, mantenha as configurações como estão e selecione **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão e selecione **Próximo**.

1. Selecione **Criar bucket**.

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 `aws-kinesis-analytics-java-apps-1.0.jar`, criado na etapa anterior. Selecione **Next** (Próximo).

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="get-started-exercise-7-1-13"></a>

É possível criar e executar um aplicativo Managed Service for Apache Flink usando o console ou a AWS CLI.

**nota**  
Quando você cria o aplicativo usando o console, seus recursos AWS Identity and Access Management (IAM) e do Amazon CloudWatch Logs são criados para você. Ao criar o aplicativo usando o AWS CLI, você cria esses recursos separadamente.

**Topics**
+ [Crie e execute o aplicativo (console)](#get-started-exercise-7-console-1-13)
+ [Criar e executar a aplicação (AWS CLI)](#get-started-exercise-7-cli-1-13)

##### Crie e execute o aplicativo (console)
<a name="get-started-exercise-7-console-1-13"></a>

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

##### Criar o aplicativo
<a name="get-started-exercise-7-console-create-1-13"></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 **Descrição**, insira **My java test app**.
   + Em **Runtime**, selecione **Apache Flink**.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.13**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Editar a política do IAM
<a name="get-started-exercise-7-console-iam-1-13"></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",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "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="get-started-exercise-7-console-configure-1-13"></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 **aws-kinesis-analytics-java-apps-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/earlier.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 na Amazon, 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`

##### Execute o aplicativo
<a name="get-started-exercise-7-console-run-1-13"></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.

##### Interromper o aplicativo
<a name="get-started-exercise-7-console-stop-1-13"></a>

Na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Atualizar o aplicativo
<a name="get-started-exercise-7-console-update-1-13"></a>

Usando o console, é possível atualizar configurações do aplicativo, como as propriedades do aplicativo, as configurações de monitoramento e a localização ou o nome do arquivo JAR do aplicativo. Também é possível recarregar o JAR do aplicativo do bucket do Amazon S3 se for necessário atualizar o código do aplicativo.

Na **MyApplication**página, escolha **Configurar**. Atualize as configurações do aplicativo e selecione **Atualizar**.

##### Criar e executar a aplicação (AWS CLI)
<a name="get-started-exercise-7-cli-1-13"></a>

Nesta seção, você usa o AWS CLI para criar e executar o aplicativo Managed Service for Apache Flink. O Managed Service for Apache Flink usa o `kinesisanalyticsv2` AWS CLI comando para criar e interagir com o Managed Service for Apache Flink aplicativos.

##### Criação de uma política de permissões
<a name="get-started-exercise-7-cli-policy-1-13"></a>

**nota**  
Você deve criar uma política de permissões e uma função para o seu aplicativo. Se você não criar esses recursos do IAM, seu aplicativo não poderá acessar seus fluxos de logs e dados.

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação `read` no fluxo de origem, e outra que concede permissões para ações `write` no fluxo de destino. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. Substitua `username` pelo nome de usuário usado para criar o bucket do Amazon S3 e armazenar o código do aplicativo. Substitua o ID da conta nos nomes de recursos da Amazon (ARNs) (`012345678901`) pelo ID da sua conta.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "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"
        }
    ]
}
```

------

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

**nota**  
Para acessar outros serviços da Amazon, você pode usar o AWS SDK para Java. O Managed Service for Apache Flink define automaticamente as credenciais exigidas pelo SDK como as credenciais do perfil do IAM associado a seu aplicativo. Não é necessária nenhuma etapa adicional.

##### Criar um perfil do IAM
<a name="get-started-exercise-7-cli-role-1-13"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo sem permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink permissão para assumir o perfil, e a política de permissões determina o que o serviço pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função.

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Funções** e **Criar função**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **Serviço da AWS **. Em **Selecionar o serviço que usará esta função**, selecione **Kinesis**. Em **Selecionar seu caso de uso**, selecione **Kinesis Analytics**.

   Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**.

   Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, atualize as políticas de confiança e de permissões para a função.

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, anexe a política criada na etapa anterior, [Criação de uma política de permissões](#get-started-exercise-7-cli-policy-1-13).

   1. Na página **Resumo**, selecione a guia **Permissões**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior).

   1. Selecione a política **AKReadSourceStreamWriteSinkStream** e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usa para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Crie o aplicativo do Managed Service for Apache Flink
<a name="get-started-exercise-7-cli-create-1-13"></a>

1. Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket (`username`) pelo sufixo selecionado na seção anterior. Substitua o ID da conta de exemplo (`012345678901`) na função de execução do serviço pelo ID da conta.

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_15",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) com a solicitação anterior para criar o aplicativo: 

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="get-started-exercise-7-cli-start-1-13"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="get-started-exercise-7-cli-stop-1-13"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
      "ApplicationName": "test"
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) com a seguinte solicitação para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="get-started-exercise-7-cli-cw-1-13"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte[Configure o registro em log do aplicativo no Managed Service for Apache Flink](cloudwatch-logs.md).

##### Atualizar propriedades do ambiente
<a name="get-started-exercise-7-cli-update-env-1-13"></a>

Nesta seção, você usa a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) para alterar as propriedades do ambiente do aplicativo sem recompilar o código do aplicativo. Neste exemplo, você altera a região dos fluxos de origem e destino.

**Para atualizar propriedades de ambiente para o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `update_properties_request.json`.

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) com a solicitação anterior para atualizar as propriedades do ambiente:

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### Atualizar o código do aplicativo
<a name="get-started-exercise-7-cli-update-code-1-13"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI ação.

**nota**  
Para carregar uma nova versão do código do aplicativo com o mesmo nome de arquivo, você deve especificar a nova versão do objeto. Para obter mais informações sobre o uso de versões de objetos do Amazon S3, consulte Como [ativar ou desativar](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html) o controle de versão.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo nome de bucket e objeto do Amazon S3 e a nova versão do objeto. O aplicativo será reiniciado com o novo pacote de código.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (*<username>*) com o sufixo que você escolheu na [Criar dois fluxos de dados do Amazon Kinesis](get-started-exercise.md#get-started-exercise-1) seção.

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

#### Próxima etapa
<a name="get-started-exercise-next-step-4-1-13"></a>

[Etapa 4: limpar AWS os recursos](#getting-started-cleanup-1-13)

### Etapa 4: limpar AWS os recursos
<a name="getting-started-cleanup-1-13"></a>

Esta seção inclui procedimentos para limpar AWS recursos criados no tutorial de introdução.

**Topics**
+ [Exclua o seu aplicativo Managed Service for Apache Flink](#getting-started-cleanup-app-1-13)
+ [Exclua seus fluxos de dados do Kinesis](#getting-started-cleanup-stream-1-13)
+ [Excluir objeto e bucket do Amazon S3](#getting-started-cleanup-s3-1-13)
+ [Exclua seus recursos do IAM](#getting-started-cleanup-iam-1-13)
+ [Exclua seus CloudWatch recursos](#getting-started-cleanup-cw-1-13)
+ [Próxima etapa](#getting-started-cleanup-next-step-5-1-13)

#### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="getting-started-cleanup-app-1-13"></a>

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

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="getting-started-cleanup-stream-1-13"></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 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="getting-started-cleanup-s3-1-13"></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="getting-started-cleanup-iam-1-13"></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="getting-started-cleanup-cw-1-13"></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óxima etapa
<a name="getting-started-cleanup-next-step-5-1-13"></a>

[Etapa 5: Próximas etapas](#getting-started-next-steps-1-13)

### Etapa 5: Próximas etapas
<a name="getting-started-next-steps-1-13"></a>

Agora que você criou e executou um aplicativo básico do Managed Service for Apache Flink, consulte os seguintes recursos para obter soluções mais avançadas de Managed Service for Apache Flink.
+ **[A solução AWS de streaming de dados para o Amazon Kinesis](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-kinesis/):** A solução de dados de AWS streaming para o Amazon Kinesis configura automaticamente AWS os serviços necessários para capturar, armazenar, processar e entregar dados de streaming com facilidade. A solução oferece várias opções para resolver casos de uso de dados de transmissão. A opção Managed Service for Apache Flink fornece um exemplo de ETL de end-to-end streaming que demonstra um aplicativo do mundo real que executa operações analíticas em dados simulados de táxi de Nova York. A solução configura todos os AWS recursos necessários, como funções e políticas do IAM, um CloudWatch painel e CloudWatch alarmes.
+ **[AWS Solução de streaming de dados para Amazon MSK](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-msk/):** A solução AWS de dados de streaming para Amazon MSK fornece AWS CloudFormation modelos em que os dados fluem por produtores, armazenamento de streaming, consumidores e destinos. 
+ ** [ Clickstream Lab com Apache Flink e Apache Kafka](https://amazonmsk-labs.workshop.aws/en/mskkdaflinklab.html)**: um laboratório completo para casos de uso de clickstream usando Amazon Managed Streaming for Apache Kafka para armazenamento de transmissão e aplicativos Managed Service for Apache Flink for Apache Flink para processamento de fluxos.
+ **[Workshop do Amazon Managed Service para Apache Flink](https://catalog.workshops.aws/managed-flink):** Neste workshop, você cria uma arquitetura de end-to-end streaming para ingerir, analisar e visualizar dados de streaming quase em tempo real. Você decidiu melhorar as operações de uma empresa de táxi na cidade de Nova York. Você analisa os dados de telemetria de uma frota de táxis na cidade de Nova York quase em tempo real para otimizar as operações da frota.
+ **[Conheça o Flink: treinamento prático](https://ci.apache.org/projects/flink/flink-docs-master/learn-flink/):** Treinamento introdutório oficial do Apache Flink que ajuda você a começar a escrever ETL de transmissão escalável, analytics e aplicativos orientados a eventos.
**nota**  
Esteja ciente de que o Managed Service for Apache Flink não é compatível com a versão Apache Flink (1.12) usada neste treinamento. Você pode usar o Flink 1.15.2 no Flink Managed Service para Apache Flink. 

## Introdução: Flink 1.11.1 - obsolescência
<a name="earlier-gs-1_11"></a>

**nota**  
As versões **1.6, 1.8 e 1.11** do Apache Flink não são suportadas pela comunidade do Apache Flink há mais de três anos. Planejamos descontinuar essas versões no Amazon Managed Service for Apache Flink em **5 de novembro de 2024**. A partir dessa data, você não poderá mais criar novos aplicativos para essas versões do Flink. No momento, ainda é possível continuar executando os aplicativos existentes. Você pode atualizar seus aplicativos de forma estável usando o recurso de atualizações de versão in-place no Amazon Managed Service for Apache Flink. Para obter mais informações, consulte [Use atualizações de versão in-place para o Apache Flink](how-in-place-version-upgrades.md).

Este tópico contém uma versão do Tutorial [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md) que usa o Apache Flink 1.11.1.

Esta seção apresenta os conceitos fundamentais do Managed Service for Apache Flink e da API. DataStream Ela descreve as opções disponíveis para criar e testar seus aplicativos. Ela também fornece instruções para instalar as ferramentas necessárias para concluir os tutoriais deste guia e criar seu primeiro aplicativo. 

**Topics**
+ [Componentes de um aplicativo Managed Service for Apache Flink](#earlier-gs-1_11-components)
+ [Pré-requisitos para concluir os exercícios](#earlier-gs-1_11-setting-up-prerequisites)
+ [Etapa 1: configurar uma AWS conta e criar um usuário administrador](#earlier-gs-1_11-setting-up)
+ [Etapa 2: configurar o AWS Command Line Interface (AWS CLI)](#earlier-gs-1_11-setup-awscli)
+ [Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#earlier-gs-1_11-get-started-exercise)
+ [Etapa 4: limpar AWS os recursos](#earlier-gs-1_11-cleanup)
+ [Etapa 5: Próximas etapas](#earlier-gs-1_11-next-steps)

### Componentes de um aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_11-components"></a>

Para processar dados, seu aplicativo Managed Service for Apache Flink usa um aplicativo Java/Apache Maven ou Scala que processa a entrada e produz a saída usando o tempo de execução do Apache Flink. 

O Managed Service for Apache Flink tem os seguintes componentes:
+ **Propriedades de runtime:** você pode usar as *propriedades de runtime* para configurar seu aplicativo sem recompilar o código do aplicativo. 
+ **Fonte:** o aplicativo consome dados usando uma *fonte*. Um conector de origem lê dados de um fluxo de dados do Kinesis, de um bucket do Amazon S3 etc. Para obter mais informações, consulte [Adicione fontes de dados de transmissão](how-sources.md).
+ **Operadores:** o aplicativo processa dados usando um ou mais *operadores*. Um operador pode transformar, enriquecer ou agregar dados. Para obter mais informações, consulte [Operadores](how-operators.md).
+ **Coletor: o aplicativo produz dados para fontes externas usando coletores***.* Um conector do coletor grava dados em um fluxo de dados do Kinesis, um fluxo do Firehose, um bucket do Amazon S3 etc. Para obter mais informações, consulte [Grave dados usando coletores ](how-sinks.md).

Depois de criar, compilar e empacotar o código da aplicativo, é necessário fazer o upload do pacote do código em um bucket do Amazon Simple Storage Service (Amazon S3). Em seguida, crie um aplicativo do Managed Service for Apache Flink. Você passa na localização do pacote de código, um fluxo de dados do Kinesis como fonte de dados de fluxo e, normalmente, um local de fluxo ou arquivo que recebe os dados processados do aplicativo.

### Pré-requisitos para concluir os exercícios
<a name="earlier-gs-1_11-setting-up-prerequisites"></a>

Para concluir as etapas neste guia, é necessário ter o seguinte:
+ [Java Development Kit (JDK) versão 11.](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) Defina a variável do ambiente`JAVA_HOME` para apontar para o local de instalação do JDK.
+ Recomenda-se o uso de um ambiente de desenvolvimento (como [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) ou [IntelliJ Idea](https://www.jetbrains.com/idea/)) para desenvolver e compilar seu aplicativo.
+ [Cliente do Git](https://git-scm.com/book/en/v2/earlier-gs-1_11-Installing-Git). Instale o cliente do Git, se isso ainda não foi feito.
+ [Apache Maven Compiler Plugin](https://maven.apache.org/plugins/maven-compiler-plugin/). Maven deve estar em seu caminho de trabalho. Para testar a instalação do Apache Maven, insira o seguinte:

  ```
  $ mvn -version
  ```

Para começar a usar, acesse [Configurar uma AWS conta e criar um usuário administrador](setting-up.md).

### Etapa 1: configurar uma AWS conta e criar um usuário administrador
<a name="earlier-gs-1_11-setting-up"></a>

#### Inscreva-se para um Conta da AWS
<a name="sign-up-for-aws"></a>

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

**Para se inscrever em um Conta da AWS**

1. Abra a [https://portal.aws.amazon.com/billing/inscrição.](https://portal.aws.amazon.com/billing/signup)

1. Siga as instruções online.

   Parte do procedimento de inscrição envolve receber uma chamada telefônica ou uma mensagem de texto e inserir um código de verificação pelo teclado do telefone.

   Quando você se inscreve em um Conta da AWS, um *Usuário raiz da conta da AWS*é criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar [tarefas que exigem acesso de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando [https://aws.amazon.com/e](https://aws.amazon.com/) escolhendo **Minha conta**.

#### Criar um usuário com acesso administrativo
<a name="create-an-admin"></a>

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS Centro de Identidade do AWS IAM, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

**Proteja seu Usuário raiz da conta da AWS**

1.  Faça login [Console de gerenciamento da AWS](https://console.aws.amazon.com/)como proprietário da conta escolhendo **Usuário raiz** e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

   Para obter ajuda ao fazer login usando o usuário-raiz, consulte [Fazer login como usuário-raiz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) no *Guia do usuário do Início de Sessão da AWS *.

1. Habilite a autenticação multifator (MFA) para o usuário-raiz.

   Para obter instruções, consulte [Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) do *usuário do IAM*.

**Criar um usuário com acesso administrativo**

1. Habilita o Centro de Identidade do IAM.

   Para obter instruções, consulte [Habilitar o Centro de Identidade do AWS IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

   Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte [Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) no *Guia Centro de Identidade do AWS IAM do usuário*.

**Iniciar sessão como o usuário com acesso administrativo**
+ Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

  Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como [fazer login no portal de AWS acesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) no *Guia Início de Sessão da AWS do usuário*.

**Atribuir acesso a usuários adicionais**

1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

   Para obter instruções, consulte [Criar um conjunto de permissões](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. Atribua usuários a um grupo e, em seguida, atribua o acesso de logon único ao grupo.

   Para obter instruções, consulte [Adicionar grupos](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

#### Conceder acesso programático
<a name="setting-up-access-gs-11"></a>

Os usuários precisam de acesso programático se quiserem interagir com pessoas AWS fora do Console de gerenciamento da AWS. A forma de conceder acesso programático depende do tipo de usuário que está acessando AWS.

Para conceder acesso programático aos usuários, selecione uma das seguintes opções:


****  

| Qual usuário precisa de acesso programático? | Para | Por | 
| --- | --- | --- | 
| IAM | (Recomendado) Use as credenciais do console como credenciais temporárias para assinar solicitações programáticas para o AWS CLI, AWS SDKs ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
|  Identidade da força de trabalho (Usuários gerenciados no Centro de Identidade do IAM)  | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
| IAM | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs | Siga as instruções em [Como usar credenciais temporárias com AWS recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) no Guia do usuário do IAM. | 
| IAM | (Não recomendado)Use credenciais de longo prazo para assinar solicitações programáticas para o AWS CLI, AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 

#### Próxima etapa
<a name="earlier-gs-1_11-setting-up-next-step-2"></a>

[Configure o AWS Command Line Interface (AWS CLI)](#earlier-gs-1_11-setup-awscli)

### Etapa 2: configurar o AWS Command Line Interface (AWS CLI)
<a name="earlier-gs-1_11-setup-awscli"></a>

Nesta etapa, você baixa e configura o AWS CLI para usar com o Managed Service para Apache Flink.

**nota**  
Os exercícios de conceitos básicos neste guia pressupõem o uso de credenciais de administrador (`adminuser`) em sua conta para executar as operações.

**nota**  
Se você já tem o AWS CLI instalado, talvez seja necessário fazer o upgrade para obter a funcionalidade mais recente. Para obter mais informações, consulte [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) no *Guia do usuário da AWS Command Line Interface *. Para verificar a versão do AWS CLI, execute o seguinte comando:  

```
aws --version
```
Os exercícios deste tutorial exigem a seguinte AWS CLI versão ou posterior:  

```
aws-cli/1.16.63
```

**Para configurar o AWS CLI**

1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no *Guia do usuário do AWS Command Line Interface *: 
   + [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [Configurando a AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-earlier-gs-1_11.html)

1. Adicione um perfil nomeado para o usuário administrador no AWS CLI `config` arquivo. É possível usar esse perfil ao executar os comandos da AWS CLI . Para obter mais informações sobre perfis nomeados, consulte [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html) no *Guia do usuário da AWS Command Line Interface *.

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   Para obter uma lista das AWS regiões disponíveis, consulte [Regiões e endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html) no *Referência geral da Amazon Web Services*.
**nota**  
O código e os comandos de exemplo neste tutorial usam a região Oeste dos EUA (Oregon). Para usar uma região diferente, altere a região no código e nos comandos deste tutorial para a região que você deseja usar.

1. Verifique a configuração digitando o seguinte comando no prompt de comando: 

   ```
   aws help
   ```

Depois de configurar uma AWS conta e a AWS CLI, você pode tentar o próximo exercício, no qual você configura um aplicativo de amostra e testa a end-to-end configuração.

#### Próxima etapa
<a name="earlier-gs-1_11-setup-awscli-next-step-3"></a>

[Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#earlier-gs-1_11-get-started-exercise)

### Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_11-get-started-exercise"></a>

Neste exercício, será criado um aplicativo Managed Service for Apache Flink com fluxos de dados como origem e coletor.

**Topics**
+ [Criar dois fluxos de dados do Amazon Kinesis](#earlier-gs-1_11-get-started-exercise-1)
+ [Gravação de registros de amostra no fluxo de entrada](#earlier-gs-1_11-get-started-exercise-2)
+ [Baixar e examinar o código Java de fluxo do Apache Flink](#earlier-gs-1_11-get-started-exercise-5)
+ [Compilar o código da aplicação](#earlier-gs-1_11-get-started-exercise-5.5)
+ [Upload do código Java de fluxo do Apache Flink](#earlier-gs-1_11-get-started-exercise-6)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#earlier-gs-1_11-get-started-exercise-7)
+ [Próxima etapa](#earlier-gs-1_11-get-started-exercise-next-step-4)

#### Criar dois fluxos de dados do Amazon Kinesis
<a name="earlier-gs-1_11-get-started-exercise-1"></a>

Antes de criar um aplicativo do Managed Service for Apache Flink para este exercício, crie dois fluxos de dados do Kinesis (`ExampleInputStream` e `ExampleOutputStream`). O aplicativo usa esses fluxos para os fluxos de origem e de destino do aplicativo.

É possível criar esses fluxos usando o console do Amazon Kinesis ou o comando da AWS CLI a seguir. Para obter instruções sobre o console, consulte [Criar e atualizar fluxos de dados](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*. 

**Como criar os fluxos de dados (AWS CLI)**

1. Para criar o primeiro stream (`ExampleInputStream`), use o seguinte comando do Amazon Kinesis `create-stream` AWS CLI .

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. Para criar o segundo fluxo que o aplicativo usa para gravar a saída, execute o mesmo comando, alterando o nome da transmissão para `ExampleOutputStream`.

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### Gravação de registros de amostra no fluxo de entrada
<a name="earlier-gs-1_11-get-started-exercise-2"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo para o aplicativo processar.

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

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

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. Mais adiante neste tutorial, será executado o script `stock.py` para enviar dados para o aplicativo. 

   ```
   $ python stock.py
   ```

#### Baixar e examinar o código Java de fluxo do Apache Flink
<a name="earlier-gs-1_11-get-started-exercise-5"></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. Duplique o repositório remoto usando 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/GettingStarted`.

Observe o seguinte sobre o código do aplicativo:
+ Um arquivo [Project Object Model (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) contém informações sobre a configuração e as dependências da aplicação, incluindo as bibliotecas do Managed Service for Apache Flink.
+ O arquivo `BasicStreamingJob.java` contém o método `main` que define a funcionalidade do aplicativo.
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ Seu aplicativo cria conectores de origem e de destino para acessar recursos externos usando um objeto `StreamExecutionEnvironment`. 
+ O aplicativo cria conectores de origem e de destino usando propriedades estáticas. Para usar as propriedades dinâmicas do aplicativo, use os métodos `createSourceFromApplicationProperties` e `createSinkFromApplicationProperties` para criar os conectores. Esses métodos leem as propriedades do aplicativo para configurar os conectores.

  Para obter mais informações sobre as propriedades do runtime, consulte [Use as propriedades de runtime](how-properties.md).

#### Compilar o código da aplicação
<a name="earlier-gs-1_11-get-started-exercise-5.5"></a>

Nesta seção, será usado o compilador do Apache Maven para criar o código Java para o aplicativo. Para obter informações sobre como instalar o Apache Maven e o Java Development Kit (JDK), consulte [Atenda os pré-requisitos para concluir os exercícios](getting-started.md#setting-up-prerequisites).

**Para compilar o código do aplicativo**

1. Para usar o seu código de aplicativo, compile-o e empacote-o em um arquivo JAR. Há duas formas de compilar e empacotar o código:
   + Use a ferramenta de linha de comando do Maven. Crie seu arquivo JAR executando o seguinte comando no diretório que contém o arquivo `pom.xml`:

     ```
     mvn package -Dflink.version=1.11.3
     ```
   + Use o ambiente de desenvolvimento. Consulte a documentação de seu ambiente de desenvolvimento para obter mais detalhes.
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. Certifique-se de que a versão Java do seu projeto seja 11.

   É possível carregar o pacote como um arquivo JAR, ou pode compactar o pacote e carregá-lo como um arquivo ZIP. Se você criar seu aplicativo usando o AWS CLI, especifique o tipo de conteúdo do código (JAR ou ZIP).

1. Se houver erros durante a compilação, verifique se sua variável de ambiente `JAVA_HOME` está definida corretamente.

Se o aplicativo for compilado com êxito, o arquivo a seguir é criado:

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### Upload do código Java de fluxo do Apache Flink
<a name="earlier-gs-1_11-get-started-exercise-6"></a>

Nesta seção, será criado um bucket do Amazon Simple Storage Service (Amazon S3) e realizado o upload do código do aplicativo.

**Para fazer upload do código do aplicativo**

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

1. Selecione **Criar bucket**.

1. Insira **ka-app-code-*<username>*** no campo **Nome do bucket**. Adicione um sufixo para o nome do bucket, como o nome do usuário, para torná-lo globalmente exclusivo. Selecione **Next** (Próximo).

1. Na etapa **Configurar opções**, mantenha as configurações como estão e selecione **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão e selecione **Próximo**.

1. Selecione **Criar bucket**.

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 `aws-kinesis-analytics-java-apps-1.0.jar`, criado na etapa anterior. Selecione **Next** (Próximo).

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="earlier-gs-1_11-get-started-exercise-7"></a>

É possível criar e executar um aplicativo Managed Service for Apache Flink usando o console ou a AWS CLI.

**nota**  
Quando você cria o aplicativo usando o console, seus recursos AWS Identity and Access Management (IAM) e do Amazon CloudWatch Logs são criados para você. Ao criar o aplicativo usando o AWS CLI, você cria esses recursos separadamente.

**Topics**
+ [Crie e execute o aplicativo (console)](#earlier-gs-1_11-get-started-exercise-7-console)
+ [Criar e executar a aplicação (AWS CLI)](#earlier-gs-1_11-get-started-exercise-7-cli)

##### Crie e execute o aplicativo (console)
<a name="earlier-gs-1_11-get-started-exercise-7-console"></a>

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

##### Criar a aplicação
<a name="earlier-gs-1_11-get-started-exercise-7-console-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 **Descrição**, insira **My java test app**.
   + Em **Runtime**, selecione **Apache Flink**.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.11 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Editar a política do IAM
<a name="earlier-gs-1_11-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",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "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="earlier-gs-1_11-get-started-exercise-7-console-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 **aws-kinesis-analytics-java-apps-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. Em **Propriedades**, **ID do grupo**, insira **ProducerConfigProperties**.

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.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 na Amazon, 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`

##### Execute o aplicativo
<a name="earlier-gs-1_11-get-started-exercise-7-console-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.

##### Interromper o aplicativo
<a name="earlier-gs-1_11-get-started-exercise-7-console-stop"></a>

Na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Atualizar o aplicativo
<a name="earlier-gs-1_11-get-started-exercise-7-console-update"></a>

Usando o console, é possível atualizar configurações do aplicativo, como as propriedades do aplicativo, as configurações de monitoramento e a localização ou o nome do arquivo JAR do aplicativo. Também é possível recarregar o JAR do aplicativo do bucket do Amazon S3 se for necessário atualizar o código do aplicativo.

Na **MyApplication**página, escolha **Configurar**. Atualize as configurações do aplicativo e selecione **Atualizar**.

##### Criar e executar a aplicação (AWS CLI)
<a name="earlier-gs-1_11-get-started-exercise-7-cli"></a>

Nesta seção, você usa o AWS CLI para criar e executar o aplicativo Managed Service for Apache Flink. Um Managed Service for Apache Flink usa o `kinesisanalyticsv2` AWS CLI comando para criar e interagir com o Managed Service for Apache Flink.

##### Criar uma política de permissões
<a name="earlier-gs-1_11-get-started-exercise-7-cli-policy"></a>

**nota**  
Você deve criar uma política de permissões e uma função para o seu aplicativo. Se você não criar esses recursos do IAM, seu aplicativo não poderá acessar seus fluxos de logs e dados.

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação `read` no fluxo de origem, e outra que concede permissões para ações `write` no fluxo de destino. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. Substitua `username` pelo nome de usuário usado para criar o bucket do Amazon S3 e armazenar o código do aplicativo. Substitua o ID da conta nos nomes de recursos da Amazon (ARNs) (`012345678901`) pelo ID da sua conta.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "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"
        }
    ]
}
```

------

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

**nota**  
Para acessar outros serviços da Amazon, você pode usar o AWS SDK para Java. O Managed Service for Apache Flink define automaticamente as credenciais exigidas pelo SDK como as credenciais do perfil do IAM associado a seu aplicativo. Não é necessária nenhuma etapa adicional.

##### Criar um perfil do IAM
<a name="earlier-gs-1_11-get-started-exercise-7-cli-role"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo sem permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink permissão para assumir o perfil, e a política de permissões determina o que o serviço pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função.

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Funções** e **Criar função**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **Serviço da AWS **. Em **Selecionar o serviço que usará esta função**, selecione **Kinesis**. Em **Selecionar seu caso de uso**, selecione **Kinesis Analytics**.

   Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**.

   Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, atualize as políticas de confiança e de permissões para a função.

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, anexe a política criada na etapa anterior, [Criar uma política de permissões](#earlier-gs-1_11-get-started-exercise-7-cli-policy).

   1. Na página **Resumo**, selecione a guia **Permissões**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior).

   1. Selecione a política **AKReadSourceStreamWriteSinkStream** e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usa para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Crie o aplicativo do Managed Service for Apache Flink
<a name="earlier-gs-1_11-get-started-exercise-7-cli-create"></a>

1. Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket (`username`) pelo sufixo selecionado na seção anterior. Substitua o ID da conta de exemplo (`012345678901`) na função de execução do serviço pelo ID da conta.

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_11",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) com a solicitação anterior para criar o aplicativo: 

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="earlier-gs-1_11-get-started-exercise-7-cli-start"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="earlier-gs-1_11-get-started-exercise-7-cli-stop"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
       "ApplicationName": "test"
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) com a seguinte solicitação para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="earlier-gs-1_11-get-started-exercise-7-cli-cw"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte[Configure o registro em log do aplicativo no Managed Service for Apache Flink](cloudwatch-logs.md).

##### Atualizar propriedades do ambiente
<a name="earlier-gs-1_11-get-started-exercise-7-cli-update-env"></a>

Nesta seção, você usa a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) para alterar as propriedades do ambiente do aplicativo sem recompilar o código do aplicativo. Neste exemplo, você altera a região dos fluxos de origem e destino.

**Para atualizar propriedades de ambiente para o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `update_properties_request.json`.

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) com a solicitação anterior para atualizar as propriedades do ambiente:

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### Atualizar o código do aplicativo
<a name="earlier-gs-1_11-get-started-exercise-7-cli-update-code"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI ação.

**nota**  
Para carregar uma nova versão do código do aplicativo com o mesmo nome de arquivo, você deve especificar a nova versão do objeto. Para obter mais informações sobre o uso de versões de objetos do Amazon S3, consulte Como [ativar ou desativar](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html) o controle de versão.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo nome de bucket e objeto do Amazon S3 e a nova versão do objeto. O aplicativo será reiniciado com o novo pacote de código.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (*<username>*) com o sufixo que você escolheu na [Criar dois fluxos de dados do Amazon Kinesis](#earlier-gs-1_11-get-started-exercise-1) seção.

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

#### Próxima etapa
<a name="earlier-gs-1_11-get-started-exercise-next-step-4"></a>

[Etapa 4: limpar AWS os recursos](#earlier-gs-1_11-cleanup)

### Etapa 4: limpar AWS os recursos
<a name="earlier-gs-1_11-cleanup"></a>

Esta seção inclui procedimentos para limpar AWS recursos criados no tutorial de introdução.

**Topics**
+ [Exclua o seu aplicativo Managed Service for Apache Flink](#earlier-gs-1_11-cleanup-app)
+ [Exclua seus fluxos de dados do Kinesis](#earlier-gs-1_11-cleanup-stream)
+ [Excluir objeto e bucket do Amazon S3](#earlier-gs-1_11-cleanup-s3)
+ [Exclua seus recursos do IAM](#earlier-gs-1_11-cleanup-iam)
+ [Exclua seus CloudWatch recursos](#earlier-gs-1_11-cleanup-cw)
+ [Próxima etapa](#earlier-gs-1_11-cleanup-next-step-5)

#### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_11-cleanup-app"></a>

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

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="earlier-gs-1_11-cleanup-stream"></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 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="earlier-gs-1_11-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="earlier-gs-1_11-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="earlier-gs-1_11-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óxima etapa
<a name="earlier-gs-1_11-cleanup-next-step-5"></a>

[Etapa 5: Próximas etapas](#earlier-gs-1_11-next-steps)

### Etapa 5: Próximas etapas
<a name="earlier-gs-1_11-next-steps"></a>

Agora que você criou e executou um aplicativo básico do Managed Service for Apache Flink, consulte os seguintes recursos para obter soluções mais avançadas de Managed Service for Apache Flink.
+ **[A solução AWS de streaming de dados para o Amazon Kinesis](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-kinesis/):** A solução de dados de AWS streaming para o Amazon Kinesis configura automaticamente AWS os serviços necessários para capturar, armazenar, processar e entregar dados de streaming com facilidade. A solução oferece várias opções para resolver casos de uso de dados de transmissão. A opção Managed Service for Apache Flink fornece um exemplo de ETL de end-to-end streaming que demonstra um aplicativo do mundo real que executa operações analíticas em dados simulados de táxi de Nova York. A solução configura todos os AWS recursos necessários, como funções e políticas do IAM, um CloudWatch painel e CloudWatch alarmes.
+ **[AWS Solução de streaming de dados para Amazon MSK](https://aws.amazon.com/solutions/implementations/aws-streaming-data-solution-for-amazon-msk/):** A solução AWS de dados de streaming para Amazon MSK fornece AWS CloudFormation modelos em que os dados fluem por produtores, armazenamento de streaming, consumidores e destinos. 
+ ** [ Clickstream Lab com Apache Flink e Apache Kafka](https://amazonmsk-labs.workshop.aws/en/mskkdaflinklab.html)**: um laboratório completo para casos de uso de clickstream usando Amazon Managed Streaming for Apache Kafka para armazenamento de transmissão e aplicativos Managed Service for Apache Flink for Apache Flink para processamento de fluxos.
+ **[Workshop do Amazon Managed Service para Apache Flink](https://catalog.workshops.aws/managed-flink):** Neste workshop, você cria uma arquitetura de end-to-end streaming para ingerir, analisar e visualizar dados de streaming quase em tempo real. Você decidiu melhorar as operações de uma empresa de táxi na cidade de Nova York. Você analisa os dados de telemetria de uma frota de táxis na cidade de Nova York quase em tempo real para otimizar as operações da frota.
+ **[Conheça o Flink: treinamento prático](https://ci.apache.org/projects/flink/flink-docs-master/learn-flink/):** Treinamento introdutório oficial do Apache Flink que ajuda você a começar a escrever ETL de transmissão escalável, analytics e aplicativos orientados a eventos.
**nota**  
Esteja ciente de que o Managed Service for Apache Flink não é compatível com a versão Apache Flink (1.12) usada neste treinamento. Você pode usar o Flink 1.15.2 no Flink Managed Service para Apache Flink.
+ **[Exemplos de código do Apache Flink](https://github.com/apache/flink/tree/master/flink-examples/flink-examples-streaming/src/main/java/org/apache/flink/streaming/examples):** um GitHub repositório de uma grande variedade de exemplos de aplicativos do Apache Flink. 

## Introdução: Flink 1.8.2 - obsolescência
<a name="earlier-gs-1_8"></a>

**nota**  
As versões **1.6, 1.8 e 1.11** do Apache Flink não são suportadas pela comunidade do Apache Flink há mais de três anos. Planejamos descontinuar essas versões no Amazon Managed Service for Apache Flink em **5 de novembro de 2024**. A partir dessa data, você não poderá mais criar novos aplicativos para essas versões do Flink. No momento, ainda é possível continuar executando os aplicativos existentes. Você pode atualizar seus aplicativos de forma estável usando o recurso de atualizações de versão in-place no Amazon Managed Service for Apache Flink. Para obter mais informações, consulte [Use atualizações de versão in-place para o Apache Flink](how-in-place-version-upgrades.md).

Este tópico contém uma versão do Tutorial [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md) que usa o Apache Flink 1.8.2.

**Topics**
+ [Componentes do aplicativo do Managed Service for Apache Flink](#getting-started-components)
+ [Pré-requisitos para concluir os exercícios](#su-1_8-prerequisites)
+ [Etapa 1: configurar uma AWS conta e criar um usuário administrador](#earlier-gs-1_8-setting-up)
+ [Etapa 2: configurar o AWS Command Line Interface (AWS CLI)](#su-1_8-awscli)
+ [Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#earlier-gs-1_8-exercise)
+ [Etapa 4: limpar AWS os recursos](#earlier-gs-1_8-cleanup)

### Componentes do aplicativo do Managed Service for Apache Flink
<a name="getting-started-components"></a>

Para processar dados, seu aplicativo Managed Service for Apache Flink usa um aplicativo Java/Apache Maven ou Scala que processa a entrada e produz a saída usando o tempo de execução do Apache Flink. 

O Managed Service for Apache Flink tem os seguintes componentes:
+ **Propriedades de runtime:** você pode usar as *propriedades de runtime* para configurar seu aplicativo sem recompilar o código do aplicativo. 
+ **Fonte:** o aplicativo consome dados usando uma *fonte*. Um conector de origem lê dados de um fluxo de dados do Kinesis, de um bucket do Amazon S3 etc. Para obter mais informações, consulte [Adicione fontes de dados de transmissão](how-sources.md).
+ **Operadores:** o aplicativo processa dados usando um ou mais *operadores*. Um operador pode transformar, enriquecer ou agregar dados. Para obter mais informações, consulte [Operadores](how-operators.md).
+ **Coletor: o aplicativo produz dados para fontes externas usando coletores***.* Um conector do coletor grava dados em um fluxo de dados do Kinesis, um fluxo do Firehose, um bucket do Amazon S3 etc. Para obter mais informações, consulte [Grave dados usando coletores ](how-sinks.md).

Depois de criar, compilar e empacotar o código da aplicativo, é necessário fazer o upload do pacote do código em um bucket do Amazon Simple Storage Service (Amazon S3). Em seguida, crie um aplicativo do Managed Service for Apache Flink. Você passa na localização do pacote de código, um fluxo de dados do Kinesis como fonte de dados de fluxo e, normalmente, um local de fluxo ou arquivo que recebe os dados processados do aplicativo.

### Pré-requisitos para concluir os exercícios
<a name="su-1_8-prerequisites"></a>

Para concluir as etapas neste guia, é necessário ter o seguinte:
+ [Java Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (JDK) versão 8. Defina a variável do ambiente`JAVA_HOME` para apontar para o local de instalação do JDK.
+ Para usar o conector Apache Flink Kinesis neste tutorial, você deve baixar e instalar o Apache Flink. Para obter detalhes, consulte [Uso do conector Kinesis Streams para o Apache Flink com versões anteriores do Apache Flink](#how-creating-apps-building-kinesis).
+ Recomenda-se o uso de um ambiente de desenvolvimento (como [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) ou [IntelliJ Idea](https://www.jetbrains.com/idea/)) para desenvolver e compilar seu aplicativo.
+ [Cliente do Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). Instale o cliente do Git, se isso ainda não foi feito.
+ [Apache Maven Compiler Plugin](https://maven.apache.org/plugins/maven-compiler-plugin/). Maven deve estar em seu caminho de trabalho. Para testar a instalação do Apache Maven, insira o seguinte:

  ```
  $ mvn -version
  ```

Para começar a usar, acesse [Etapa 1: configurar uma AWS conta e criar um usuário administrador](#earlier-gs-1_8-setting-up).

### Etapa 1: configurar uma AWS conta e criar um usuário administrador
<a name="earlier-gs-1_8-setting-up"></a>

#### Inscreva-se para um Conta da AWS
<a name="sign-up-for-aws"></a>

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

**Para se inscrever em um Conta da AWS**

1. Abra a [https://portal.aws.amazon.com/billing/inscrição.](https://portal.aws.amazon.com/billing/signup)

1. Siga as instruções online.

   Parte do procedimento de inscrição envolve receber uma chamada telefônica ou uma mensagem de texto e inserir um código de verificação pelo teclado do telefone.

   Quando você se inscreve em um Conta da AWS, um *Usuário raiz da conta da AWS*é criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar [tarefas que exigem acesso de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando [https://aws.amazon.com/e](https://aws.amazon.com/) escolhendo **Minha conta**.

#### Criar um usuário com acesso administrativo
<a name="create-an-admin"></a>

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS Centro de Identidade do AWS IAM, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

**Proteja seu Usuário raiz da conta da AWS**

1.  Faça login [Console de gerenciamento da AWS](https://console.aws.amazon.com/)como proprietário da conta escolhendo **Usuário raiz** e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

   Para obter ajuda ao fazer login usando o usuário-raiz, consulte [Fazer login como usuário-raiz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) no *Guia do usuário do Início de Sessão da AWS *.

1. Habilite a autenticação multifator (MFA) para o usuário-raiz.

   Para obter instruções, consulte [Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) do *usuário do IAM*.

**Criar um usuário com acesso administrativo**

1. Habilita o Centro de Identidade do IAM.

   Para obter instruções, consulte [Habilitar o Centro de Identidade do AWS IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

   Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte [Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) no *Guia Centro de Identidade do AWS IAM do usuário*.

**Iniciar sessão como o usuário com acesso administrativo**
+ Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

  Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como [fazer login no portal de AWS acesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) no *Guia Início de Sessão da AWS do usuário*.

**Atribuir acesso a usuários adicionais**

1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

   Para obter instruções, consulte [Criar um conjunto de permissões](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. Atribua usuários a um grupo e, em seguida, atribua o acesso de logon único ao grupo.

   Para obter instruções, consulte [Adicionar grupos](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

#### Conceder acesso programático
<a name="setting-up-access-gs-8"></a>

Os usuários precisam de acesso programático se quiserem interagir com pessoas AWS fora do Console de gerenciamento da AWS. A forma de conceder acesso programático depende do tipo de usuário que está acessando AWS.

Para conceder acesso programático aos usuários, selecione uma das seguintes opções:


****  

| Qual usuário precisa de acesso programático? | Para | Por | 
| --- | --- | --- | 
| IAM | (Recomendado) Use as credenciais do console como credenciais temporárias para assinar solicitações programáticas para o AWS CLI, AWS SDKs ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
|  Identidade da força de trabalho (Usuários gerenciados no Centro de Identidade do IAM)  | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
| IAM | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs | Siga as instruções em [Como usar credenciais temporárias com AWS recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) no Guia do usuário do IAM. | 
| IAM | (Não recomendado)Use credenciais de longo prazo para assinar solicitações programáticas para o AWS CLI, AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 

### Etapa 2: configurar o AWS Command Line Interface (AWS CLI)
<a name="su-1_8-awscli"></a>

Nesta etapa, você baixa e configura o AWS CLI para usar com o Managed Service para Apache Flink.

**nota**  
Os exercícios de conceitos básicos neste guia pressupõem o uso de credenciais de administrador (`adminuser`) em sua conta para executar as operações.

**nota**  
Se você já tem o AWS CLI instalado, talvez seja necessário fazer o upgrade para obter a funcionalidade mais recente. Para obter mais informações, consulte [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) no *Guia do usuário da AWS Command Line Interface *. Para verificar a versão do AWS CLI, execute o seguinte comando:  

```
aws --version
```
Os exercícios deste tutorial exigem a seguinte AWS CLI versão ou posterior:  

```
aws-cli/1.16.63
```

**Para configurar o AWS CLI**

1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no *Guia do usuário do AWS Command Line Interface *: 
   + [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [Configurando a AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. Adicione um perfil nomeado para o usuário administrador no AWS CLI `config` arquivo. É possível usar esse perfil ao executar os comandos da AWS CLI . Para obter mais informações sobre perfis nomeados, consulte [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html) no *Guia do usuário da AWS Command Line Interface *.

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   Para obter uma lista das regiões disponíveis, consulte [Regiões e endpoints do ](https://docs.aws.amazon.com/general/latest/gr/rande.html) na *Referência geral da Amazon Web Services*.
**nota**  
O código e os comandos de exemplo neste tutorial usam a região Oeste dos EUA (Oregon). Para usar uma AWS região diferente, altere a região no código e nos comandos deste tutorial para a região que você deseja usar.

1. Verifique a configuração digitando o seguinte comando no prompt de comando: 

   ```
   aws help
   ```

Depois de configurar uma AWS conta e a AWS CLI, você pode tentar o próximo exercício, no qual você configura um aplicativo de amostra e testa a end-to-end configuração.

#### Próxima etapa
<a name="su-1_8-awscli-next-step-3"></a>

[Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#earlier-gs-1_8-exercise)

### Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_8-exercise"></a>

Neste exercício, será criado um aplicativo Managed Service for Apache Flink com fluxos de dados como origem e coletor.

**Topics**
+ [Criar dois fluxos de dados do Amazon Kinesis](#earlier-gs-1_8-exercise-1)
+ [Gravação de registros de amostra no fluxo de entrada](#earlier-gs-1_8-exercise-2)
+ [Baixar e examinar o código Java de fluxo do Apache Flink](#earlier-gs-1_8-exercise-5)
+ [Compilar o código da aplicação](#earlier-gs-1_8-exercise-5.5)
+ [Upload do código Java de fluxo do Apache Flink](#earlier-gs-1_8-exercise-6)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#earlier-gs-1_8-exercise-7)
+ [Próxima etapa](#earlier-gs-1_8-exercise-next-step-4)

#### Criar dois fluxos de dados do Amazon Kinesis
<a name="earlier-gs-1_8-exercise-1"></a>

Antes de criar um aplicativo do Managed Service for Apache Flink para este exercício, crie dois fluxos de dados do Kinesis (`ExampleInputStream` e `ExampleOutputStream`). O aplicativo usa esses fluxos para os fluxos de origem e de destino do aplicativo.

É possível criar esses fluxos usando o console do Amazon Kinesis ou o comando da AWS CLI a seguir. Para obter instruções sobre o console, consulte [Criar e atualizar fluxos de dados](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*. 

**Como criar os fluxos de dados (AWS CLI)**

1. Para criar o primeiro stream (`ExampleInputStream`), use o seguinte comando do Amazon Kinesis `create-stream` AWS CLI .

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. Para criar o segundo fluxo que o aplicativo usa para gravar a saída, execute o mesmo comando, alterando o nome da transmissão para `ExampleOutputStream`.

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### Gravação de registros de amostra no fluxo de entrada
<a name="earlier-gs-1_8-exercise-2"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. Mais adiante neste tutorial, será executado o script `stock.py` para enviar dados para o aplicativo. 

   ```
   $ python stock.py
   ```

#### Baixar e examinar o código Java de fluxo do Apache Flink
<a name="earlier-gs-1_8-exercise-5"></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. Duplique o repositório remoto usando 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/GettingStarted_1_8`.

Observe o seguinte sobre o código do aplicativo:
+ Um arquivo [Project Object Model (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) contém informações sobre a configuração e as dependências da aplicação, incluindo as bibliotecas do Managed Service for Apache Flink.
+ O arquivo `BasicStreamingJob.java` contém o método `main` que define a funcionalidade do aplicativo.
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ Seu aplicativo cria conectores de origem e de destino para acessar recursos externos usando um objeto `StreamExecutionEnvironment`. 
+ O aplicativo cria conectores de origem e de destino usando propriedades estáticas. Para usar as propriedades dinâmicas do aplicativo, use os métodos `createSourceFromApplicationProperties` e `createSinkFromApplicationProperties` para criar os conectores. Esses métodos leem as propriedades do aplicativo para configurar os conectores.

  Para obter mais informações sobre as propriedades do runtime, consulte [Use as propriedades de runtime](how-properties.md).

#### Compilar o código da aplicação
<a name="earlier-gs-1_8-exercise-5.5"></a>

Nesta seção, será usado o compilador do Apache Maven para criar o código Java para o aplicativo. Para obter informações sobre como instalar o Apache Maven e o Java Development Kit (JDK), consulte [Pré-requisitos para concluir os exercícios](#su-1_8-prerequisites).

**nota**  
**Para usar o conector Kinesis com versões do Apache Flink anteriores à 1.11, você precisa baixar, compilar e instalar o Apache Maven. Para obter mais informações, consulte [Uso do conector Kinesis Streams para o Apache Flink com versões anteriores do Apache Flink](#how-creating-apps-building-kinesis).**

**Para compilar o código do aplicativo**

1. Para usar o seu código de aplicativo, compile-o e empacote-o em um arquivo JAR. Há duas formas de compilar e empacotar o código:
   + Use a ferramenta de linha de comando do Maven. Crie seu arquivo JAR executando o seguinte comando no diretório que contém o arquivo `pom.xml`:

     ```
     mvn package -Dflink.version=1.8.2
     ```
   + Use o ambiente de desenvolvimento. Consulte a documentação de seu ambiente de desenvolvimento para obter mais detalhes.
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 1.8. Certifique-se de que a versão Java do seu projeto seja 1.8.

   É possível carregar o pacote como um arquivo JAR, ou pode compactar o pacote e carregá-lo como um arquivo ZIP. Se você criar seu aplicativo usando o AWS CLI, especifique o tipo de conteúdo do código (JAR ou ZIP).

1. Se houver erros durante a compilação, verifique se sua variável de ambiente `JAVA_HOME` está definida corretamente.

Se o aplicativo for compilado com êxito, o arquivo a seguir é criado:

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### Upload do código Java de fluxo do Apache Flink
<a name="earlier-gs-1_8-exercise-6"></a>

Nesta seção, será criado um bucket do Amazon Simple Storage Service (Amazon S3) e realizado o upload do código do aplicativo.

**Para fazer upload do código do aplicativo**

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

1. Selecione **Criar bucket**.

1. Insira **ka-app-code-*<username>*** no campo **Nome do bucket**. Adicione um sufixo para o nome do bucket, como o nome do usuário, para torná-lo globalmente exclusivo. Selecione **Next** (Próximo).

1. Na etapa **Configurar opções**, mantenha as configurações como estão e selecione **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão e selecione **Próximo**.

1. Selecione **Criar bucket**.

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 `aws-kinesis-analytics-java-apps-1.0.jar`, criado na etapa anterior. Selecione **Next** (Próximo).

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="earlier-gs-1_8-exercise-7"></a>

É possível criar e executar um aplicativo Managed Service for Apache Flink usando o console ou a AWS CLI.

**nota**  
Quando você cria o aplicativo usando o console, seus recursos AWS Identity and Access Management (IAM) e do Amazon CloudWatch Logs são criados para você. Ao criar o aplicativo usando o AWS CLI, você cria esses recursos separadamente.

**Topics**
+ [Crie e execute o aplicativo (console)](#earlier-gs-1_8-exercise-7-console)
+ [Criar e executar a aplicação (AWS CLI)](#earlier-gs-1_8-exercise-7-cli)

##### Crie e execute o aplicativo (console)
<a name="earlier-gs-1_8-exercise-7-console"></a>

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

##### Criar a aplicação
<a name="earlier-gs-1_8-exercise-7-console-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 **Descrição**, insira **My java test app**.
   + Em **Runtime**, selecione **Apache Flink**.
   + Deixe o menu suspenso da versão como **Apache Flink 1.8 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Editar a política do IAM
<a name="earlier-gs-1_8-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",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "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="earlier-gs-1_8-exercise-7-console-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 **aws-kinesis-analytics-java-apps-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 as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.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 na Amazon, 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`

##### Execute o aplicativo
<a name="earlier-gs-1_8-exercise-7-console-run"></a>

1. Na **MyApplication**página, escolha **Executar**. Confirme a ação.

1. Quando o aplicativo estiver em execução, atualize a página. O console mostra o **Gráfico do aplicativo**.

##### Interromper a aplicação
<a name="earlier-gs-1_8-exercise-7-console-stop"></a>

Na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Atualizar o aplicativo
<a name="earlier-gs-1_8-exercise-7-console-update"></a>

Usando o console, é possível atualizar configurações do aplicativo, como as propriedades do aplicativo, as configurações de monitoramento e a localização ou o nome do arquivo JAR do aplicativo. Também é possível recarregar o JAR do aplicativo do bucket do Amazon S3 se for necessário atualizar o código do aplicativo.

Na **MyApplication**página, escolha **Configurar**. Atualize as configurações do aplicativo e selecione **Atualizar**.

##### Criar e executar a aplicação (AWS CLI)
<a name="earlier-gs-1_8-exercise-7-cli"></a>

Nesta seção, você usa o AWS CLI para criar e executar o aplicativo Managed Service for Apache Flink. O Managed Service for Apache Flink usa o `kinesisanalyticsv2` AWS CLI comando para criar e interagir com o Managed Service for Apache Flink aplicativos.

##### Criar uma política de permissões
<a name="earlier-gs-1_8-exercise-7-cli-policy"></a>

**nota**  
Você deve criar uma política de permissões e uma função para o seu aplicativo. Se você não criar esses recursos do IAM, seu aplicativo não poderá acessar seus fluxos de logs e dados.

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação `read` no fluxo de origem, e outra que concede permissões para ações `write` no fluxo de destino. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. Substitua `username` pelo nome de usuário usado para criar o bucket do Amazon S3 e armazenar o código do aplicativo. Substitua o ID da conta nos nomes de recursos da Amazon (ARNs) (`012345678901`) pelo ID da sua conta.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "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"
        }
    ]
}
```

------

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

**nota**  
Para acessar outros serviços da Amazon, você pode usar o AWS SDK para Java. O Managed Service for Apache Flink define automaticamente as credenciais exigidas pelo SDK como as credenciais do perfil do IAM associado a seu aplicativo. Não é necessária nenhuma etapa adicional.

##### Criar um perfil do IAM
<a name="earlier-gs-1_8-exercise-7-cli-role"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo sem permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink permissão para assumir o perfil, e a política de permissões determina o que o serviço pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função.

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Funções** e **Criar função**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **Serviço da AWS **. Em **Selecionar o serviço que usará esta função**, selecione **Kinesis**. Em **Selecionar seu caso de uso**, selecione **Kinesis Analytics**.

   Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**.

   Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, atualize as políticas de confiança e de permissões para a função.

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, anexe a política criada na etapa anterior, [Criar uma política de permissões](#earlier-gs-1_8-exercise-7-cli-policy).

   1. Na página **Resumo**, selecione a guia **Permissões**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior).

   1. Selecione a política **AKReadSourceStreamWriteSinkStream** e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usa para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Crie o aplicativo do Managed Service for Apache Flink
<a name="earlier-gs-1_8-exercise-7-cli-create"></a>

1. Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket (`username`) pelo sufixo selecionado na seção anterior. Substitua o ID da conta de exemplo (`012345678901`) na função de execução do serviço pelo ID da conta.

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_8",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "aws-kinesis-analytics-java-apps-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) com a solicitação anterior para criar o aplicativo: 

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="earlier-gs-1_8-exercise-7-cli-start"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="earlier-gs-1_8-exercise-7-cli-stop"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
      "ApplicationName": "test"
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) com a seguinte solicitação para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="earlier-gs-1_8-exercise-7-cli-cw"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte[Configure o registro em log do aplicativo no Managed Service for Apache Flink](cloudwatch-logs.md).

##### Atualizar propriedades do ambiente
<a name="earlier-gs-1_8-exercise-7-cli-update-env"></a>

Nesta seção, você usa a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) para alterar as propriedades do ambiente do aplicativo sem recompilar o código do aplicativo. Neste exemplo, você altera a região dos fluxos de origem e destino.

**Para atualizar propriedades de ambiente para o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `update_properties_request.json`.

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) com a solicitação anterior para atualizar as propriedades do ambiente:

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### Atualizar o código do aplicativo
<a name="earlier-gs-1_8-exercise-7-cli-update-code"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI ação.

**nota**  
Para carregar uma nova versão do código do aplicativo com o mesmo nome de arquivo, você deve especificar a nova versão do objeto. Para obter mais informações sobre o uso de versões de objetos do Amazon S3, consulte Como [ativar ou desativar](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html) o controle de versão.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo nome de bucket e objeto do Amazon S3 e a nova versão do objeto. O aplicativo será reiniciado com o novo pacote de código.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (*<username>*) com o sufixo que você escolheu na [Criar dois fluxos de dados do Amazon Kinesis](#earlier-gs-1_8-exercise-1) seção.

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "aws-kinesis-analytics-java-apps-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

#### Próxima etapa
<a name="earlier-gs-1_8-exercise-next-step-4"></a>

[Etapa 4: limpar AWS os recursos](#earlier-gs-1_8-cleanup)

### Etapa 4: limpar AWS os recursos
<a name="earlier-gs-1_8-cleanup"></a>

Esta seção inclui procedimentos para limpar AWS recursos criados no tutorial de introdução.

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

#### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_8-cleanup-app"></a>

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

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

1. Selecione **Configurar**.

1. Na seção **Snapshots**, selecione **Desativar** e, em seguida, selecione **Atualizar**.

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

#### Exclua seus fluxos de dados do Kinesis
<a name="earlier-gs-1_8-cleanup-stream"></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 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="earlier-gs-1_8-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="earlier-gs-1_8-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="earlier-gs-1_8-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.

## Introdução: Flink 1.6.2 - obsolescência
<a name="earlier-gs-1_6"></a>

**nota**  
As versões **1.6, 1.8 e 1.11** do Apache Flink não são suportadas pela comunidade do Apache Flink há mais de três anos. Planejamos descontinuar essas versões no Amazon Managed Service for Apache Flink em **5 de novembro de 2024**. A partir dessa data, você não poderá mais criar novos aplicativos para essas versões do Flink. No momento, ainda é possível continuar executando os aplicativos existentes. Você pode atualizar seus aplicativos de forma estável usando o recurso de atualizações de versão in-place no Amazon Managed Service for Apache Flink. Para obter mais informações, consulte [Use atualizações de versão in-place para o Apache Flink](how-in-place-version-upgrades.md).

Este tópico contém uma versão do Tutorial [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md) que usa o Apache Flink 1.6.2.

**Topics**
+ [Componentes de um aplicativo Managed Service for Apache Flink](#earlier-gs-1_6-components)
+ [Pré-requisitos para concluir os exercícios](#su-1_6-prerequisites)
+ [Etapa 1: configurar uma AWS conta e criar um usuário administrador](#earlier-gs-1_6-setting-up)
+ [Etapa 2: configurar o AWS Command Line Interface (AWS CLI)](#su-1_6-awscli)
+ [Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#earlier-gs-1_6-exercise)
+ [Etapa 4: limpar AWS os recursos](#earlier-gs-1_6-cleanup)

### Componentes de um aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_6-components"></a>

Para processar dados, seu aplicativo Managed Service for Apache Flink usa um aplicativo Java/Apache Maven ou Scala que processa a entrada e produz a saída usando o tempo de execução do Apache Flink. 

um Managed Service for Apache Flink tem os seguintes componentes:
+ **Propriedades de runtime:** você pode usar as *propriedades de runtime* para configurar seu aplicativo sem recompilar o código do aplicativo. 
+ **Fonte:** o aplicativo consome dados usando uma *fonte*. Um conector de origem lê dados de um fluxo de dados do Kinesis, de um bucket do Amazon S3 etc. Para obter mais informações, consulte [Adicione fontes de dados de transmissão](how-sources.md).
+ **Operadores:** o aplicativo processa dados usando um ou mais *operadores*. Um operador pode transformar, enriquecer ou agregar dados. Para obter mais informações, consulte [Operadores](how-operators.md).
+ **Coletor: o aplicativo produz dados para fontes externas usando coletores***.* Um conector do coletor grava dados em um fluxo de dados do Kinesis, um fluxo do Firehose, um bucket do Amazon S3 etc. Para obter mais informações, consulte [Grave dados usando coletores ](how-sinks.md).

Depois de criar, compilar e empacotar o seu aplicativo, é necessário fazer o upload do pacote do código em um bucket do Amazon Simple Storage Service (Amazon S3). Em seguida, crie um aplicativo do Managed Service for Apache Flink. Você passa na localização do pacote de código, um fluxo de dados do Kinesis como fonte de dados de fluxo e, normalmente, um local de fluxo ou arquivo que recebe os dados processados do aplicativo.

### Pré-requisitos para concluir os exercícios
<a name="su-1_6-prerequisites"></a>

Para concluir as etapas neste guia, é necessário ter o seguinte:
+ [Java Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (JDK) versão 8. Defina a variável do ambiente`JAVA_HOME` para apontar para o local de instalação do JDK.
+ Recomenda-se o uso de um ambiente de desenvolvimento (como [Eclipse Java Neon](http://www.eclipse.org/downloads/packages/release/neon/3) ou [IntelliJ Idea](https://www.jetbrains.com/idea/)) para desenvolver e compilar seu aplicativo.
+ [Cliente do Git.](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) Instale o cliente do Git, se isso ainda não foi feito.
+ [Apache Maven Compiler Plugin](https://maven.apache.org/plugins/maven-compiler-plugin/). Maven deve estar em seu caminho de trabalho. Para testar a instalação do Apache Maven, insira o seguinte:

  ```
  $ mvn -version
  ```

Para começar a usar, acesse [Etapa 1: configurar uma AWS conta e criar um usuário administrador](#earlier-gs-1_6-setting-up).

### Etapa 1: configurar uma AWS conta e criar um usuário administrador
<a name="earlier-gs-1_6-setting-up"></a>

#### Inscreva-se para um Conta da AWS
<a name="sign-up-for-aws"></a>

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

**Para se inscrever em um Conta da AWS**

1. Abra a [https://portal.aws.amazon.com/billing/inscrição.](https://portal.aws.amazon.com/billing/signup)

1. Siga as instruções online.

   Parte do procedimento de inscrição envolve receber uma chamada telefônica ou uma mensagem de texto e inserir um código de verificação pelo teclado do telefone.

   Quando você se inscreve em um Conta da AWS, um *Usuário raiz da conta da AWS*é criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar [tarefas que exigem acesso de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando [https://aws.amazon.com/e](https://aws.amazon.com/) escolhendo **Minha conta**.

#### Criar um usuário com acesso administrativo
<a name="create-an-admin"></a>

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS Centro de Identidade do AWS IAM, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

**Proteja seu Usuário raiz da conta da AWS**

1.  Faça login [Console de gerenciamento da AWS](https://console.aws.amazon.com/)como proprietário da conta escolhendo **Usuário raiz** e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

   Para obter ajuda ao fazer login usando o usuário-raiz, consulte [Fazer login como usuário-raiz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) no *Guia do usuário do Início de Sessão da AWS *.

1. Habilite a autenticação multifator (MFA) para o usuário-raiz.

   Para obter instruções, consulte [Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) do *usuário do IAM*.

**Criar um usuário com acesso administrativo**

1. Habilita o Centro de Identidade do IAM.

   Para obter instruções, consulte [Habilitar o Centro de Identidade do AWS IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

   Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte [Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) no *Guia Centro de Identidade do AWS IAM do usuário*.

**Iniciar sessão como o usuário com acesso administrativo**
+ Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

  Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como [fazer login no portal de AWS acesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) no *Guia Início de Sessão da AWS do usuário*.

**Atribuir acesso a usuários adicionais**

1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

   Para obter instruções, consulte [Criar um conjunto de permissões](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. Atribua usuários a um grupo e, em seguida, atribua o acesso de logon único ao grupo.

   Para obter instruções, consulte [Adicionar grupos](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

#### Conceder acesso programático
<a name="setting-up-access-gs-6"></a>

Os usuários precisam de acesso programático se quiserem interagir com pessoas AWS fora do Console de gerenciamento da AWS. A forma de conceder acesso programático depende do tipo de usuário que está acessando AWS.

Para conceder acesso programático aos usuários, selecione uma das seguintes opções:


****  

| Qual usuário precisa de acesso programático? | Para | Por | 
| --- | --- | --- | 
| IAM | (Recomendado) Use as credenciais do console como credenciais temporárias para assinar solicitações programáticas para o AWS CLI, AWS SDKs ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
|  Identidade da força de trabalho (Usuários gerenciados no Centro de Identidade do IAM)  | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 
| IAM | Use credenciais temporárias para assinar solicitações programáticas para o AWS CLI AWS SDKs, ou. AWS APIs | Siga as instruções em [Como usar credenciais temporárias com AWS recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) no Guia do usuário do IAM. | 
| IAM | (Não recomendado)Use credenciais de longo prazo para assinar solicitações programáticas para o AWS CLI, AWS SDKs, ou. AWS APIs |  Siga as instruções da interface que deseja utilizar. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)  | 

### Etapa 2: configurar o AWS Command Line Interface (AWS CLI)
<a name="su-1_6-awscli"></a>

Nesta etapa, você baixa e configura o AWS CLI para usar com um serviço gerenciado para o Apache Flink.

**nota**  
Os exercícios de conceitos básicos neste guia pressupõem o uso de credenciais de administrador (`adminuser`) em sua conta para executar as operações.

**nota**  
Se você já tem o AWS CLI instalado, talvez seja necessário fazer o upgrade para obter a funcionalidade mais recente. Para obter mais informações, consulte [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) no *Guia do usuário da AWS Command Line Interface *. Para verificar a versão do AWS CLI, execute o seguinte comando:  

```
aws --version
```
Os exercícios deste tutorial exigem a seguinte AWS CLI versão ou posterior:  

```
aws-cli/1.16.63
```

**Para configurar o AWS CLI**

1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no *Guia do usuário do AWS Command Line Interface *: 
   + [Instalar a AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)
   + [Configurando a AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. Adicione um perfil nomeado para o usuário administrador no AWS CLI `config` arquivo. É possível usar esse perfil ao executar os comandos da AWS CLI . Para obter mais informações sobre perfis nomeados, consulte [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html) no *Guia do usuário da AWS Command Line Interface *.

   ```
   [profile adminuser]
   aws_access_key_id = adminuser access key ID
   aws_secret_access_key = adminuser secret access key
   region = aws-region
   ```

   Para obter uma lista das AWS regiões disponíveis, consulte [Regiões e endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html) no *Referência geral da Amazon Web Services*.
**nota**  
O código e os comandos de exemplo neste tutorial usam a região Oeste dos EUA (Oregon). Para usar uma região diferente, altere a região no código e nos comandos deste tutorial para a região que você deseja usar.

1. Verifique a configuração digitando o seguinte comando no prompt de comando: 

   ```
   aws help
   ```

Depois de configurar uma AWS conta e a AWS CLI, você pode tentar o próximo exercício, no qual você configura um aplicativo de amostra e testa a end-to-end configuração.

#### Próxima etapa
<a name="su-1_6-next-step-3"></a>

[Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink](#earlier-gs-1_6-exercise)

### Etapa 3: criar e executar um aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_6-exercise"></a>

Neste exercício, será criado um aplicativo Managed Service for Apache Flink com fluxos de dados como origem e coletor.

**Topics**
+ [Criar dois fluxos de dados do Amazon Kinesis](#earlier-gs-1_6-exercise-1)
+ [Gravação de registros de amostra no fluxo de entrada](#earlier-gs-1_6-exercise-2)
+ [Baixar e examinar o código Java de fluxo do Apache Flink](#earlier-gs-1_6-exercise-5)
+ [Compilar o código da aplicação](#earlier-gs-1_6-exercise-5.5)
+ [Upload do código Java de fluxo do Apache Flink](#earlier-gs-1_6-exercise-6)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#earlier-gs-1_6-exercise-7)

#### Criar dois fluxos de dados do Amazon Kinesis
<a name="earlier-gs-1_6-exercise-1"></a>

Antes de criar um aplicativo do Managed Service for Apache Flink para este exercício, crie dois fluxos de dados do Kinesis (`ExampleInputStream` e `ExampleOutputStream`). O aplicativo usa esses fluxos para os fluxos de origem e de destino do aplicativo.

É possível criar esses fluxos usando o console do Amazon Kinesis ou o comando da AWS CLI a seguir. Para obter instruções sobre o console, consulte [Criar e atualizar fluxos de dados](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*. 

**Como criar os fluxos de dados (AWS CLI)**

1. Para criar o primeiro stream (`ExampleInputStream`), use o seguinte comando do Amazon Kinesis `create-stream` AWS CLI .

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleInputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

1. Para criar o segundo fluxo que o aplicativo usa para gravar a saída, execute o mesmo comando, alterando o nome da transmissão para `ExampleOutputStream`.

   ```
   $ aws kinesis create-stream \
   --stream-name ExampleOutputStream \
   --shard-count 1 \
   --region us-west-2 \
   --profile adminuser
   ```

#### Gravação de registros de amostra no fluxo de entrada
<a name="earlier-gs-1_6-exercise-2"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. Mais adiante neste tutorial, será executado o script `stock.py` para enviar dados para o aplicativo. 

   ```
   $ python stock.py
   ```

#### Baixar e examinar o código Java de fluxo do Apache Flink
<a name="earlier-gs-1_6-exercise-5"></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. Duplique o repositório remoto usando 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/GettingStarted_1_6`.

Observe o seguinte sobre o código do aplicativo:
+ Um arquivo [Project Object Model (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) contém informações sobre a configuração e as dependências do aplicativo, incluindo as bibliotecas do Managed Service for Apache Flink.
+ O arquivo `BasicStreamingJob.java` contém o método `main` que define a funcionalidade do aplicativo.
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ Seu aplicativo cria conectores de origem e de destino para acessar recursos externos usando um objeto `StreamExecutionEnvironment`. 
+ O aplicativo cria conectores de origem e de destino usando propriedades estáticas. Para usar as propriedades dinâmicas do aplicativo, use os métodos `createSourceFromApplicationProperties` e `createSinkFromApplicationProperties` para criar os conectores. Esses métodos leem as propriedades do aplicativo para configurar os conectores.

  Para obter mais informações sobre as propriedades do runtime, consulte [Use as propriedades de runtime](how-properties.md).

#### Compilar o código da aplicação
<a name="earlier-gs-1_6-exercise-5.5"></a>

Nesta seção, será usado o compilador do Apache Maven para criar o código Java para o aplicativo. Para obter informações sobre como instalar o Apache Maven e o Java Development Kit (JDK), consulte [Pré-requisitos para concluir os exercícios](#su-1_6-prerequisites).

**nota**  
**Para usar o conector do Kinesis com versões do Apache Flink anteriores a 1.11, você precisa baixar o código-fonte do conector e compilá-lo conforme descrito na [documentação do Apache Flink](https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/connectors/kinesis.html)**.

**Para compilar o código do aplicativo**

1. Para usar o seu código de aplicativo, compile-o e empacote-o em um arquivo JAR. Há duas formas de compilar e empacotar o código:
   + Use a ferramenta de linha de comando do Maven. Crie seu arquivo JAR executando o seguinte comando no diretório que contém o arquivo `pom.xml`:

     ```
     mvn package
     ```
**nota**  
O parâmetro -Dflink.version não é necessário para o runtime do Managed Service for Apache Flink versão 1.0.1; ele só é necessário para a versão 1.1.0 e posterior. Para obter mais informações, consulte [Especifique a versão do Apache Flink do seu aplicativo](how-creating-apps.md#how-creating-apps-building-flink).
   + Use o ambiente de desenvolvimento. Consulte a documentação de seu ambiente de desenvolvimento para obter mais detalhes.

   É possível carregar o pacote como um arquivo JAR, ou pode compactar o pacote e carregá-lo como um arquivo ZIP. Se você criar seu aplicativo usando o AWS CLI, especifique o tipo de conteúdo do código (JAR ou ZIP).

1. Se houver erros durante a compilação, verifique se sua variável de ambiente `JAVA_HOME` está definida corretamente.

Se o aplicativo for compilado com êxito, o arquivo a seguir é criado:

`target/aws-kinesis-analytics-java-apps-1.0.jar`

#### Upload do código Java de fluxo do Apache Flink
<a name="earlier-gs-1_6-exercise-6"></a>

Nesta seção, será criado um bucket do Amazon Simple Storage Service (Amazon S3) e realizado o upload do código do aplicativo.

**Para fazer upload do código do aplicativo**

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

1. Selecione **Criar bucket**.

1. Insira **ka-app-code-*<username>*** no campo **Nome do bucket**. Adicione um sufixo para o nome do bucket, como o nome do usuário, para torná-lo globalmente exclusivo. Selecione **Next** (Próximo).

1. Na etapa **Configurar opções**, mantenha as configurações como estão e selecione **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão e selecione **Próximo**.

1. Selecione **Criar bucket**.

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 `aws-kinesis-analytics-java-apps-1.0.jar`, criado na etapa anterior. Escolha **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão. Escolha **Próximo**.

1. Na etapa **Definir propriedades**, mantenha as configurações como estão. Escolha **Carregar**.

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="earlier-gs-1_6-exercise-7"></a>

É possível criar e executar um aplicativo Managed Service for Apache Flink usando o console ou a AWS CLI.

**nota**  
Quando você cria o aplicativo usando o console, seus recursos AWS Identity and Access Management (IAM) e do Amazon CloudWatch Logs são criados para você. Ao criar o aplicativo usando o AWS CLI, você cria esses recursos separadamente.

**Topics**
+ [Crie e execute o aplicativo (console)](#earlier-gs-1_6-exercise-7-console)
+ [Criar e executar a aplicação (AWS CLI)](#earlier-gs-1_6-exercise-7-cli)

##### Crie e execute o aplicativo (console)
<a name="earlier-gs-1_6-exercise-7-console"></a>

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

##### Criar a aplicação
<a name="earlier-gs-1_6-exercise-7-console-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 **Descrição**, insira **My java test app**.
   + Em **Runtime**, selecione **Apache Flink**.
**nota**  
O Managed Service for Apache Flink usa o Apache Flink versão 1.8.2 ou 1.6.2.
   + Altere o pulldown da versão para **Apache Flink 1.6**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Editar a política do IAM
<a name="earlier-gs-1_6-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",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "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="earlier-gs-1_6-exercise-7-console-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 **java-getting-started-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 as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.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 na Amazon, 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`

##### Execute o aplicativo
<a name="earlier-gs-1_6-exercise-7-console-run"></a>

1. Na **MyApplication**página, escolha **Executar**. Confirme a ação.

1. Quando o aplicativo estiver em execução, atualize a página. O console mostra o **Gráfico do aplicativo**.

##### Interromper a aplicação
<a name="earlier-gs-1_6-exercise-7-console-stop"></a>

Na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Atualizar o aplicativo
<a name="earlier-gs-1_6-exercise-7-console-update"></a>

Usando o console, é possível atualizar configurações do aplicativo, como as propriedades do aplicativo, as configurações de monitoramento e a localização ou o nome do arquivo JAR do aplicativo. Também é possível recarregar o JAR do aplicativo do bucket do Amazon S3 se for necessário atualizar o código do aplicativo.

Na **MyApplication**página, escolha **Configurar**. Atualize as configurações do aplicativo e selecione **Atualizar**.

##### Criar e executar a aplicação (AWS CLI)
<a name="earlier-gs-1_6-exercise-7-cli"></a>

Nesta seção, você usa o AWS CLI para criar e executar o aplicativo Managed Service for Apache Flink. O Managed Service for Apache Flink usa o `kinesisanalyticsv2` AWS CLI comando para criar e interagir com o Managed Service for Apache Flink aplicativos.

##### Criação de uma política de permissões
<a name="earlier-gs-1_6-exercise-7-cli-policy"></a>

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação `read` no fluxo de origem, e outra que concede permissões para ações `write` no fluxo de destino. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. Substitua `username` pelo nome de usuário usado para criar o bucket do Amazon S3 e armazenar o código do aplicativo. Substitua o ID da conta nos nomes de recursos da Amazon (ARNs) (`012345678901`) pelo ID da sua conta.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "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"
        }
    ]
}
```

------

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

**nota**  
Para acessar outros serviços da Amazon, você pode usar o AWS SDK para Java. O Managed Service for Apache Flink define automaticamente as credenciais exigidas pelo SDK como as credenciais do perfil do IAM associado a seu aplicativo. Não é necessária nenhuma etapa adicional.

##### Criar um perfil do IAM
<a name="earlier-gs-1_6-exercise-7-cli-role"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo sem permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink permissão para assumir o perfil, e a política de permissões determina o que o serviço pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função.

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Funções** e **Criar função**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **Serviço da AWS **. Em **Selecionar o serviço que usará esta função**, selecione **Kinesis**. Em **Selecionar seu caso de uso**, selecione **Kinesis Analytics**.

   Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**.

   Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, atualize as políticas de confiança e de permissões para a função.

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, anexe a política criada na etapa anterior, [Criação de uma política de permissões](#earlier-gs-1_6-exercise-7-cli-policy).

   1. Na página **Resumo**, selecione a guia **Permissões**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior).

   1. Selecione a política **AKReadSourceStreamWriteSinkStream** e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usa para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Crie o aplicativo do Managed Service for Apache Flink
<a name="earlier-gs-1_6-exercise-7-cli-create"></a>

1. Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket (`username`) pelo sufixo selecionado na seção anterior. Substitua o ID da conta de exemplo (`012345678901`) na função de execução do serviço pelo ID da conta.

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_6",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "java-getting-started-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           },
           "EnvironmentProperties":  { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) com a solicitação anterior para criar o aplicativo: 

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="earlier-gs-1_6-exercise-7-cli-start"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="earlier-gs-1_6-exercise-7-cli-stop"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
      "ApplicationName": "test"
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) com a seguinte solicitação para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="earlier-gs-1_6-exercise-7-cli-cw"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte[Configure o registro em log do aplicativo no Managed Service for Apache Flink](cloudwatch-logs.md).

##### Atualizar propriedades do ambiente
<a name="earlier-gs-1_6-exercise-7-cli-update-env"></a>

Nesta seção, você usa a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) para alterar as propriedades do ambiente do aplicativo sem recompilar o código do aplicativo. Neste exemplo, você altera a região dos fluxos de origem e destino.

**Para atualizar propriedades de ambiente para o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `update_properties_request.json`.

   ```
   {"ApplicationName": "test",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "flink.stream.initpos" : "LATEST",
                       "aws.region" : "us-west-2",
                       "AggregationEnabled" : "false"
                  }
               },
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2"
                  }
               }
            ]
         }
      }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) com a solicitação anterior para atualizar as propriedades do ambiente:

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### Atualizar o código do aplicativo
<a name="earlier-gs-1_6-exercise-7-cli-update-code"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI ação.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo bucket e nome de objeto do Amazon S3. O aplicativo será reiniciado com o novo pacote de código.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (*<username>*) com o sufixo que você escolheu na [Criar dois fluxos de dados do Amazon Kinesis](#earlier-gs-1_6-exercise-1) seção.

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "java-getting-started-1.0.jar"
                }
            }
        }
    }
}
```

### Etapa 4: limpar AWS os recursos
<a name="earlier-gs-1_6-cleanup"></a>

Esta seção inclui procedimentos para limpar AWS recursos criados no tutorial de introdução.

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

#### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="earlier-gs-1_6-cleanup-app"></a>

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

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

1. Selecione **Configurar**.

1. Na seção **Snapshots**, selecione **Desativar** e, em seguida, selecione **Atualizar**.

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

#### Exclua seus fluxos de dados do Kinesis
<a name="earlier-gs-1_6-cleanup-stream"></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 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="earlier-gs-1_6-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="earlier-gs-1_6-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="earlier-gs-1_6-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.

## Exemplos de versões anteriores (legadas) do Managed Service for Apache Flink
<a name="legacy-examples"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

Esta seção apresenta exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink. Eles incluem exemplos de código e step-by-step instruções para ajudar você a criar serviços gerenciados para aplicativos Apache Flink e testar seus resultados.

Antes de explorar esses exemplos, recomendamos que você analise em primeiro lugar o seguinte : 
+ [Como funciona](how-it-works.md)
+ [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md)

**nota**  
Esses exemplos pressupõem que você esteja usando a região Oeste dos EUA (Oregon) (`us-west-2`). Se você estiver usando uma região diferente, atualize o código, os comandos e o perfil do IAM do aplicativo de forma adequada.

**Topics**
+ [DataStream Exemplos de API](#examples-datastream)
+ [Exemplos de Python](#examples-python)
+ [Exemplos do Scala](#examples-scala)

### DataStream Exemplos de API
<a name="examples-datastream"></a>

Os exemplos a seguir demonstram como criar aplicativos usando a API Apache Flink DataStream .

**Topics**
+ [Exemplo: janela em cascata](#examples-tumbling)
+ [Exemplo: janela deslizante](#examples-sliding)
+ [Exemplo: gravação em um bucket do Amazon S3](#examples-s3)
+ [Tutorial: uso de um aplicativo Managed Service for Apache Flink para replicar dados de um tópico em um cluster MSK para outro em uma VPC](#example-msk)
+ [Exemplo: use um consumidor EFO com um fluxo de dados do Kinesis](#examples-efo)
+ [Exemplo: gravação no Firehose](#get-started-exercise-fh)
+ [Exemplo: leia a partir de um fluxo do Kinesis em outra conta](#examples-cross)
+ [Tutorial: como usar um armazenamento confiável personalizado com o Amazon MSK](#example-keystore)

#### Exemplo: janela em cascata
<a name="examples-tumbling"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

Neste exercício, você cria um aplicativo Managed Service for Apache Flink que agrega dados usando uma janela em cascata. A agregação está habilitada por padrão no Flink. Para desativá-la, use o seguinte:

```
sink.producer.aggregation-enabled' = 'false'
```

**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-tumbling-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-tumbling-write)
+ [Baixe e examine o código do aplicativo](#examples-tumbling-download)
+ [Compilar o código do aplicativo](#examples-tumbling-compile)
+ [Upload do código Java de fluxo do Apache Flink](#examples-tumbling-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-tumbling-create-run)
+ [Limpe AWS os recursos](#examples-tumbling-cleanup)

##### Crie recursos dependentes
<a name="examples-tumbling-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 seu fluxo 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-tumbling-write"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.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-tumbling-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/TumblingWindow`.

O código do aplicativo está localizado no arquivo `TumblingWindowStreamingJob.java`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ Inclua a seguinte declaração de importação:

  ```
  import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  ```
+ O aplicativo usa o operador `timeWindow` para encontrar a contagem dos valores de cada símbolo de ação em uma janela em cascata de cinco segundos. O código a seguir cria o operador e envia os dados agregados para um novo coletor de fluxo de dados do Kinesis:

  ```
  input.flatMap(new Tokenizer()) // Tokenizer for generating words
                      .keyBy(0) // Logically partition the stream for each word
                      
                      .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward
                      .sum(1) // Sum the number of words per partition
                      .map(value -> value.f0 + "," + value.f1.toString() + "\n")
                      .addSink(createSinkFromStaticConfig());
  ```

##### Compilar o código do aplicativo
<a name="examples-tumbling-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.3
   ```
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. 

A compilação do aplicativo cria o arquivo JAR do aplicativo (`target/aws-kinesis-analytics-java-apps-1.0.jar`).

##### Upload do código Java de fluxo do Apache Flink
<a name="examples-tumbling-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-tumbling-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 `aws-kinesis-analytics-java-apps-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-tumbling-create-run"></a>

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

##### Criar a aplicação
<a name="examples-tumbling-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**  
O Managed Service for Apache Flink usa o Apache Flink versão 1.15.2.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-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>/aws-kinesis-analytics-java-apps-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-tumbling-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 **aws-kinesis-analytics-java-apps-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. 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-tumbling-run"></a>

1. Na **MyApplication**página, escolha **Executar**. Deixe a opção **Executar sem snapshot** selecionada e confirme a ação.

1. Quando o aplicativo estiver em execução, atualize a página. O console mostra o **Gráfico do aplicativo**.

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-tumbling-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-tumbling-cleanup-app)
+ [Exclua seus fluxos de dados do Kinesis](#examples-tumbling-cleanup-stream)
+ [Excluir objeto e bucket do Amazon S3](#examples-tumbling-cleanup-s3)
+ [Exclua seus recursos do IAM](#examples-tumbling-cleanup-iam)
+ [Exclua seus CloudWatch recursos](#examples-tumbling-cleanup-cw)

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-tumbling-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-tumbling-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-tumbling-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-tumbling-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-tumbling-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.

#### Exemplo: janela deslizante
<a name="examples-sliding"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.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-sliding-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-sliding-write)
+ [Baixe e examine o código do aplicativo](#examples-sliding-download)
+ [Compilar o código do aplicativo](#examples-sliding-compile)
+ [Upload do código Java de fluxo do Apache Flink](#examples-sliding-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-sliding-create-run)
+ [Limpe AWS os recursos](#examples-sliding-cleanup)

##### Crie recursos dependentes
<a name="examples-sliding-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-sliding-write"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
    
   import datetime
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "EVENT_TIME": datetime.datetime.now().isoformat(),
           "TICKER": random.choice(["AAPL", "AMZN", "MSFT", "INTC", "TBV"]),
           "PRICE": round(random.random() * 100, 2),
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.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-sliding-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/SlidingWindow`.

O código do aplicativo está localizado no arquivo `SlidingWindowStreamingJobWithParallelism.java`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ O aplicativo usa o operador `timeWindow` para descobrir o valor mínimo para cada símbolo de ação em uma janela de dez segundos que desliza por cinco segundos. O código a seguir cria o operador e envia os dados agregados para um novo coletor de fluxo de dados do Kinesis:
+ Inclua a seguinte declaração de importação:

  ```
  import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows; //flink 1.13 onward
  ```
+ O aplicativo usa o operador `timeWindow` para encontrar a contagem dos valores de cada símbolo de ação em uma janela em cascata de cinco segundos. O código a seguir cria o operador e envia os dados agregados para um novo coletor de fluxo de dados do Kinesis:

  ```
  input.flatMap(new Tokenizer()) // Tokenizer for generating words
                  .keyBy(0) // Logically partition the stream for each word
                 
  		.window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //Flink 1.13 onward
                  .sum(1) // Sum the number of words per partition
                  .map(value -> value.f0 + "," + value.f1.toString() + "\n")
                  .addSink(createSinkFromStaticConfig());
  ```

##### Compilar o código do aplicativo
<a name="examples-sliding-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.3
   ```
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. 

A compilação do aplicativo cria o arquivo JAR do aplicativo (`target/aws-kinesis-analytics-java-apps-1.0.jar`).

##### Upload do código Java de fluxo do Apache Flink
<a name="examples-sliding-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-sliding-resources).

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

1. Na etapa **Selecionar arquivos**, selecione **Adicionar arquivos**. Navegue até o arquivo `aws-kinesis-analytics-java-apps-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-sliding-create-run"></a>

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

##### Criar a aplicação
<a name="examples-sliding-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**.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-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>/aws-kinesis-analytics-java-apps-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-sliding-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 **aws-kinesis-analytics-java-apps-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. 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 na Amazon, 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.

##### Configure o paralelismo do aplicativo
<a name="examples-sliding-parallelism"></a>

Este exemplo de aplicativo usa a execução paralela de tarefas. O código do aplicativo a seguir define o paralelismo do operador `min`:

```
.setParallelism(3) // Set parallelism for the min operator
```

O paralelismo do aplicativo não pode ser maior do que o paralelismo provisionado, que tem um padrão de 1. Para aumentar o paralelismo do seu aplicativo, use a seguinte ação: AWS CLI 

```
aws kinesisanalyticsv2 update-application
      --application-name MyApplication
      --current-application-version-id <VersionId>
      --application-configuration-update "{\"FlinkApplicationConfigurationUpdate\": { \"ParallelismConfigurationUpdate\": {\"ParallelismUpdate\": 5, \"ConfigurationTypeUpdate\": \"CUSTOM\" }}}"
```

Você pode recuperar o ID da versão atual do aplicativo usando as [ListApplications](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ListApplications.html)ações [DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html)ou.

##### Execute o aplicativo
<a name="examples-sliding-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-sliding-cleanup"></a>

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

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

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-sliding-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-sliding-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-sliding-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-sliding-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-sliding-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.

#### Exemplo: gravação em um bucket do Amazon S3
<a name="examples-s3"></a>

Neste exercício, você cria um Managed Service for Apache Flink que tem um fluxo de dados do Kinesis como origem e um bucket do Amazon S3 como coletor. Usando o coletor, você pode conferir a saída do aplicativo no console do Amazon S3. 

**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-s3-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-s3-write)
+ [Baixe e examine o código do aplicativo](#examples-s3-download)
+ [Modifique o código do aplicativo](#examples-s3-modify)
+ [Compilar o código do aplicativo](#examples-s3-compile)
+ [Upload do código Java de fluxo do Apache Flink](#examples-s3-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-s3-create-run)
+ [Verifique a saída do aplicativo](#examples-s3-verify)
+ [Opcional: personalize a fonte e o coletor](#examples-s3-customize)
+ [Limpe AWS os recursos](#examples-s3-cleanup)

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

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

**nota**  
O Managed Service for Apache Flink não pode gravar dados no Amazon S3 com a criptografia do lado do servidor habilitada no Managed Service for Apache Flink.

Você pode criar o fluxo de dados do Kinesis e um 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 seu fluxo de dados **ExampleInputStream**.
+ 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>***. Crie duas pastas (**code** e **data**) no bucket do Amazon S3.

O aplicativo cria os seguintes CloudWatch recursos, caso eles ainda não existam:
+ Um grupo de logs chamado `/AWS/KinesisAnalytics-java/MyApplication`.
+ Um fluxo de logs chamado `kinesis-analytics-log-stream`.

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

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.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-s3-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/S3Sink`.

O código do aplicativo está localizado no arquivo `S3StreamingSinkJob.java`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ Você precisa incluir a seguinte declaração de importação:

  ```
  import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
  ```
+ O aplicativo usa um coletor do Apache Flink S3 para gravar no Amazon S3. 

  O coletor lê mensagens em uma janela em cascata, codifica mensagens em objetos de bucket do S3 e envia os objetos codificados para o coletor do S3. O código a seguir codifica objetos para envio ao Amazon S3:

  ```
  input.map(value -> { // Parse the JSON
                  JsonNode jsonNode = jsonParser.readValue(value, JsonNode.class);
                  return new Tuple2<>(jsonNode.get("ticker").toString(), 1);
              }).returns(Types.TUPLE(Types.STRING, Types.INT))
              .keyBy(v -> v.f0) // Logically partition the stream for each word
              .window(TumblingProcessingTimeWindows.of(Time.minutes(1)))
              .sum(1) // Count the appearances by ticker per partition
              .map(value -> value.f0 + " count: " + value.f1.toString() + "\n")
              .addSink(createS3SinkFromStaticConfig());
  ```

**nota**  
O aplicativo usa um objeto `StreamingFileSink` Flink para gravar no Amazon S3. Para obter mais informações sobre o`StreamingFileSink`, consulte a [StreamingFileSink](https://nightlies.apache.org/flink/flink-docs-release-1.13/dev/connectors/streamfile_sink.html)documentação do [Apache Flink](https://nightlies.apache.org/flink/flink-docs-release-1.13/).

##### Modifique o código do aplicativo
<a name="examples-s3-modify"></a>

Nesta seção, você modifica o código do aplicativo para gravar a saída em seu bucket do Amazon S3.

Atualize a linha a seguir com seu nome de usuário para especificar o local de saída do aplicativo:

```
private static final String s3SinkPath = "s3a://ka-app-code-<username>/data";
```

##### Compilar o código do aplicativo
<a name="examples-s3-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.3
   ```

A compilação do aplicativo cria o arquivo JAR do aplicativo (`target/aws-kinesis-analytics-java-apps-1.0.jar`).

**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. 

##### Upload do código Java de fluxo do Apache Flink
<a name="examples-s3-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 dependentesGravação de registros de amostra no fluxo de entrada](#examples-s3-resources).

1. **No console do Amazon S3, escolha o **ka-app-code- *<username>*** bucket, navegue até a pasta de **código** e escolha Upload.**

1. Na etapa **Selecionar arquivos**, selecione **Adicionar arquivos**. Navegue até o arquivo `aws-kinesis-analytics-java-apps-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-s3-create-run"></a>

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

##### Criar a aplicação
<a name="examples-s3-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**.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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:  
Em **Nome do aplicativo**, insira **MyApplication**.
Em **Runtime**, selecione **Apache Flink**.
Deixe a versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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 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: `kinesisanalytics-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 ao fluxo 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. Substitua <username> pelo seu nome de usuário.

   ```
   {
               "Sid": "S3",
               "Effect": "Allow",
               "Action": [
                   "s3:Abort*",
                   "s3:DeleteObject*",
                   "s3:GetObject*",
                   "s3:GetBucket*",
                   "s3:List*",
                   "s3:ListBucket",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-<username>",
                   "arn:aws:s3:::ka-app-code-<username>/*"
               ]
             }, 
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:region:account-id:log-group:*"
               ]
           },
           {
               "Sid": "ListCloudwatchLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:*"
               ]
           },
           {
               "Sid": "PutCloudwatchLogs",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:region:account-id:log-group:%LOG_GROUP_PLACEHOLDER%:log-stream:%LOG_STREAM_PLACEHOLDER%"
               ]
           }
           ,
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           
       ]
   }
   ```

##### Configure o aplicativo
<a name="examples-s3-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 **code/aws-kinesis-analytics-java-apps-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. 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-s3-run"></a>

1. Na **MyApplication**página, escolha **Executar**. Deixe a opção **Executar sem snapshot** selecionada e confirme a ação.

1. Quando o aplicativo estiver em execução, atualize a página. O console mostra o **Gráfico do aplicativo**.

##### Verifique a saída do aplicativo
<a name="examples-s3-verify"></a>

No console do Amazon S3, abra a pasta de **dados** em seu bucket do S3.

Depois de alguns minutos, os objetos contendo dados agregados do aplicativo serão apresentados.

**nota**  
A agregação está habilitada por padrão no Flink. Para desativá-la, use o seguinte:  

```
sink.producer.aggregation-enabled' = 'false'
```

##### Opcional: personalize a fonte e o coletor
<a name="examples-s3-customize"></a>

Nesta seção, você personaliza as configurações dos objetos de origem e coletor.

**nota**  
Depois de alterar as seções do código descritas nas seções a seguir, faça o seguinte para recarregar o código do aplicativo:  
Repita as etapas da seção [Compilar o código do aplicativo](#examples-s3-compile) para compilar o código atualizado do aplicativo.
Repita as etapas da seção [Upload do código Java de fluxo do Apache Flink](#examples-s3-upload) para fazer o upload do código atualizado do aplicativo.
Na página do aplicativo no console, selecione **Configure** e, em seguida, selecione **Update** (Atualizar) para recarregar o código do aplicativo atualizado em seu aplicativo.

**Topics**
+ [Configure o particionamento de dados](#examples-s3-configure-partition)
+ [Configure a frequência de leitura](#examples-s3-configure-read)
+ [Configure o buffer de gravação](#examples-s3-configure-write)

##### Configure o particionamento de dados
<a name="examples-s3-configure-partition"></a>

Nesta seção, você configura os nomes das pastas que o coletor de arquivos de streaming cria no bucket do S3. Para isso, adicione um atribuidor de bucket ao coletor de arquivos de streaming.

Para personalizar os nomes das pastas criados no bucket do S3, faça o seguinte:

1. Adicione as seguintes declarações de importação ao início do arquivo `S3StreamingSinkJob.java`:

   ```
   import org.apache.flink.streaming.api.functions.sink.filesystem.rollingpolicies.DefaultRollingPolicy;
   import org.apache.flink.streaming.api.functions.sink.filesystem.bucketassigners.DateTimeBucketAssigner;
   ```

1. Atualize o método `createS3SinkFromStaticConfig()` no código para que fique como se segue:

   ```
   private static StreamingFileSink<String> createS3SinkFromStaticConfig() {
   
       final StreamingFileSink<String> sink = StreamingFileSink
           .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8"))
           .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH"))
           .withRollingPolicy(DefaultRollingPolicy.create().build())
           .build();
       return sink;
   }
   ```

O exemplo de código anterior usa o `DateTimeBucketAssigner` com um formato de data personalizado para criar pastas no bucket do S3. O `DateTimeBucketAssigner` usa o sistema de horário atual para criar nomes para os buckets. Se você quiser criar um atribuidor de bucket personalizado para personalizar ainda mais os nomes das pastas criadas, você pode criar uma classe que implemente. [BucketAssigner](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/streaming/api/functions/sink/filesystem/BucketAssigner.html) Você implementa sua lógica personalizada usando o método `getBucketId`.

Uma implementação personalizada do `BucketAssigner` pode usar o parâmetro [Contexto](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/streaming/api/functions/sink/filesystem/BucketAssigner.Context.html) para obter mais informações sobre um registro a fim de determinar sua pasta de destino.

##### Configure a frequência de leitura
<a name="examples-s3-configure-read"></a>

Nesta seção, você configura a frequência das leituras no fluxo de origem.

Por padrão, o consumidor do Kinesis Streams lê o fluxo de origem cinco vezes por segundo. Essa frequência causará problemas se houver mais de um cliente lendo o fluxo ou se o aplicativo precisar tentar ler um registro novamente. Você pode evitar esses problemas definindo a frequência de leitura do consumidor.

Para definir a frequência de leitura do consumidor do Kinesis, você define a configuração `SHARD_GETRECORDS_INTERVAL_MILLIS`.

O exemplo de código a seguir define a configuração `SHARD_GETRECORDS_INTERVAL_MILLIS` para um segundo:

```
kinesisConsumerConfig.setProperty(ConsumerConfigConstants.SHARD_GETRECORDS_INTERVAL_MILLIS, "1000");
```

##### Configure o buffer de gravação
<a name="examples-s3-configure-write"></a>

Nesta seção, você define a frequência de gravação e outras configurações do coletor.

Por padrão, o aplicativo grava no bucket de destino a cada minuto. Você pode alterar esse intervalo e outras configurações configurando o objeto `DefaultRollingPolicy`.

**nota**  
O coletor de arquivos de streaming do Apache Flink grava em seu bucket de saída toda vez que o aplicativo cria um ponto de verificação. Por padrão, o aplicativo cria um ponto de verificação a cada minuto. Para aumentar o intervalo de gravação do coletor do S3, você também deve aumentar o intervalo do ponto de verificação.

Para configurar o objeto `DefaultRollingPolicy`, faça o seguinte:

1. Aumente a `CheckpointInterval` configuração do aplicativo. A entrada a seguir para a [ UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)ação define o intervalo do ponto de verificação em 10 minutos:

   ```
   {
      "ApplicationConfigurationUpdate": {  
         "FlinkApplicationConfigurationUpdate": { 
            "CheckpointConfigurationUpdate": {
               "ConfigurationTypeUpdate" : "CUSTOM", 
               "CheckpointIntervalUpdate": 600000
            }
         }
      },
      "ApplicationName": "MyApplication",
      "CurrentApplicationVersionId": 5
   }
   ```

   Para usar o código anterior, especifique a versão atual do aplicativo. Você pode recuperar a versão do aplicativo usando a [ListApplications](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ListApplications.html)ação.

1. Adicione a seguinte declaração de importação ao início do arquivo `S3StreamingSinkJob.java`:

   ```
   import java.util.concurrent.TimeUnit; 
   ```

1. Atualize o método `createS3SinkFromStaticConfig` no arquivo `S3StreamingSinkJob.java` para que fique como se segue:

   ```
   private static StreamingFileSink<String> createS3SinkFromStaticConfig() {
   
           final StreamingFileSink<String> sink = StreamingFileSink
                   .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder<String>("UTF-8"))
                   .withBucketAssigner(new DateTimeBucketAssigner("yyyy-MM-dd--HH"))
                   .withRollingPolicy(
                           DefaultRollingPolicy.create()
                               .withRolloverInterval(TimeUnit.MINUTES.toMillis(8))
                               .withInactivityInterval(TimeUnit.MINUTES.toMillis(5))
                               .withMaxPartSize(1024 * 1024 * 1024)
                               .build())
                   .build();
           return sink;
       }
   ```

   O exemplo de código anterior define a frequência de gravações no bucket do Amazon S3 em oito minutos.

Para obter mais informações sobre como configurar o coletor de arquivos de streaming do Apache Flink, consulte [Formatos codificados por linha](https://nightlies.apache.org/flink/flink-docs-release-1.13/dev/connectors/streamfile_sink.html#row-encoded-formats) na [documentação do Apache Flink](https://nightlies.apache.org/flink/flink-docs-release-1.13/).

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

Esta seção inclui procedimentos para limpar AWS recursos que você criou no tutorial do Amazon S3.

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

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-s3-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 seu fluxo de dados do Kinesis
<a name="examples-s3-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.

##### Exclua seus objetos e bucket do Amazon S3
<a name="examples-s3-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-s3-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 **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-s3-cleanup-cw"></a>

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

1. Na barra 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.

#### Tutorial: uso de um aplicativo Managed Service for Apache Flink para replicar dados de um tópico em um cluster MSK para outro em uma VPC
<a name="example-msk"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

O tutorial a seguir demonstra como criar uma VPC da Amazon com um cluster do Amazon MSK e dois tópicos e como criar um aplicativo Managed Service for Apache Flink que lê um tópico do Amazon MSK e grava em outro.

**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 uma Amazon VPC com um cluster Amazon MSK](#example-msk-createcluster)
+ [Crie o código do aplicativo](#example-msk-code)
+ [Upload do código Java de fluxo do Apache Flink](#example-msk-upload)
+ [Criar a aplicação](#example-msk-create)
+ [Configure o aplicativo](#example-msk-configure)
+ [Execute o aplicativo](#example-msk-run)
+ [Teste a aplicação](#example-msk-test)

##### Crie uma Amazon VPC com um cluster Amazon MSK
<a name="example-msk-createcluster"></a>

Para criar um exemplo de VPC e de cluster do Amazon MSK para acessar a partir de um aplicativo Managed Service for Apache Flink, siga o tutorial [Conceitos básicos do uso do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html).

Ao concluir o tutorial, observe o seguinte:
+ Na [Etapa 3: Crie um tópico](https://docs.aws.amazon.com/msk/latest/developerguide/create-topic.html), repita o comando `kafka-topics.sh --create` para criar um tópico de destino chamado `AWSKafkaTutorialTopicDestination`:

  ```
  bin/kafka-topics.sh --create --zookeeper ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWS KafkaTutorialTopicDestination
  ```
+ Registre a lista de servidores bootstrap do seu cluster. Você pode obter a lista de servidores bootstrap com o seguinte comando (*ClusterArn*substitua pelo ARN do seu cluster MSK):

  ```
  aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn
  {...
      "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094"
  }
  ```
+ Ao seguir as etapas dos tutoriais, certifique-se de usar a AWS região selecionada no código, nos comandos e nas entradas do console.

##### Crie o código do aplicativo
<a name="example-msk-code"></a>

Nesta seção, você baixará e compilará o arquivo JAR do aplicativo. Recomendamos usar o Java 11.

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. O código do aplicativo está localizado no arquivo `amazon-kinesis-data-analytics-java-examples/KafkaConnectors/KafkaGettingStartedJob.java`. Você pode examinar o código para se familiarizar com a estrutura do código do aplicativo Managed Service for Apache Flink.

1. Use a ferramenta Maven de linha de comando ou seu ambiente de desenvolvimento preferido para criar o arquivo JAR. Para compilar o arquivo JAR usando a ferramenta Maven de linha de comando, digite o seguinte:

   ```
   mvn package -Dflink.version=1.15.3
   ```

   Se a compilação for feita com sucesso, o seguinte arquivo será criado:

   ```
   target/KafkaGettingStartedJob-1.0.jar
   ```
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. Se você estiver usando um ambiente de desenvolvimento, 

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

Nesta seção, você faz o upload do seu aplicativo no bucket do Amazon S3 que você criou no tutorial [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md).

**nota**  
Se você excluiu o bucket do Amazon S3 no tutorial de introdução, siga a etapa [Faça upload do arquivo JAR do código do aplicativo](get-started-exercise.md#get-started-exercise-6) novamente.

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 `KafkaGettingStartedJob-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 a aplicação
<a name="example-msk-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 1.15.2**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="example-msk-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 **KafkaGettingStartedJob-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`**.
**nota**  
Quando você especifica recursos do aplicativo usando o console (como CloudWatch Logs ou uma Amazon VPC), o console modifica sua função de execução do aplicativo para conceder permissão para acessar esses recursos.

1. Em **Propriedades**, selecione **Adicionar grupo**. Insira as seguintes propriedades:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)
**nota**  
O **ssl.truststore.password** para o certificado padrão é “changeit”; você não precisa alterar esse valor se estiver usando o certificado padrão.

   Selecione **Adicionar grupo** novamente. Insira as seguintes propriedades:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)

   O código do aplicativo lê as propriedades do aplicativo acima para configurar a origem e o coletor usados para interagir com sua VPC e com o cluster do Amazon MSK. Para obter mais informações sobre usar as propriedades, consulte [Use as propriedades de runtime](how-properties.md).

1. Em **Snapshots**, selecione **Desativar**. Isso facilitará a atualização do aplicativo sem carregar dados inválidos do estado do aplicativo.

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

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

1. Na seção **Nuvem privada virtual (VPC)**, selecione a VPC a ser associada ao aplicativo. Selecione as sub-redes e o grupo de segurança associados à sua VPC os quais você deseja que o aplicativo use para acessar os recursos da VPC.

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.

##### Execute o aplicativo
<a name="example-msk-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.

##### Teste a aplicação
<a name="example-msk-test"></a>

Nesta seção, você grava registros no tópico de origem. O aplicativo lê registros do tópico de origem e os grava no tópico de destino. Você verifica se o aplicativo está funcionando gravando registros no tópico de origem e lendo registros do tópico de destino.

Para escrever e ler registros dos tópicos, siga as etapas de [Etapa 6: Produza e consuma dados](https://docs.aws.amazon.com/msk/latest/developerguide/produce-consume.html) no tutorial de [Introdução ao uso do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html).

Para ler o tópico de destino, use o nome do tópico de destino em vez do nome do tópico de origem em sua segunda conexão com o cluster:

```
bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
```

Se nenhum registro aparecer no tópico de destino, consulte a seção [Não é possível acessar recursos em uma VPC](troubleshooting-symptoms.md#troubleshooting-rt-vpc) no tópico [Solucionar problemas do Managed Service for Apache Flink](troubleshooting.md).

#### Exemplo: use um consumidor EFO com um fluxo de dados do Kinesis
<a name="examples-efo"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

Neste exercício, você cria um aplicativo Managed Service for Apache Flink que lê a partir de um fluxo de dados do Kinesis usando um consumidor [Enhanced Fan-Out (EFO)](https://docs.aws.amazon.com/streams/latest/dev/enhanced-consumers.html). Se um consumidor do Kinesis usa o EFO, o serviço Kinesis Data Streams fornece sua própria largura de banda dedicada, em vez de fazer com que o consumidor compartilhe a largura de banda fixa do stream com os outros consumidores que estão lendo o stream.

Para obter mais informações sobre como usar o EFO com o consumidor Kinesis, consulte [ FLIP-128: distribuição avançada para consumidores da Kinesis](https://cwiki.apache.org/confluence/display/FLINK/FLIP-128%3A+Enhanced+Fan+Out+for+AWS+Kinesis+Consumers).

O aplicativo que você cria neste exemplo usa o conector AWS Kinesis (flink-connector-kinesis) 1.15.3.

**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-efo-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-efo-write)
+ [Baixe e examine o código do aplicativo](#examples-efo-download)
+ [Compilar o código do aplicativo](#examples-efo-compile)
+ [Upload do código Java de fluxo do Apache Flink](#examples-efo-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-efo-create-run)
+ [Limpe AWS os recursos](#examples-efo-cleanup)

##### Crie recursos dependentes
<a name="examples-efo-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 seu fluxo 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-efo-write"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
    
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.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-efo-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/EfoConsumer`.

O código do aplicativo está localizado no arquivo `EfoApplication.java`. Observe o seguinte sobre o código do aplicativo:
+ Você habilita o consumidor EFO definindo os seguintes parâmetros no consumidor do Kinesis:
  + **RECORD\$1PUBLISHER\$1TYPE:** defina esse parâmetro como **EFO** para que seu aplicativo use um consumidor EFO para acessar os dados do Kinesis Data Stream. 
  + **EFO\$1CONSUMER\$1NAME:** defina esse parâmetro como um valor de sequência de caracteres que é exclusivo entre os consumidores desse fluxo. A reutilização de um nome de consumidor no mesmo Kinesis Data Stream fará com que o consumidor anterior que usava esse nome seja excluído. 
+ O exemplo de código a seguir demonstra como atribuir valores às propriedades de configuração do consumidor para usar um consumidor EFO para ler o fluxo de origem:

  ```
  consumerConfig.putIfAbsent(RECORD_PUBLISHER_TYPE, "EFO");
  consumerConfig.putIfAbsent(EFO_CONSUMER_NAME, "basic-efo-flink-app");
  ```

##### Compilar o código do aplicativo
<a name="examples-efo-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.3
   ```
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. 

A compilação do aplicativo cria o arquivo JAR do aplicativo (`target/aws-kinesis-analytics-java-apps-1.0.jar`).

##### Upload do código Java de fluxo do Apache Flink
<a name="examples-efo-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-efo-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 `aws-kinesis-analytics-java-apps-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-efo-create-run"></a>

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

##### Criar a aplicação
<a name="examples-efo-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**  
O Managed Service for Apache Flink usa o Apache Flink versão 1.15.2.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-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.
**nota**  
Essas permissões concedem ao aplicativo a capacidade de acessar o consumidor EFO.

------
#### [ 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>/aws-kinesis-analytics-java-apps-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": "AllStreams",
               "Effect": "Allow",
               "Action": [
                   "kinesis:ListShards",
                   "kinesis:ListStreamConsumers",
                   "kinesis:DescribeStreamSummary"
               ],
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/*"
           },
           {
               "Sid": "Stream",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStream",
                   "kinesis:RegisterStreamConsumer",
                   "kinesis:DeregisterStreamConsumer"
               ],
               "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"
           },
           {
               "Sid": "Consumer",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStreamConsumer",
                   "kinesis:SubscribeToShard"
               ],
               "Resource": [
                   "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app",
                   "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream/consumer/my-efo-flink-app:*"
               ]
           }
       ]
   }
   ```

------

##### Configure o aplicativo
<a name="examples-efo-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 **aws-kinesis-analytics-java-apps-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. Em **Propriedades**, selecione **Criar grupo**. 

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)

1. Em **Propriedades**, selecione **Criar grupo**. 

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.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-efo-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. 

Você também pode conferir o nome do seu consumidor () no console do Kinesis Data **Streams**, na guia Enhanced fan-out do stream de dados. *basic-efo-flink-app*

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

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

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

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-efo-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-efo-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-efo-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-efo-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-efo-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.

#### Exemplo: gravação no Firehose
<a name="get-started-exercise-fh"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

Neste exercício, você cria um aplicativo Managed Service for Apache Flink que tem um fluxo de dados do Kinesis como fonte e um fluxo do Firehose como coletor. Usando o coletor, você pode conferir a saída do aplicativo em um bucket do Amazon S3.

**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](#get-started-exercise-fh-1)
+ [Gravação de registros de amostra no fluxo de entrada](#get-started-exercise-fh-2)
+ [Baixar e examinar o código Java de fluxo do Apache Flink](#get-started-exercise-fh-5)
+ [Compilar o código do aplicativo](#get-started-exercise-fh-5.5)
+ [Upload do código Java de fluxo do Apache Flink](#get-started-exercise-fh-6)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#get-started-exercise-fh-7)
+ [Limpe AWS os recursos](#getting-started-fh-cleanup)

##### Crie recursos dependentes
<a name="get-started-exercise-fh-1"></a>

Antes de criar um Managed Service for Apache Flink para este exercício, você cria os seguintes recursos dependentes:
+ Um fluxo de dados do Kinesis (`ExampleInputStream`) 
+ Um fluxo do Firehose no qual o aplicativo grava o resultado em (`ExampleDeliveryStream`). 
+ Um bucket do Amazon S3 para armazenar o código do aplicativo (`ka-app-code-<username>`)

É possível criar o fluxo do Kinesis, os buckets do Amazon S3 e o fluxo do Firehose 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 seu fluxo de dados **ExampleInputStream**.
+ [Criação de um fluxo de entrega do Amazon Kinesis Firehose Data](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) no *Guia do desenvolvedor do Amazon Data Firehose*. Dê um nome ao fluxo do Firehose **ExampleDeliveryStream**. Ao criar o fluxo do Firehose, crie também o **destino no S3** e o **perfil do IAM** do fluxo. 
+ 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="get-started-exercise-fh-2"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo 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 `stock.py` com o conteúdo a seguir:

   ```
    import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.py
   ```

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

##### Baixar e examinar o código Java de fluxo do Apache Flink
<a name="get-started-exercise-fh-5"></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. 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/FirehoseSink`.

O código do aplicativo está localizado no arquivo `FirehoseSinkStreamingJob.java`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```
+ O aplicativo usa um coletor do Firehose para gravar dados em um fluxo do Firehose. O trecho a seguir cria o coletor do Firehose:

  ```
  private static KinesisFirehoseSink<String> createFirehoseSinkFromStaticConfig() {
          Properties sinkProperties = new Properties();
          sinkProperties.setProperty(AWS_REGION, region);
  
          return KinesisFirehoseSink.<String>builder()
                  .setFirehoseClientProperties(sinkProperties)
                  .setSerializationSchema(new SimpleStringSchema())
                  .setDeliveryStreamName(outputDeliveryStreamName)
                  .build();
      }
  ```

##### Compilar o código do aplicativo
<a name="get-started-exercise-fh-5.5"></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. **Para usar o conector Kinesis no aplicativo a seguir, você precisa baixar, compilar e instalar o Apache Maven. Para obter mais informações, consulte [Uso do conector Kinesis Streams para o Apache Flink com versões anteriores do Apache Flink](#how-creating-apps-building-kinesis).**

1. Compile o aplicativo com o seguinte comando: 

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

A compilação do aplicativo cria o arquivo JAR do aplicativo (`target/aws-kinesis-analytics-java-apps-1.0.jar`).

##### Upload do código Java de fluxo do Apache Flink
<a name="get-started-exercise-fh-6"></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](#get-started-exercise-fh-1).

**Para fazer upload do código do aplicativo**

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

1. No console, escolha o **ka-app-code- *<username>*** bucket e, em seguida, escolha **Upload**.

1. Na etapa **Selecionar arquivos**, selecione **Adicionar arquivos**. Navegue até o arquivo `java-getting-started-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="get-started-exercise-fh-7"></a>

É possível criar e executar um aplicativo Managed Service for Apache Flink usando o console ou a AWS CLI.

**nota**  
Quando você cria o aplicativo usando o console, seus recursos AWS Identity and Access Management (IAM) e do Amazon CloudWatch Logs são criados para você. Ao criar o aplicativo usando o AWS CLI, você cria esses recursos separadamente.

**Topics**
+ [Crie e execute o aplicativo (console)](#get-started-exercise-fh-7-console)
+ [Criar e executar a aplicação (AWS CLI)](#get-started-exercise-fh-7-cli)

##### Crie e execute o aplicativo (console)
<a name="get-started-exercise-fh-7-console"></a>

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

##### Criar a aplicação
<a name="get-started-exercise-fh-7-console-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 **Descrição**, insira **My java test app**.
   + Em **Runtime**, selecione **Apache Flink**.
**nota**  
O Managed Service for Apache Flink usa o Apache Flink versão 1.15.2.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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**  
Quando você cria o aplicativo usando o console, você tem a opção de criar um perfil e uma política do IAM para o 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: `kinesisanalytics-MyApplication-us-west-2`

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

Edite a política do IAM para adicionar permissões de acesso ao fluxo de dados do Kinesis e ao fluxo do Firehose.

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 todas as instâncias da conta de amostra IDs (*012345678901*) pelo ID da sua conta.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/java-getting-started-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           },
           {
               "Sid": "WriteDeliveryStream",
               "Effect": "Allow",
               "Action": "firehose:*",
               "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream"
           }
       ]
   }
   ```

------

##### Configure o aplicativo
<a name="get-started-exercise-fh-7-console-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 **java-getting-started-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. 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`

##### Execute o aplicativo
<a name="get-started-exercise-fh-7-console-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.

##### Interromper o aplicativo
<a name="get-started-exercise-fh-7-console-stop"></a>

Na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Atualizar o aplicativo
<a name="get-started-exercise-fh-7-console-update"></a>

Usando o console, é possível atualizar configurações do aplicativo, como as propriedades do aplicativo, as configurações de monitoramento e a localização ou o nome do arquivo JAR do aplicativo. 

Na **MyApplication**página, escolha **Configurar**. Atualize as configurações do aplicativo e selecione **Atualizar**.

**nota**  
Para atualizar o código do aplicativo no console, você deve alterar o nome do objeto do JAR, usar um bucket do S3 diferente ou usar o AWS CLI conforme descrito na seção [Atualizar o código do aplicativo](#get-started-exercise-fh-7-cli-update-code). Se o nome do arquivo ou o bucket não mudar, o código do aplicativo não será recarregado quando você selecionar **Atualizar** na página **Configure**.

##### Criar e executar a aplicação (AWS CLI)
<a name="get-started-exercise-fh-7-cli"></a>

Nesta seção, você usa o AWS CLI para criar e executar o aplicativo Managed Service for Apache Flink.

##### Criação de uma política de permissões
<a name="get-started-exercise-fh-7-cli-policy"></a>

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação `read` no fluxo de origem, e outra que concede permissões para ações `write` no fluxo de destino. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. *username*Substitua pelo nome de usuário que você usará para criar o bucket do Amazon S3 para armazenar o código do aplicativo. Substitua o ID da conta nos nomes de recursos da Amazon (ARNs) (`012345678901`) pelo ID da sua conta.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::ka-app-code-username",
                "arn:aws:s3:::ka-app-code-username/*"
            ]
        },
        {
            "Sid": "ReadInputStream",
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
        },
        {
            "Sid": "WriteDeliveryStream",
            "Effect": "Allow",
            "Action": "firehose:*",
            "Resource": "arn:aws:firehose:us-west-2:012345678901:deliverystream/ExampleDeliveryStream"
        }
    ]
}
```

------

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

**nota**  
Para acessar outros serviços da Amazon, você pode usar o AWS SDK para Java. O Managed Service for Apache Flink define automaticamente as credenciais exigidas pelo SDK como as credenciais do perfil do IAM associado a seu aplicativo. Não é necessária nenhuma etapa adicional.

##### Criar um perfil do IAM
<a name="get-started-exercise-fh-7-cli-role"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo se não tiver permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink a permissão de assumir a função. A política de permissões determina o que o Managed Service for Apache Flink pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função.

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Funções** e **Criar função**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **Serviço da AWS **. Em **Selecionar o serviço que usará esta função**, selecione **Kinesis**. Em **Selecionar seu caso de uso**, selecione **Kinesis Analytics**.

   Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**.

   Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, atualize as políticas de confiança e de permissões para a função.

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, anexe a política criada na etapa anterior, [Criação de uma política de permissões](#get-started-exercise-fh-7-cli-policy).

   1. Na página **Resumo**, selecione a guia **Permissões**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior).

   1. Selecione a política **AKReadSourceStreamWriteSinkStream** e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usará para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Crie o aplicativo do Managed Service for Apache Flink
<a name="get-started-exercise-fh-7-cli-create"></a>

1. Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket pelo sufixo que você selecionou na seção[Crie recursos dependentes](#get-started-exercise-fh-1) (`ka-app-code-<username>`). Substitua o ID da conta de exemplo (*012345678901*) na função de execução do serviço pelo ID da conta.

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_15",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
       "ApplicationConfiguration": {
           "ApplicationCodeConfiguration": {
               "CodeContent": {
                   "S3ContentLocation": {
                       "BucketARN": "arn:aws:s3:::ka-app-code-username",
                       "FileKey": "java-getting-started-1.0.jar"
                   }
               },
               "CodeContentType": "ZIPFILE"
           }
         }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) com a solicitação anterior para criar o aplicativo: 

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
   ```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="get-started-exercise-fh-7-cli-start"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {
       "ApplicationName": "test",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StartApplication.html) com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="get-started-exercise-fh-7-cli-stop"></a>

Nesta seção, a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
       "ApplicationName": "test"
   }
   ```

1. Execute a ação [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_StopApplication.html) com a seguinte solicitação para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="get-started-exercise-fh-7-cli-cw"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte[Configure o registro em log do aplicativo no Managed Service for Apache Flink](cloudwatch-logs.md).

##### Atualizar o código do aplicativo
<a name="get-started-exercise-fh-7-cli-update-code"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) AWS CLI ação.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo bucket e nome de objeto do Amazon S3.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (< *username* >) com o sufixo que você escolheu na [Crie recursos dependentes](#get-started-exercise-fh-1) seção.

```
{
    "ApplicationName": "test",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "java-getting-started-1.0.jar"
                }
            }
        }
    }
}
```

##### Limpe AWS os recursos
<a name="getting-started-fh-cleanup"></a>

Esta seção inclui procedimentos para limpar AWS recursos criados no tutorial de introdução.

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

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="getting-started-fh-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. Selecione **Configurar**.

1. Na seção **Snapshots**, selecione **Desativar** e, em seguida, selecione **Atualizar**.

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

##### Exclua seu fluxo de dados do Kinesis
<a name="getting-started-fh-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.

##### Exclua seu fluxo do Firehose
<a name="getting-started-fh-cleanup-fh"></a>

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

1. No painel Firehose, escolha. **ExampleDeliveryStream**

1. Na **ExampleDeliveryStream**página, escolha **Excluir stream do Firehose** e confirme a exclusão.

##### Excluir objeto e bucket do Amazon S3
<a name="getting-started-fh-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.

1. Se você criou um bucket do Amazon S3 para o destino do fluxo do Firehose, exclua esse bucket também.

##### Exclua seus recursos do IAM
<a name="getting-started-fh-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. Se você criou uma nova política para o fluxo do Firehose, exclua essa política também.

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.

1. Se você criou uma nova função para o fluxo do Firehose, exclua essa função também.

##### Exclua seus CloudWatch recursos
<a name="getting-started-fh-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.

#### Exemplo: leia a partir de um fluxo do Kinesis em outra conta
<a name="examples-cross"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

Este exemplo demonstra como criar um Managed Service para o aplicativo Apache Flink que lê dados de um fluxo do Kinesis em uma conta diferente. Neste exemplo, você usará uma conta para o fluxo de origem do Kinesis e uma segunda conta para o aplicativo Managed Service for Apache Flink e para o fluxo de dados do coletor do Kinesis.

**Topics**
+ [Pré-requisitos](#examples-cross-prerequisites)
+ [Configuração](#examples-cross-setup)
+ [Crie um fluxo do Kinesis da fonte](#examples-cross-streams)
+ [Crie e atualize os perfis e políticas do IAM](#examples-cross-iam)
+ [Atualize o script Python](#examples-cross-python)
+ [Atualize o aplicativo Java](#examples-cross-app)
+ [Compile, faça o upload e execute o aplicativo](#examples-cross-run)

##### Pré-requisitos
<a name="examples-cross-prerequisites"></a>
+ Neste tutorial, você modifica o exemplo da *Introdução* para ler dados de um fluxo do Kinesis em uma conta diferente. Conclua o tutorial [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md) antes de continuar.
+ Você precisa de duas AWS contas para concluir este tutorial: uma para o fluxo de origem e outra para o aplicativo e o stream do coletor. Use a AWS conta que você usou para o tutorial de introdução para o stream do aplicativo e do coletor. Use uma conta AWS diferente para o fluxo de origem.

##### Configuração
<a name="examples-cross-setup"></a>

Você acessará suas duas AWS contas usando perfis nomeados. Modifique suas AWS credenciais e arquivos de configuração para incluir dois perfis que contenham a região e as informações de conexão de suas duas contas.

O arquivo de credencial de exemplo a seguir contém dois perfis nomeados, `ka-source-stream-account-profile` e `ka-sink-stream-account-profile`. Use a conta que você usou no tutorial da Introdução para a conta do fluxo do coletor.

```
[ka-source-stream-account-profile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[ka-sink-stream-account-profile]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
```

O arquivo de configuração de exemplo a seguir contém os mesmos perfis nomeados com informações de região e formato de saída.

```
[profile ka-source-stream-account-profile]
region=us-west-2
output=json

[profile ka-sink-stream-account-profile]
region=us-west-2
output=json
```

**nota**  
Este tutorial não usa o `ka-sink-stream-account-profile`. Ele está incluído como um exemplo de como acessar duas AWS contas diferentes usando perfis.

Para obter mais informações sobre o uso de perfis nomeados com o AWS CLI, consulte [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) na *AWS Command Line Interface*documentação.

##### Crie um fluxo do Kinesis da fonte
<a name="examples-cross-streams"></a>

Nesta seção, você criará o fluxo do Kinesis na conta de origem.

Use o comando a seguir para criar o fluxo do Kinesis que o aplicativo usará como entrada. Observe que o parâmetro `--profile` especifica qual perfil de conta usar.

```
$ aws kinesis create-stream \
--stream-name SourceAccountExampleInputStream \
--shard-count 1 \
--profile ka-source-stream-account-profile
```

##### Crie e atualize os perfis e políticas do IAM
<a name="examples-cross-iam"></a>

Para permitir o acesso a objetos em todas AWS as contas, você cria uma função e uma política do IAM na conta de origem. Em seguida, você modifica a política do IAM na conta do coletor. Para obter mais informações sobre como criar perfis e políticas do IAM, consulte os seguintes tópicos no *AWS Identity and Access Management Guia do usuário*:
+ [Criando perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Criando políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)

##### Perfis e políticas da conta do coletor
<a name="examples-cross-iam-sink"></a>

1. Edite a `kinesis-analytics-service-MyApplication-us-west-2` política do tutorial da Introdução. Essa política permite que o perfil da conta de origem seja assumido para ler o fluxo de origem. 
**nota**  
Quando você usa o console para criar seu aplicativo, o console cria uma política chamada `kinesis-analytics-service-<application name>-<application region>` e um perfil chamado `kinesisanalytics-<application name>-<application region>`. 

   Adicione a seção destacada abaixo à política. Substitua o ID da conta de amostra (*SOURCE01234567*) pelo ID da conta que você usará para o stream de origem.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AssumeRoleInSourceAccount",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::123456789012:role/KA-Source-Stream-Role"
           },
           {
               "Sid": "ReadCode",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/aws-kinesis-analytics-java-apps-1.0.jar"
               ]
           },
           {
               "Sid": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:123456789012:log-group:*"
               ]
           },
           {
               "Sid": "ListCloudwatchLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:123456789012:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutCloudwatchLogs",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:123456789012:log-group:/aws/kinesis-analytics/MyApplication:log-stream:kinesis-analytics-log-stream"
               ]
           }
       ]
   }
   ```

------

1. Abra o perfil `kinesis-analytics-MyApplication-us-west-2` e anote o nome do recurso da Amazon (ARN). Ele será necessário na próxima seção. O ARN do perfil é semelhante ao seguinte.

   ```
   arn:aws:iam::SINK012345678:role/service-role/kinesis-analytics-MyApplication-us-west-2
   ```

##### Perfis e políticas da conta de fonte
<a name="examples-cross-iam-source"></a>

1. Crie uma política na conta de origem chamada `KA-Source-Stream-Policy`. Use o seguinte JSON para a política. Substitua o número da conta de exemplo pelo número da conta de origem.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadInputStream",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStream",
                   "kinesis:GetRecords",
                   "kinesis:GetShardIterator",
                   "kinesis:ListShards"
               ],
               "Resource": "arn:aws:kinesis:us-west-2:111122223333:stream/SourceAccountExampleInputStream"
           }
       ]
   }
   ```

------

1. Crie um perfil na conta de origem chamado `MF-Source-Stream-Role`. Faça o seguinte para criar o perfil usando o caso de uso do **Managed Flink**:

   1. No console de gerenciamento do IAM, selecione **Criar perfil**.

   1. Na página **Criar perfil**, selecione **AWS Serviço**. Na lista de serviços, selecione **Kinesis**.

   1. Na seção **Selecione seu caso de uso**, selecione **Managed Service for Apache Flink**.

   1. Selecione **Next: Permissions** (Próximo: permissões).

   1. Adicione a política de permissões `KA-Source-Stream-Policy` que criada na etapa anterior. Selecione **Next: Tags** (Próximo: tags).

   1. Selecione **Next: Review** (Próximo: revisar).

   1. Nomeie a função `KA-Source-Stream-Role`. Seu aplicativo usará esse perfil para acessar o fluxo de origem.

1. Adicione o `kinesis-analytics-MyApplication-us-west-2` ARN da conta do coletor à relação de confiança do `KA-Source-Stream-Role` perfil na conta de origem:

   1. Abra o `KA-Source-Stream-Role` no console do IAM.

   1. Selecione a guia **Relacionamentos de confiança**.

   1. Selecione **Edit trust relationship (Editar relação de confiança)**.

   1. Use o código a seguir para a relação de confiança. Substitua o ID da conta de amostra (**SINK012345678**) pelo ID da sua conta do coletor.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/kinesis-analytics-MyApplication-us-west-2"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

##### Atualize o script Python
<a name="examples-cross-python"></a>

Nesta seção, você atualiza o script Python que gera dados de amostra para usar no perfil da conta de origem.

Atualize o script `stock.py` com as seguintes alterações destacadas.

```
import json
import boto3
import random
import datetime
import os

os.environ['AWS_PROFILE'] ='ka-source-stream-account-profile'
os.environ['AWS_DEFAULT_REGION'] = 'us-west-2'


kinesis = boto3.client('kinesis')
def getReferrer():
    data = {}
    now = datetime.datetime.now()
    str_now = now.isoformat()
    data['event_time'] = str_now
    data['ticker'] = random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV'])
    price = random.random() * 100
    data['price'] = round(price, 2)
    return data

while True:
        data = json.dumps(getReferrer())
        print(data)
        kinesis.put_record(
                StreamName="SourceAccountExampleInputStream",
                Data=data,
                PartitionKey="partitionkey")
```

##### Atualize o aplicativo Java
<a name="examples-cross-app"></a>

Nesta seção, você atualiza o código do aplicativo Java para assumir a função da conta de origem ao ler o fluxo de origem.

Faça as alterações a seguir no arquivo `BasicStreamingJob.java`. Substitua o exemplo de número da conta de origem (*SOURCE01234567*) pelo número da sua conta de origem.

```
package com.amazonaws.services.managed-flink;

import com.amazonaws.services.managed-flink.runtime.KinesisAnalyticsRuntime;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisConsumer;
import org.apache.flink.streaming.connectors.kinesis.FlinkKinesisProducer;
import org.apache.flink.streaming.connectors.kinesis.config.ConsumerConfigConstants;
import org.apache.flink.streaming.connectors.kinesis.config.AWSConfigConstants;

import java.io.IOException;
import java.util.Map;
import java.util.Properties;

 /**
 * A basic Managed Service for Apache Flink for Java application with Kinesis data streams
 * as source and sink.
 */
public class BasicStreamingJob {
    private static final String region = "us-west-2";
    private static final String inputStreamName = "SourceAccountExampleInputStream";
    private static final String outputStreamName = ExampleOutputStream;
    private static final String roleArn = "arn:aws:iam::SOURCE01234567:role/KA-Source-Stream-Role";
    private static final String roleSessionName = "ksassumedrolesession";

    private static DataStream<String> createSourceFromStaticConfig(StreamExecutionEnvironment env) {
        Properties inputProperties = new Properties();
        inputProperties.setProperty(AWSConfigConstants.AWS_CREDENTIALS_PROVIDER, "ASSUME_ROLE");
        inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_ARN, roleArn);
        inputProperties.setProperty(AWSConfigConstants.AWS_ROLE_SESSION_NAME, roleSessionName);
        inputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region);
        inputProperties.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST");

        return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
    }

    private static KinesisStreamsSink<String> createSinkFromStaticConfig() {
        Properties outputProperties = new Properties();
        outputProperties.setProperty(AWSConfigConstants.AWS_REGION, region);

        return KinesisStreamsSink.<String>builder()
                .setKinesisClientProperties(outputProperties)
                .setSerializationSchema(new SimpleStringSchema())
                .setStreamName(outputProperties.getProperty("OUTPUT_STREAM", "ExampleOutputStream"))
                .setPartitionKeyGenerator(element -> String.valueOf(element.hashCode()))
                .build();
    }

    public static void main(String[] args) throws Exception {
        // set up the streaming execution environment
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        DataStream<String> input = createSourceFromStaticConfig(env);

        input.addSink(createSinkFromStaticConfig());

        env.execute("Flink Streaming Java API Skeleton");
    }
}
```

##### Compile, faça o upload e execute o aplicativo
<a name="examples-cross-run"></a>

Faça o seguinte para atualizar e executar o aplicativo:

1. Compile o aplicativo novamente executando o comando a seguir no diretório com o arquivo `pom.xml`.

   ```
   mvn package -Dflink.version=1.15.3
   ```

1. Exclua o arquivo JAR anterior do seu bucket do Amazon Simple Storage Service (Amazon S3) e, em seguida, faça o upload do novo arquivo `aws-kinesis-analytics-java-apps-1.0.jar` no bucket do Amazon S3.

1. Na página do aplicativo no console Managed Service for Apache Flink, selecione **Configurar**, **Atualizar** para recarregar o arquivo JAR do aplicativo.

1. Execute o script `stock.py` para enviar dados para o fluxo de origem.

   ```
   python stock.py
   ```

Agora, o aplicativo lê dados do fluxo do Kinesis na outra conta.

Você pode ver se o aplicativo está funcionando verificando a métrica `PutRecords.Bytes` do fluxo `ExampleOutputStream`. Se houver atividade no fluxo de saída, o aplicativo está funcionando corretamente.

#### Tutorial: como usar um armazenamento confiável personalizado com o Amazon MSK
<a name="example-keystore"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

##### Fonte de dados atual APIs
<a name="example-keystore-test-new"></a>

[Se você estiver usando a fonte de dados atual APIs, seu aplicativo poderá aproveitar o utilitário Amazon MSK Config Providers descrito aqui.](https://github.com/aws-samples/msk-config-providers) Isso permite que sua KafkaSource função acesse seu armazenamento de chaves e armazenamento confiável para TLS mútuo no Amazon S3.

```
...
// define names of config providers:
builder.setProperty("config.providers", "secretsmanager,s3import");

// provide implementation classes for each provider:
builder.setProperty("config.providers.secretsmanager.class", "com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider");
builder.setProperty("config.providers.s3import.class", "com.amazonaws.kafka.config.providers.S3ImportConfigProvider");

String region = appProperties.get(Helpers.S3_BUCKET_REGION_KEY).toString();
String keystoreS3Bucket = appProperties.get(Helpers.KEYSTORE_S3_BUCKET_KEY).toString();
String keystoreS3Path = appProperties.get(Helpers.KEYSTORE_S3_PATH_KEY).toString();
String truststoreS3Bucket = appProperties.get(Helpers.TRUSTSTORE_S3_BUCKET_KEY).toString();
String truststoreS3Path = appProperties.get(Helpers.TRUSTSTORE_S3_PATH_KEY).toString();
String keystorePassSecret = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_KEY).toString();
String keystorePassSecretField = appProperties.get(Helpers.KEYSTORE_PASS_SECRET_FIELD_KEY).toString();

// region, etc..
builder.setProperty("config.providers.s3import.param.region", region);

// properties
builder.setProperty("ssl.truststore.location", "${s3import:" + region + ":" + truststoreS3Bucket + "/" + truststoreS3Path + "}");
builder.setProperty("ssl.keystore.type", "PKCS12");
builder.setProperty("ssl.keystore.location", "${s3import:" + region + ":" + keystoreS3Bucket + "/" + keystoreS3Path + "}");
builder.setProperty("ssl.keystore.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}");
builder.setProperty("ssl.key.password", "${secretsmanager:" + keystorePassSecret + ":" + keystorePassSecretField + "}");
...
```

Mais detalhes e uma explicação passo a passo podem ser encontrados [aqui](https://github.com/aws-samples/amazon-kinesisanalytics-examples/tree/master/CustomKeystoreWithConfigProviders). 

##### Legado SourceFunction APIs
<a name="example-keystore-legacy"></a>

Se você estiver usando o legado SourceFunction APIs, seu aplicativo usará esquemas personalizados de serialização e desserialização que substituem o `open` método para carregar o armazenamento confiável personalizado. Isso torna o truststore disponível para o aplicativo após o aplicativo ser reiniciado ou substituído pelos encadeamentos. 

O truststore personalizado é recuperado e armazenado usando o seguinte código:

```
public static void initializeKafkaTruststore() {
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    URL inputUrl = classLoader.getResource("kafka.client.truststore.jks");
    File dest = new File("/tmp/kafka.client.truststore.jks");

    try {
        FileUtils.copyURLToFile(inputUrl, dest);
    } catch (Exception ex) {
        throw new FlinkRuntimeException("Failed to initialize Kakfa truststore", ex);
    }
}
```

**nota**  
O Apache Flink exige que o truststore esteja no [formato JKS](https://en.wikipedia.org/wiki/Java_KeyStore).

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

O tutorial a seguir demonstra como se conectar com segurança (criptografia em trânsito) a um cluster do Kafka que usa certificados de servidor emitidos por uma autoridade de certificação (CA) personalizada, privada ou, até mesmo, auto-hospedada. 

Para conectar qualquer cliente do Kafka de forma segura via TLS a um cluster do Kafka, o cliente do Kafka (como o exemplo do aplicativo Flink) deve confiar em toda a cadeia de confiança apresentada pelos certificados de servidor do cluster do Kafka (da AC emissora até a AC de nível raiz). Como exemplo de um armazenamento confiável personalizado, usaremos um cluster do Amazon MSK com a autenticação TLS mútua (MTLS) habilitada. Isso significa que os nós do cluster MSK usam certificados de servidor emitidos por uma Autoridade de AWS Certificação Privada do Gerenciador de Certificados (CA Privada do ACM) que é privada de sua conta e região e, portanto, não é confiável para o armazenamento confiável padrão da Java Virtual Machine (JVM) que executa o aplicativo Flink. 

**nota**  
Um **keystore** é usado para armazenar a chave privada e os certificados de identidade que um aplicativo deve apresentar ao servidor ou ao cliente para verificação.
Um **armazenamento confiável** é usado para armazenar certificados de Autoridades Certificadas (AC) que verificam o certificado apresentado pelo servidor em uma conexão SSL.

 Você também pode usar a técnica deste tutorial para interações entre um aplicativo Managed Service for Apache Flink e outras fontes do Apache Kafka, como:
+ [Um cluster Apache Kafka personalizado hospedado em (Amazon AWS[EC2](https://aws.amazon.com/ec2/) ou Amazon EKS)](https://aws.amazon.com/eks/)
+ Um cluster [Confluent Kafka hospedado em](https://www.confluent.io) AWS
+ Um cluster on-premises do Kafka acessado por meio de [AWS Direct Connect](https://aws.amazon.com/directconnect/) ou uma VPN

**Topics**
+ [Fonte de dados atual APIs](#example-keystore-test-new)
+ [Legado SourceFunction APIs](#example-keystore-legacy)
+ [Crie uma VPC com um cluster do Amazon MSK](#example-keystore-createcluster)
+ [Crie um armazenamento confiável personalizado e aplique-o ao seu cluster](#example-keystore-cert)
+ [Crie o código do aplicativo](#example-keystore-code)
+ [Upload do código Java de fluxo do Apache Flink](#example-keystore-upload)
+ [Criar a aplicação](#example-keystore-create)
+ [Configure o aplicativo](#example-keystore-configure)
+ [Execute o aplicativo](#example-keystore-run)
+ [Teste a aplicação](#example-keystore-test)

##### Crie uma VPC com um cluster do Amazon MSK
<a name="example-keystore-createcluster"></a>

Para criar um exemplo de VPC e de cluster do Amazon MSK para acessar a partir de um aplicativo Managed Service for Apache Flink, siga o tutorial [Conceitos básicos do uso do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html).

Ao concluir o tutorial, faça também o seguinte:
+ Na [Etapa 3: Crie um tópico](https://docs.aws.amazon.com/msk/latest/developerguide/create-topic.html), repita o comando `kafka-topics.sh --create` para criar um tópico de destino chamado `AWS KafkaTutorialTopicDestination`:

  ```
  bin/kafka-topics.sh --create --bootstrap-server ZooKeeperConnectionString --replication-factor 3 --partitions 1 --topic AWSKafkaTutorialTopicDestination
  ```
**nota**  
Se o comando `kafka-topics.sh` retornar um `ZooKeeperClientTimeoutException`, verifique se o grupo de segurança do cluster do Kafka tem uma regra de entrada para permitir todo o tráfego do endereço IP privado da instância do cliente.
+ Registre a lista de servidores bootstrap do seu cluster. Você pode obter a lista de servidores bootstrap com o seguinte comando (*ClusterArn*substitua pelo ARN do seu cluster MSK):

  ```
  aws kafka get-bootstrap-brokers --region us-west-2 --cluster-arn ClusterArn
  {...
      "BootstrapBrokerStringTls": "b-2.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-1.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094,b-3.awskafkatutorialcluste.t79r6y.c4.kafka.us-west-2.amazonaws.com:9094"
  }
  ```
+ Ao seguir as etapas deste tutorial e os tutoriais de pré-requisitos, certifique-se de usar a AWS região selecionada no código, nos comandos e nas entradas do console.

##### Crie um armazenamento confiável personalizado e aplique-o ao seu cluster
<a name="example-keystore-cert"></a>

Nesta seção, você cria uma autoridade de certificação (CA) personalizada, a usa para gerar um truststore personalizado e a aplica ao seu cluster do MSK.

Para criar e aplicar seu truststore personalizado, siga o tutorial de [Autenticação do cliente](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) no *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*.

##### Crie o código do aplicativo
<a name="example-keystore-code"></a>

Nesta seção, você baixa e compila o arquivo JAR do aplicativo.

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. O código do aplicativo está localizado no `amazon-kinesis-data-analytics-java-examples/CustomKeystore`. Você pode examinar o código para se familiarizar com a estrutura do código do Managed Service for Apache Flink.

1. Use a ferramenta Maven de linha de comando ou seu ambiente de desenvolvimento preferido para criar o arquivo JAR. Para compilar o arquivo JAR usando a ferramenta Maven de linha de comando, insira o seguinte:

   ```
   mvn package -Dflink.version=1.15.3
   ```

   Se a compilação for feita com sucesso, o seguinte arquivo será criado:

   ```
   target/flink-app-1.0-SNAPSHOT.jar
   ```
**nota**  
O código-fonte fornecido depende de bibliotecas do Java 11. 

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

Nesta seção, você faz o upload do código do seu aplicativo no bucket do Amazon S3 que você criou no tutorial [Tutorial: Comece a usar a DataStream API no Managed Service para Apache Flink](getting-started.md).

**nota**  
Se você excluiu o bucket do Amazon S3 no tutorial de introdução, siga a etapa [Faça upload do arquivo JAR do código do aplicativo](get-started-exercise.md#get-started-exercise-6) novamente.

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 `flink-app-1.0-SNAPSHOT.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 a aplicação
<a name="example-keystore-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 1.15.2**.

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 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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="example-keystore-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 **flink-app-1.0-SNAPSHOT.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`**.
**nota**  
Quando você especifica recursos do aplicativo usando o console (como Logs ou uma VPC), o console modifica sua função de execução do aplicativo para conceder permissão para acessar esses recursos.

1. Em **Propriedades**, selecione **Adicionar grupo**. Insira as seguintes propriedades:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)
**nota**  
O **ssl.truststore.password** para o certificado padrão é “changeit”; você não precisa alterar esse valor se estiver usando o certificado padrão.

   Selecione **Adicionar grupo** novamente. Insira as seguintes propriedades:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)

   O código do aplicativo lê as propriedades do aplicativo acima para configurar a origem e o coletor usados para interagir com sua VPC e com o cluster do Amazon MSK. Para obter mais informações sobre usar as propriedades, consulte [Use as propriedades de runtime](how-properties.md).

1. Em **Snapshots**, selecione **Desativar**. Isso facilitará a atualização do aplicativo sem carregar dados inválidos do estado do aplicativo.

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

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

1. Na seção **Nuvem privada virtual (VPC)**, selecione a VPC a ser associada ao aplicativo. Selecione as sub-redes e o grupo de segurança associados à sua VPC os quais você deseja que o aplicativo use para acessar os recursos da VPC.

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.

##### Execute o aplicativo
<a name="example-keystore-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.

##### Teste a aplicação
<a name="example-keystore-test"></a>

Nesta seção, você grava registros no tópico de origem. O aplicativo lê registros do tópico de origem e os grava no tópico de destino. Você verifica se o aplicativo está funcionando gravando registros no tópico de origem e lendo registros do tópico de destino.

Para escrever e ler registros dos tópicos, siga as etapas de [Etapa 6: Produza e consuma dados](https://docs.aws.amazon.com/msk/latest/developerguide/produce-consume.html) no tutorial de [Introdução ao uso do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html).

Para ler o tópico de destino, use o nome do tópico de destino em vez do nome do tópico de origem em sua segunda conexão com o cluster:

```
bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic AWS KafkaTutorialTopicDestination --from-beginning
```

Se nenhum registro aparecer no tópico de destino, consulte a seção [Não é possível acessar recursos em uma VPC](troubleshooting-symptoms.md#troubleshooting-rt-vpc) no tópico [Solucionar problemas do Managed Service for Apache Flink](troubleshooting.md).

### Exemplos de Python
<a name="examples-python"></a>

Os exemplos a seguir demonstram como criar aplicativos usando o Python com a API de tabelas do Apache Flink.

**Topics**
+ [Exemplo: criação de uma janela em cascata em Python](#examples-python-tumbling)
+ [Exemplo: criação de uma janela deslizante em Python](#examples-python-sliding)
+ [Exemplo: envie dados de transmissão para o Amazon S3 em Python](#examples-python-s3)

#### Exemplo: criação de uma janela em cascata em Python
<a name="examples-python-tumbling"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

Neste exercício, você cria um aplicativo Python Managed Service for Apache Flink que agrega dados usando uma janela em cascata. 

**nota**  
Para configurar os pré-requisitos necessários para este exercício, primeiro conclua o exercício [Tutorial: introdução ao uso do Python no Managed Service for Apache Flink](gs-python.md).

**Topics**
+ [Crie recursos dependentes](#examples-python-tumbling-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-python-tumbling-write)
+ [Baixe e examine o código do aplicativo](#examples-python-tumbling-download)
+ [Comprima e faça upload do código Python de transmissão do Apache Flink](#examples-python-tumbling-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-python-tumbling-create-run)
+ [Limpe AWS os recursos](#examples-python-tumbling-cleanup)

##### Crie recursos dependentes
<a name="examples-python-tumbling-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-python-tumbling-write"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo para o aplicativo processar.

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

**nota**  
O script do Python nesta seção usa o AWS CLI. Você deve configurar seu AWS CLI para usar as credenciais da sua conta e a região padrão. Para configurar seu AWS CLI, digite o seguinte:  

```
aws configure
```

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

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.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-python-tumbling-download"></a>

O código do aplicativo Python 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/python/TumblingWindow`.

O código do aplicativo está localizado no arquivo `tumbling-windows.py`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa uma origem de tabela do Kinesis para ler o fluxo de origem. O trecho a seguir chama a função `create_table` para criar a origem de tabela Kinesis:

  ```
  table_env.execute_sql(
          create_input_table(input_table_name, input_stream, input_region, stream_initpos)
      )
  ```

  A função `create_table` usa um comando SQL para criar uma tabela que é apoiada pela origem de transmissão:

  ```
  def create_input_table(table_name, stream_name, region, stream_initpos):
      return """ CREATE TABLE {0} (
                  ticker VARCHAR(6),
                  price DOUBLE,
                  event_time TIMESTAMP(3),
                  WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
                )
                PARTITIONED BY (ticker)
                WITH (
                  'connector' = 'kinesis',
                  'stream' = '{1}',
                  'aws.region' = '{2}',
                  'scan.stream.initpos' = '{3}',
                  'format' = 'json',
                  'json.timestamp-format.standard' = 'ISO-8601'
                ) """.format(table_name, stream_name, region, stream_initpos)
  ```
+ O aplicativo usa o operador `Tumble` para agregar registros em uma janela em cascata especificada e retornar os registros agregados como um objeto de tabela:

  ```
  tumbling_window_table = (
          input_table.window(
              Tumble.over("10.seconds").on("event_time").alias("ten_second_window")
          )
          .group_by("ticker, ten_second_window")
          .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
  ```
+ O aplicativo usa o conector Kinesis Flink, do [https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2).

##### Comprima e faça upload do código Python de transmissão do Apache Flink
<a name="examples-python-tumbling-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-python-tumbling-resources).

1. Use seu aplicativo de compressão preferido para comprimir os arquivos `tumbling-windows.py` e `flink-sql-connector-kinesis-1.15.2.jar`. Nomeie o arquivo como `myapp.zip`.

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 `myapp.zip`, 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-python-tumbling-create-run"></a>

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

##### Criar a aplicação
<a name="examples-python-tumbling-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**  
O Managed Service for Apache Flink usa o Apache Flink versão 1.15.2.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="examples-python-tumbling-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 **myapp.zip**.

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. Em **Propriedades**, selecione **Adicionar grupo**. 

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

   Selecione **Save** (Salvar).

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. 

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

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. Em **ID do grupo**, digite **kinesis.analytics.flink.run.options**. Esse grupo de propriedades especiais informa ao aplicativo onde encontrar seus recursos de código. Para obter mais informações, consulte [Especifique seus arquivos de código](how-python-creating.md#how-python-creating-code).

1. Insira o seguinte:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.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.

##### Editar a política do IAM
<a name="examples-python-tumbling-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>/myapp.zip"
               ]
           },
           {
               "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"
           }
       ]
   }
   ```

------

##### Execute o aplicativo
<a name="examples-python-tumbling-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-python-tumbling-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-python-tumbling-cleanup-app)
+ [Exclua seus fluxos de dados do Kinesis](#examples-python-tumbling-cleanup-stream)
+ [Excluir objeto e bucket do Amazon S3](#examples-python-tumbling-cleanup-s3)
+ [Exclua seus recursos do IAM](#examples-python-tumbling-cleanup-iam)
+ [Exclua seus CloudWatch recursos](#examples-python-tumbling-cleanup-cw)

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-python-tumbling-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-python-tumbling-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-python-tumbling-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-python-tumbling-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-python-tumbling-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.

#### Exemplo: criação de uma janela deslizante em Python
<a name="examples-python-sliding"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

**nota**  
Para configurar os pré-requisitos necessários para este exercício, primeiro conclua o exercício [Tutorial: introdução ao uso do Python no Managed Service for Apache Flink](gs-python.md).

**Topics**
+ [Crie recursos dependentes](#examples-python-sliding-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-python-sliding-write)
+ [Baixe e examine o código do aplicativo](#examples-python-sliding-download)
+ [Comprima e faça upload do código Python de transmissão do Apache Flink](#examples-python-sliding-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-python-sliding-create-run)
+ [Limpe AWS os recursos](#examples-python-sliding-cleanup)

##### Crie recursos dependentes
<a name="examples-python-sliding-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-python-sliding-write"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo para o aplicativo processar.

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

**nota**  
O script do Python nesta seção usa o AWS CLI. Você deve configurar seu AWS CLI para usar as credenciais da sua conta e a região padrão. Para configurar seu AWS CLI, digite o seguinte:  

```
aws configure
```

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

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.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-python-sliding-download"></a>

O código do aplicativo Python 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-java-examples
   ```

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

O código do aplicativo está localizado no arquivo `sliding-windows.py`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa uma origem de tabela do Kinesis para ler o fluxo de origem. O trecho a seguir chama a função `create_input_table` para criar a origem de tabela Kinesis:

  ```
  table_env.execute_sql(
          create_input_table(input_table_name, input_stream, input_region, stream_initpos)
      )
  ```

  A função `create_input_table` usa um comando SQL para criar uma tabela que é apoiada pela origem de transmissão:

  ```
  def create_input_table(table_name, stream_name, region, stream_initpos):
      return """ CREATE TABLE {0} (
                  ticker VARCHAR(6),
                  price DOUBLE,
                  event_time TIMESTAMP(3),
                  WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
                )
                PARTITIONED BY (ticker)
                WITH (
                  'connector' = 'kinesis',
                  'stream' = '{1}',
                  'aws.region' = '{2}',
                  'scan.stream.initpos' = '{3}',
                  'format' = 'json',
                  'json.timestamp-format.standard' = 'ISO-8601'
                ) """.format(table_name, stream_name, region, stream_initpos)
   }
  ```
+ O aplicativo usa o operador `Slide` para agregar registros em uma janela deslizante especificada e retornar os registros agregados como um objeto de tabela:

  ```
  sliding_window_table = (
          input_table
              .window(
                  Slide.over("10.seconds")
                  .every("5.seconds")
                  .on("event_time")
                  .alias("ten_second_window")
              )
              .group_by("ticker, ten_second_window")
              .select("ticker, price.min as price, to_string(ten_second_window.end) as event_time")
      )
  ```
+ [O aplicativo usa o conector Kinesis Flink, do arquivo -1.15.2.jar. flink-sql-connector-kinesis](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2)

##### Comprima e faça upload do código Python de transmissão do Apache Flink
<a name="examples-python-sliding-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-python-sliding-resources).

Esta seção descreve como empacotar seu aplicativo Python.

1. Use seu aplicativo de compressão preferido para comprimir os arquivos `sliding-windows.py` e `flink-sql-connector-kinesis-1.15.2.jar`. Nomeie o arquivo como `myapp.zip`.

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 `myapp.zip`, 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-python-sliding-create-run"></a>

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

##### Criar a aplicação
<a name="examples-python-sliding-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**  
O Managed Service for Apache Flink usa o Apache Flink versão 1.15.2.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="examples-python-sliding-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 **myapp.zip**.

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. Em **Propriedades**, selecione **Adicionar grupo**. 

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)

   Selecione **Save** (Salvar).

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. 

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. Em **ID do grupo**, digite **kinesis.analytics.flink.run.options**. Esse grupo de propriedades especiais informa ao aplicativo onde encontrar seus recursos de código. Para obter mais informações, consulte [Especifique seus arquivos de código](how-python-creating.md#how-python-creating-code).

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.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.

##### Editar a política do IAM
<a name="examples-python-sliding-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>/myapp.zip"
               ]
           },
           {
               "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"
           }
       ]
   }
   ```

------

##### Execute o aplicativo
<a name="examples-python-sliding-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-python-sliding-cleanup"></a>

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

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

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-python-sliding-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-python-sliding-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-python-sliding-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-python-sliding-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-python-sliding-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.

#### Exemplo: envie dados de transmissão para o Amazon S3 em Python
<a name="examples-python-s3"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

Neste exercício, você cria um aplicativo Managed Service for Apache Flink em Python que transmite dados para um coletor do Amazon Simple Storage Service. 

**nota**  
Para configurar os pré-requisitos necessários para este exercício, primeiro conclua o exercício [Tutorial: introdução ao uso do Python no Managed Service for Apache Flink](gs-python.md).

**Topics**
+ [Crie recursos dependentes](#examples-python-s3-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-python-s3-write)
+ [Baixe e examine o código do aplicativo](#examples-python-s3-download)
+ [Comprima e faça upload do código Python de transmissão do Apache Flink](#examples-python-s3-upload)
+ [Criar e executar a aplicação do Managed Service for Apache Flink](#examples-python-s3-create-run)
+ [Limpe AWS os recursos](#examples-python-s3-cleanup)

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

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

**nota**  
O Managed Service for Apache Flink não pode gravar dados no Amazon S3 com a criptografia do lado do servidor habilitada no Managed Service for Apache Flink.

Você pode criar o fluxo de dados do Kinesis e um 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 seu fluxo de dados **ExampleInputStream**.
+ 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-python-s3-write"></a>

Nesta seção, será usado um script Python para gravar registros de amostra no fluxo para o aplicativo processar.

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

**nota**  
O script do Python nesta seção usa o AWS CLI. Você deve configurar seu AWS CLI para usar as credenciais da sua conta e a região padrão. Para configurar seu AWS CLI, digite o seguinte:  

```
aws configure
```

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

   ```
       import datetime
       import json
       import random
       import boto3
   
       STREAM_NAME = "ExampleInputStream"
   
   
       def get_data():
           return {
               'event_time': datetime.datetime.now().isoformat(),
               'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
               'price': round(random.random() * 100, 2)}
   
   
       def generate(stream_name, kinesis_client):
           while True:
               data = get_data()
               print(data)
               kinesis_client.put_record(
                   StreamName=stream_name,
                   Data=json.dumps(data),
                   PartitionKey="partitionkey")
   
   
       if __name__ == '__main__':
           generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
   ```

1. Execute o script `stock.py`: 

   ```
   $ python stock.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-python-s3-download"></a>

O código do aplicativo Python 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/python/S3Sink`.

O código do aplicativo está localizado no arquivo `streaming-file-sink.py`. Observe o seguinte sobre o código do aplicativo:
+ O aplicativo usa uma origem de tabela do Kinesis para ler o fluxo de origem. O trecho a seguir chama a função `create_source_table` para criar a origem de tabela Kinesis:

  ```
  table_env.execute_sql(
          create_source_table(input_table_name, input_stream, input_region, stream_initpos)
      )
  ```

  A função `create_source_table` usa um comando SQL para criar uma tabela que é apoiada pela fonte de streaming

  ```
  import datetime
      import json
      import random
      import boto3
  
      STREAM_NAME = "ExampleInputStream"
  
  
      def get_data():
          return {
              'event_time': datetime.datetime.now().isoformat(),
              'ticker': random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV']),
              'price': round(random.random() * 100, 2)}
  
  
      def generate(stream_name, kinesis_client):
          while True:
              data = get_data()
              print(data)
              kinesis_client.put_record(
                  StreamName=stream_name,
                  Data=json.dumps(data),
                  PartitionKey="partitionkey")
  
  
      if __name__ == '__main__':
          generate(STREAM_NAME, boto3.client('kinesis', region_name='us-west-2'))
  ```
+ O aplicativo usa o conector `filesystem` para enviar registros para um bucket do Amazon S3:

  ```
  def create_sink_table(table_name, bucket_name):
      return """ CREATE TABLE {0} (
                  ticker VARCHAR(6),
                  price DOUBLE,
                  event_time VARCHAR(64)
                )
                PARTITIONED BY (ticker)
                WITH (
                    'connector'='filesystem',
                    'path'='s3a://{1}/',
                    'format'='json',
                    'sink.partition-commit.policy.kind'='success-file',
                    'sink.partition-commit.delay' = '1 min'
                ) """.format(table_name, bucket_name)
  ```
+ [O aplicativo usa o conector Kinesis Flink, do arquivo -1.15.2.jar. flink-sql-connector-kinesis](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2)

##### Comprima e faça upload do código Python de transmissão do Apache Flink
<a name="examples-python-s3-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-python-s3-resources).

1. Use seu aplicativo de compactação preferido para compactar os arquivos `streaming-file-sink.py` e [flink-sql-connector-kinesis-1.15.2.jar](https://mvnrepository.com/artifact/org.apache.flink/flink-sql-connector-kinesis/1.15.2). Nomeie o arquivo como `myapp.zip`.

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 `myapp.zip`, 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-python-s3-create-run"></a>

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

##### Criar a aplicação
<a name="examples-python-s3-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**  
O Managed Service for Apache Flink usa o Apache Flink versão 1.15.2.
   + Deixe o menu suspenso de versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="examples-python-s3-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 **myapp.zip**.

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. Em **Propriedades**, selecione **Adicionar grupo**.

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)

   Selecione **Save** (Salvar).

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. Em **ID do grupo**, digite **kinesis.analytics.flink.run.options**. Esse grupo de propriedades especiais informa ao aplicativo onde encontrar seus recursos de código. Para obter mais informações, consulte [Especifique seus arquivos de código](how-python-creating.md#how-python-creating-code).

1. Insira as seguintes propriedades e valores de aplicativo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.html)

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. Em **ID do grupo**, digite **sink.config.0**. Esse grupo de propriedades especiais informa ao aplicativo onde encontrar seus recursos de código. Para obter mais informações, consulte [Especifique seus arquivos de código](how-python-creating.md#how-python-creating-code).

1. Insira as seguintes propriedades e valores do aplicativo: (*bucket-name*substitua pelo nome real do seu bucket do Amazon S3.)    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/managed-flink/latest/java/earlier.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.

##### Editar a política do IAM
<a name="examples-python-s3-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>/myapp.zip"
               ]
           },
           {
               "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": "WriteObjects",
               "Effect": "Allow",
               "Action": [
                   "s3:Abort*",
                   "s3:DeleteObject*",
                   "s3:GetObject*",
                   "s3:GetBucket*",
                   "s3:List*",
                   "s3:ListBucket",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-<username>",
                   "arn:aws:s3:::ka-app-code-<username>/*"
               ]
           }
       ]
   }
   ```

------

##### Execute o aplicativo
<a name="examples-python-s3-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-python-s3-cleanup"></a>

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

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

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-python-s3-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 seu fluxo de dados do Kinesis
<a name="examples-python-s3-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.

##### Exclua seus objetos e bucket do Amazon S3
<a name="examples-python-s3-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-python-s3-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-python-s3-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.

### Exemplos do Scala
<a name="examples-scala"></a>

Os exemplos a seguir demonstram como criar aplicativos usando o Scala com o Apache Flink.

**Topics**
+ [Exemplo: criação de uma janela em cascata no Scala](#examples-tumbling-scala)
+ [Exemplo: criação de uma janela deslizante em Scala](#examples-sliding-scala)
+ [Exemplo: envie dados de transmissão para o Amazon S3 no Scala](#examples-s3sink-scala)

#### Exemplo: criação de uma janela em cascata no Scala
<a name="examples-tumbling-scala"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

**nota**  
A partir da versão 1.15, o Flink não tem mais o Scala. Agora, os aplicativos podem usar a API Java de qualquer versão do Scala. O Flink ainda usa o Scala em alguns componentes importantes internamente, mas não expõe o Scala no carregador de classes do código do usuário. Por isso, os usuários precisam adicionar dependências do Scala em seus arquivos jar.  
Para obter mais informações sobre as mudanças do Scala no Flink 1.15, consulte [Sem o Scala na versão 1.15](https://flink.apache.org/2022/02/22/scala-free.html).

Neste exercício, você criará um aplicativo de streaming simples que usa o Scala 3.2.0 e a API Java do Flink. DataStream O aplicativo lê os dados do fluxo do Kinesis, os agrega usando janelas deslizantes e grava os resultados no fluxo de saída do Kinesis.

**nota**  
Para configurar os pré-requisitos necessários para este exercício, conclua primeiro o exercício [Introdução (Scala)](https://docs.aws.amazon.com/managed-flink/latest/java/examples-gs-scala.html). 

**Topics**
+ [Baixe e examine o código do aplicativo](#examples-tumbling-scala-download)
+ [Compile e faça o upload do código do aplicativo](#examples-tumbling-scala-upload)
+ [Crie e execute o aplicativo (console)](#scala-7)
+ [Crie e execute o aplicativo (CLI)](#examples-tumbling-scala-create-run-cli)
+ [Atualizar o código do aplicativo](#examples-tumbling-scala-update-app-code)
+ [Limpe AWS os recursos](#examples-tumbling-scala-cleanup)

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

O código do aplicativo Python 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/scala/TumblingWindow`.

Observe o seguinte sobre o código do aplicativo:
+ Um arquivo `build.sbt` contém informações sobre a configuração e as dependências do aplicativo, incluindo as bibliotecas do Managed Service for Apache Flink.
+ O arquivo `BasicStreamingJob.scala` contém o método principal que define a funcionalidade do aplicativo.
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  private def createSource: FlinkKinesisConsumer[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val inputProperties = applicationProperties.get("ConsumerConfigProperties")
  
    new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName),
      new SimpleStringSchema, inputProperties)
  }
  ```

  O aplicativo também usa um coletor do Kinesis para gravar no fluxo de resultados. O trecho a seguir cria o coletor do Kinesis:

  ```
  private def createSink: KinesisStreamsSink[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val outputProperties = applicationProperties.get("ProducerConfigProperties")
  
    KinesisStreamsSink.builder[String]
      .setKinesisClientProperties(outputProperties)
      .setSerializationSchema(new SimpleStringSchema)
      .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName))
      .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode))
      .build
  }
  ```
+ O aplicativo usa o operador de janela para encontrar a contagem de valores para cada símbolo de ação em uma janela em cascata de cinco segundos. O código a seguir cria o operador e envia os dados agregados para um novo coletor de fluxo de dados do Kinesis:

  ```
  environment.addSource(createSource)
    .map { value =>
      val jsonNode = jsonParser.readValue(value, classOf[JsonNode])
      new Tuple2[String, Int](jsonNode.get("ticker").toString, 1)
    }
    .returns(Types.TUPLE(Types.STRING, Types.INT))
    .keyBy(v => v.f0) // Logically partition the stream for each ticker 
    .window(TumblingProcessingTimeWindows.of(Time.seconds(10)))
    .sum(1) // Sum the number of tickers per partition
    .map { value => value.f0 + "," + value.f1.toString + "\n" }
    .sinkTo(createSink)
  ```
+ O aplicativo cria conectores de origem e coletor para acessar recursos externos usando um StreamExecutionEnvironment objeto.
+ O aplicativo cria conectores de origem e de coletores usando propriedades dinâmicas do aplicativo. As propriedades de runtime do aplicativo para ler e configurar os conectores. Para obter mais informações sobre as propriedades de runtime, consulte [Propriedades de runtime](https://docs.aws.amazon.com/managed-flink/latest/java/how-properties.html).

##### Compile e faça o upload do código do aplicativo
<a name="examples-tumbling-scala-upload"></a>

Nesta seção, você compila e faz o upload do código do aplicativo para um bucket do Amazon S3.

**Compilar o código do aplicativo**

Use a ferramenta de construção [SBT](https://www.scala-sbt.org/) para criar o código Scala para o aplicativo. Para instalar o SBT, consulte [Instalar o sbt com a configuração cs](https://www.scala-sbt.org/download.html). Você também precisa instalar o Java Development Kit (JDK). Consulte [Pré-requisitos para concluir os exercícios](https://docs.aws.amazon.com/managed-flink/latest/java/getting-started.html#setting-up-prerequisites).

1. Para usar o seu código de aplicativo, compile-o e empacote-o em um arquivo JAR. Você pode compilar e empacotar seu código com o SBT:

   ```
   sbt assembly
   ```

1. Se o aplicativo for compilado com êxito, o arquivo a seguir é criado:

   ```
   target/scala-3.2.0/tumbling-window-scala-1.0.jar
   ```

**Faça o upload do código Scala do Apache Flink Streaming**

Nesta seção, você cria um bucket do Amazon S3 e faz upload do código do seu aplicativo.

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

1. Selecione **Create bucket** (Criar bucket)

1. Insira `ka-app-code-<username>` no campo **Nome do bucket**. Adicione um sufixo para o nome do bucket, como o nome do usuário, para torná-lo globalmente exclusivo. Selecione **Next** (Próximo).

1. Na etapa **Configurar opções**, mantenha as configurações como estão e selecione **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão e selecione **Próximo**.

1. Selecione **Criar bucket**.

1. Selecione o bucket `ka-app-code-<username>` e, em seguida, selecione **Upload**.

1. Na etapa **Selecionar arquivos**, selecione **Adicionar arquivos**. Navegue até o arquivo `tumbling-window-scala-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.

##### Crie e execute o aplicativo (console)
<a name="scala-7"></a>

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

##### Criar a aplicação
<a name="scala-7-console-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 **Descrição**, insira **My Scala test app**.
   + Em **Runtime**, selecione **Apache Flink**.
   + Deixe a versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="scala-7-console-configure"></a>

Siga o procedimento a seguir para configurar o aplicativo.

**Configurar o aplicativo**

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 **tumbling-window-scala-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. Em **Propriedades**, selecione **Adicionar grupo**. 

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

   Selecione **Save** (Salvar).

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. 

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

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

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

1. Selecione **Atualizar**.

**nota**  
Quando você opta por ativar o CloudWatch registro na Amazon, 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`

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

Edite a política do IAM para adicionar permissões para acessar o bucket do Amazon S3.

**Editar a política do IAM para adicionar permissões do bucket do S3**

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",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/tumbling-window-scala-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "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"
           }
       ]
   }
   ```

------

##### Execute o aplicativo
<a name="scala-7-console-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.

##### Interromper o aplicativo
<a name="scala-7-console-stop"></a>

Para interromper o aplicativo, na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Crie e execute o aplicativo (CLI)
<a name="examples-tumbling-scala-create-run-cli"></a>

Nesta seção, você usa o AWS Command Line Interface para criar e executar o aplicativo Managed Service for Apache Flink. Use o AWS CLI comando *kinesisanalyticsv2* para criar e interagir com o Managed Service para aplicativos Apache Flink.

##### Criação de uma política de permissões
<a name="examples-tumbling-scala-permissions"></a>

**nota**  
Você deve criar uma política de permissões e uma função para o seu aplicativo. Se você não criar esses recursos do IAM, seu aplicativo não poderá acessar seus fluxos de logs e dados. 

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação de ler no fluxo de origem, e outra que concede permissões para ações de gravação no fluxo de coleta. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. Substitua **username** pelo nome de usuário usado para criar o bucket do Amazon S3 e armazenar o código do aplicativo. Substitua o ID da conta nos Amazon Resource Names (ARNs) **(012345678901)** pelo ID da sua conta. A função **MF-stream-rw-role** de execução do serviço deve ser adaptada à função específica do cliente.

```
{
    "ApplicationName": "tumbling_window",
    "ApplicationDescription": "Scala tumbling window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "tumbling-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

##### Criar um perfil do IAM
<a name="examples-tumbling-scala-iam-policy"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo sem permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink permissão para assumir o perfil, e a política de permissões determina o que o serviço pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função. 

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Perfis** e **Criar perfil**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **AWS Serviço**

1. Em **Choose the service that will use this role (Selecionar o serviço que usará esta função)**, selecione **Kinesis**.

1. Em **Selecione seu caso de uso**, selecione **Managed Service for Apache Flink**.

1. Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**. 

    Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, você atualiza as políticas de confiança e de permissões para a função

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, você anexa a política que criou na etapa anterior, [Crie uma política de permissões](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-7-cli-policy).

   1. Na página **Summary (Resumo)**, selecione a guia **Permissions (Permissões)**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior). 

   1. Selecione a política `AKReadSourceStreamWriteSinkStream` e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usa para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Criar o aplicativo
<a name="examples-tumbling-scala-create-application-cli"></a>

Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket (nome do usuário) pelo sufixo que você selecionou na seção anterior. Substitua o ID da conta de exemplo (012345678901) na função de execução do serviço pelo ID da conta. O `ServiceExecutionRole` deve incluir o perfil do usuário do IAM que você criou na seção anterior.

```
"ApplicationName": "tumbling_window",
    "ApplicationDescription": "Scala getting started application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "tumbling-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

Execute o [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html)com a seguinte solicitação para criar o aplicativo:

```
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="examples-tumbling-scala-start"></a>

Nesta seção, a ação [StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {
       "ApplicationName": "tumbling_window",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação `StartApplication` com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="examples-tumbling-scala-stop"></a>

Nesta seção, a ação [StopApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
      "ApplicationName": "tumbling_window"
   }
   ```

1. Execute a ação `StopApplication` com a solicitação anterior para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="examples-tumbling-scala-cw-option"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte [Como configurar o registro de aplicativos](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs.html).

##### Atualizar propriedades do ambiente
<a name="examples-tumbling-scala-update-environment-properties"></a>

Nesta seção, você usa a ação [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) para alterar as propriedades do ambiente do aplicativo sem recompilar o código do aplicativo. Neste exemplo, você altera a região dos fluxos de origem e destino.

**Para atualizar propriedades de ambiente para o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `update_properties_request.json`.

   ```
   {"ApplicationName": "tumbling_window",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleInputStream",
                       "flink.stream.initpos" : "LATEST"
                  }
               },
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleOutputStream"
                  }
               }
            ]
         }
      }
   }
   ```

1. Execute a ação `UpdateApplication` com a solicitação anterior para atualizar as propriedades do ambiente:

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### Atualizar o código do aplicativo
<a name="examples-tumbling-scala-update-app-code"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a ação da [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)CLI.

**nota**  
Para carregar uma nova versão do código do aplicativo com o mesmo nome de arquivo, você deve especificar a nova versão do objeto. Para obter mais informações sobre o uso de versões de objetos do Amazon S3, consulte Como [ativar ou desativar](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html) o controle de versão.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo nome de bucket e objeto do Amazon S3 e a nova versão do objeto. O aplicativo será reiniciado com o novo pacote de código.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (<username>) com o sufixo que você selecionou na seção [Crie recursos dependentes](examples-gs-scala.md#examples-gs-scala-resources).

```
{
    "ApplicationName": "tumbling_window",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "tumbling-window-scala-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

##### Limpe AWS os recursos
<a name="examples-tumbling-scala-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-tumbling-scala-cleanup-app)
+ [Exclua seus fluxos de dados do Kinesis](#examples-tumbling-scala-cleanup-stream)
+ [Excluir objeto e bucket do Amazon S3](#examples-tumbling-scala-cleanup-s3)
+ [Exclua seus recursos do IAM](#examples-tumbling-scala-cleanup-iam)
+ [Exclua seus CloudWatch recursos](#examples-tumbling-scala-cleanup-cw)

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-tumbling-scala-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-tumbling-scala-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-tumbling-scala-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-tumbling-scala-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-tumbling-scala-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.

#### Exemplo: criação de uma janela deslizante em Scala
<a name="examples-sliding-scala"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

**nota**  
A partir da versão 1.15, o Flink não tem mais o Scala. Agora, os aplicativos podem usar a API Java de qualquer versão do Scala. O Flink ainda usa o Scala em alguns componentes importantes internamente, mas não expõe o Scala no carregador de classes do código do usuário. Por isso, os usuários precisam adicionar dependências do Scala em seus arquivos jar.  
Para obter mais informações sobre as mudanças do Scala no Flink 1.15, consulte [Sem o Scala na versão 1.15](https://flink.apache.org/2022/02/22/scala-free.html).

Neste exercício, você criará um aplicativo de streaming simples que usa o Scala 3.2.0 e a API Java do Flink. DataStream O aplicativo lê os dados do fluxo do Kinesis, os agrega usando janelas deslizantes e grava os resultados no fluxo de saída do Kinesis.

**nota**  
Para configurar os pré-requisitos necessários para este exercício, conclua primeiro o exercício [Introdução (Scala)](https://docs.aws.amazon.com/managed-flink/latest/java/examples-gs-scala.html). 

**Topics**
+ [Baixe e examine o código do aplicativo](#examples-sliding-scala-download)
+ [Compile e faça o upload do código do aplicativo](#examples-sliding-scala-upload)
+ [Crie e execute o aplicativo (console)](#scala-7)
+ [Crie e execute o aplicativo (CLI)](#examples-sliding-scala-create-run-cli)
+ [Atualizar o código do aplicativo](#examples-sliding-scala-update-app-code)
+ [Limpe AWS os recursos](#examples-sliding-scala-cleanup)

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

O código do aplicativo Python 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/scala/SlidingWindow`.

Observe o seguinte sobre o código do aplicativo:
+ Um arquivo `build.sbt` contém informações sobre a configuração e as dependências do aplicativo, incluindo as bibliotecas do Managed Service for Apache Flink.
+ O arquivo `BasicStreamingJob.scala` contém o método principal que define a funcionalidade do aplicativo.
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  private def createSource: FlinkKinesisConsumer[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val inputProperties = applicationProperties.get("ConsumerConfigProperties")
  
    new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName),
      new SimpleStringSchema, inputProperties)
  }
  ```

  O aplicativo também usa um coletor do Kinesis para gravar no fluxo de resultados. O trecho a seguir cria o coletor do Kinesis:

  ```
  private def createSink: KinesisStreamsSink[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val outputProperties = applicationProperties.get("ProducerConfigProperties")
  
    KinesisStreamsSink.builder[String]
      .setKinesisClientProperties(outputProperties)
      .setSerializationSchema(new SimpleStringSchema)
      .setStreamName(outputProperties.getProperty(streamNameKey, defaultOutputStreamName))
      .setPartitionKeyGenerator((element: String) => String.valueOf(element.hashCode))
      .build
  }
  ```
+ O aplicativo usa o operador de janela para encontrar a contagem de valores para cada símbolo de ação em uma janela de dez segundos que desliza por cinco segundos. O código a seguir cria o operador e envia os dados agregados para um novo coletor de fluxo de dados do Kinesis:

  ```
  environment.addSource(createSource)
      .map { value =>
        val jsonNode = jsonParser.readValue(value, classOf[JsonNode])
        new Tuple2[String, Double](jsonNode.get("ticker").toString, jsonNode.get("price").asDouble)
      }
      .returns(Types.TUPLE(Types.STRING, Types.DOUBLE))
      .keyBy(v => v.f0) // Logically partition the stream for each word
      .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5)))
      .min(1) // Calculate minimum price per ticker over the window
      .map { value => value.f0 + String.format(",%.2f", value.f1) + "\n" }
      .sinkTo(createSink)
  ```
+ O aplicativo cria conectores de origem e coletor para acessar recursos externos usando um StreamExecutionEnvironment objeto.
+ O aplicativo cria conectores de origem e de coletores usando propriedades dinâmicas do aplicativo. As propriedades de runtime do aplicativo para ler e configurar os conectores. Para obter mais informações sobre as propriedades de runtime, consulte [Propriedades de runtime](https://docs.aws.amazon.com/managed-flink/latest/java/how-properties.html).

##### Compile e faça o upload do código do aplicativo
<a name="examples-sliding-scala-upload"></a>

Nesta seção, você compila e faz o upload do código do aplicativo para um bucket do Amazon S3.

**Compilar o código do aplicativo**

Use a ferramenta de construção [SBT](https://www.scala-sbt.org/) para criar o código Scala para o aplicativo. Para instalar o SBT, consulte [Instalar o sbt com a configuração cs](https://www.scala-sbt.org/download.html). Você também precisa instalar o Java Development Kit (JDK). Consulte [Pré-requisitos para concluir os exercícios](https://docs.aws.amazon.com/managed-flink/latest/java/getting-started.html#setting-up-prerequisites).

1. Para usar o seu código de aplicativo, compile-o e empacote-o em um arquivo JAR. Você pode compilar e empacotar seu código com o SBT:

   ```
   sbt assembly
   ```

1. Se o aplicativo for compilado com êxito, o arquivo a seguir é criado:

   ```
   target/scala-3.2.0/sliding-window-scala-1.0.jar
   ```

**Faça o upload do código Scala do Apache Flink Streaming**

Nesta seção, você cria um bucket do Amazon S3 e faz upload do código do seu aplicativo.

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

1. Selecione **Create bucket** (Criar bucket)

1. Insira `ka-app-code-<username>` no campo **Nome do bucket**. Adicione um sufixo para o nome do bucket, como o nome do usuário, para torná-lo globalmente exclusivo. Selecione **Next** (Próximo).

1. Na etapa **Configurar opções**, mantenha as configurações como estão e selecione **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão e selecione **Próximo**.

1. Selecione **Criar bucket**.

1. Selecione o bucket `ka-app-code-<username>` e, em seguida, selecione **Upload**.

1. Na etapa **Selecionar arquivos**, selecione **Adicionar arquivos**. Navegue até o arquivo `sliding-window-scala-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.

##### Crie e execute o aplicativo (console)
<a name="scala-7"></a>

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

##### Criar a aplicação
<a name="scala-7-console-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 **Descrição**, insira **My Scala test app**.
   + Em **Runtime**, selecione **Apache Flink**.
   + Deixe a versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="scala-7-console-configure"></a>

Siga o procedimento a seguir para configurar o aplicativo.

**Configurar o aplicativo**

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 **sliding-window-scala-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. Em **Propriedades**, selecione **Adicionar grupo**. 

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

   Selecione **Save** (Salvar).

1. Em **Propriedades**, selecione **Adicionar grupo** novamente. 

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

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

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

1. Selecione **Atualizar**.

**nota**  
Quando você opta por ativar o CloudWatch registro na Amazon, 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`

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

Edite a política do IAM para adicionar permissões para acessar o bucket do Amazon S3.

**Editar a política do IAM para adicionar permissões do bucket do S3**

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",
                   "s3:GetObjectVersion"
               ],
               "Resource": [
                   "arn:aws:s3:::ka-app-code-username/sliding-window-scala-1.0.jar"
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "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"
           }
       ]
   }
   ```

------

##### Execute o aplicativo
<a name="scala-7-console-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.

##### Interromper o aplicativo
<a name="scala-7-console-stop"></a>

Para interromper o aplicativo, na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Crie e execute o aplicativo (CLI)
<a name="examples-sliding-scala-create-run-cli"></a>

Nesta seção, você usa o AWS Command Line Interface para criar e executar o aplicativo Managed Service for Apache Flink. Use o AWS CLI comando *kinesisanalyticsv2* para criar e interagir com o Managed Service para aplicativos Apache Flink.

##### Criação de uma política de permissões
<a name="examples-sliding-scala-permissions"></a>

**nota**  
Você deve criar uma política de permissões e uma função para o seu aplicativo. Se você não criar esses recursos do IAM, seu aplicativo não poderá acessar seus fluxos de logs e dados. 

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação de ler no fluxo de origem, e outra que concede permissões para ações de gravação no fluxo de coleta. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. Substitua **username** pelo nome de usuário usado para criar o bucket do Amazon S3 e armazenar o código do aplicativo. Substitua o ID da conta nos Amazon Resource Names (ARNs) **(012345678901)** pelo ID da sua conta.

```
{
    "ApplicationName": "sliding_window",
    "ApplicationDescription": "Scala sliding window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "sliding-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

##### Criar um perfil do IAM
<a name="examples-sliding-scala-iam-policy"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo sem permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink permissão para assumir o perfil, e a política de permissões determina o que o serviço pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função. 

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Perfis** e **Criar perfil**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **AWS Serviço**

1. Em **Choose the service that will use this role (Selecionar o serviço que usará esta função)**, selecione **Kinesis**.

1. Em **Selecione seu caso de uso**, selecione **Managed Service for Apache Flink**.

1. Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**. 

    Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, você atualiza as políticas de confiança e de permissões para a função

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, você anexa a política que criou na etapa anterior, [Crie uma política de permissões](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-7-cli-policy).

   1. Na página **Summary (Resumo)**, selecione a guia **Permissions (Permissões)**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior). 

   1. Selecione a política `AKReadSourceStreamWriteSinkStream` e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usa para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Criar o aplicativo
<a name="examples-sliding-scala-create-application-cli"></a>

Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket (nome do usuário) pelo sufixo que você selecionou na seção anterior. Substitua o ID da conta de exemplo (012345678901) na função de execução do serviço pelo ID da conta.

```
{
    "ApplicationName": "sliding_window",
    "ApplicationDescription": "Scala sliding_window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "sliding-window-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleOutputStream"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

Execute o [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html)com a seguinte solicitação para criar o aplicativo:

```
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="examples-sliding-scala-start"></a>

Nesta seção, a ação [StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {
       "ApplicationName": "sliding_window",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação `StartApplication` com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="examples-sliding-scala-stop"></a>

Nesta seção, a ação [StopApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
      "ApplicationName": "sliding_window"
   }
   ```

1. Execute a ação `StopApplication` com a solicitação anterior para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="examples-sliding-scala-cw-option"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte [Como configurar o registro de aplicativos](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs.html).

##### Atualizar propriedades do ambiente
<a name="examples-sliding-scala-update-environment-properties"></a>

Nesta seção, você usa a ação [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) para alterar as propriedades do ambiente do aplicativo sem recompilar o código do aplicativo. Neste exemplo, você altera a região dos fluxos de origem e destino.

**Para atualizar propriedades de ambiente para o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `update_properties_request.json`.

   ```
   {"ApplicationName": "sliding_window",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleInputStream",
                       "flink.stream.initpos" : "LATEST"
                  }
               },
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleOutputStream"
                  }
               }
            ]
         }
      }
   }
   ```

1. Execute a ação `UpdateApplication` com a solicitação anterior para atualizar as propriedades do ambiente:

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### Atualizar o código do aplicativo
<a name="examples-sliding-scala-update-app-code"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a ação da [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)CLI.

**nota**  
Para carregar uma nova versão do código do aplicativo com o mesmo nome de arquivo, você deve especificar a nova versão do objeto. Para obter mais informações sobre o uso de versões de objetos do Amazon S3, consulte Como [ativar ou desativar](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html) o controle de versão.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo nome de bucket e objeto do Amazon S3 e a nova versão do objeto. O aplicativo será reiniciado com o novo pacote de código.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (<username>) com o sufixo que você selecionou na seção [Crie recursos dependentes](examples-gs-scala.md#examples-gs-scala-resources).

```
{
    "ApplicationName": "sliding_window",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

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

Esta seção inclui procedimentos para limpar AWS recursos criados no tutorial da janela deslizante.

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

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-sliding-scala-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-sliding-scala-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-sliding-scala-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-sliding-scala-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-sliding-scala-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.

#### Exemplo: envie dados de transmissão para o Amazon S3 no Scala
<a name="examples-s3sink-scala"></a>

**nota**  
Para obter exemplos atuais, consulte [Exemplos de como criar e trabalhar com aplicativos no Managed Service for Apache Flink.](examples-collapsibles.md).

**nota**  
A partir da versão 1.15, o Flink não tem mais o Scala. Agora, os aplicativos podem usar a API Java de qualquer versão do Scala. O Flink ainda usa o Scala em alguns componentes importantes internamente, mas não expõe o Scala no carregador de classes do código do usuário. Por isso, os usuários precisam adicionar dependências do Scala em seus arquivos jar.  
Para obter mais informações sobre as mudanças do Scala no Flink 1.15, consulte [Sem o Scala na versão 1.15](https://flink.apache.org/2022/02/22/scala-free.html).

Neste exercício, você criará um aplicativo de streaming simples que usa o Scala 3.2.0 e a API Java do Flink. DataStream O aplicativo lê os dados do fluxo do Kinesis, os agrega usando janelas deslizantes e grava os resultados no S3.

**nota**  
Para configurar os pré-requisitos necessários para este exercício, conclua primeiro o exercício [Introdução (Scala)](https://docs.aws.amazon.com/managed-flink/latest/java/examples-gs-scala.html). *Você só precisa criar uma pasta adicional **data/** no bucket ka-app-code do Amazon S3 -.* <username> 

**Topics**
+ [Baixe e examine o código do aplicativo](#examples-s3sink-scala-download)
+ [Compile e faça o upload do código do aplicativo](#examples-s3sink-scala-upload)
+ [Crie e execute o aplicativo (console)](#scala-7)
+ [Crie e execute o aplicativo (CLI)](#examples-s3sink-scala-create-run-cli)
+ [Atualizar o código do aplicativo](#examples-s3sink-scala-update-app-code)
+ [Limpe AWS os recursos](#examples-s3sink-scala-cleanup)

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

O código do aplicativo Python 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/scala/S3Sink`.

Observe o seguinte sobre o código do aplicativo:
+ Um arquivo `build.sbt` contém informações sobre a configuração e as dependências do aplicativo, incluindo as bibliotecas do Managed Service for Apache Flink.
+ O arquivo `BasicStreamingJob.scala` contém o método principal que define a funcionalidade do aplicativo.
+ O aplicativo usa uma origem do Kinesis para ler o fluxo de origem. O trecho a seguir cria a origem do Kinesis:

  ```
  private def createSource: FlinkKinesisConsumer[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val inputProperties = applicationProperties.get("ConsumerConfigProperties")
  
    new FlinkKinesisConsumer[String](inputProperties.getProperty(streamNameKey, defaultInputStreamName),
      new SimpleStringSchema, inputProperties)
  }
  ```

  O aplicativo também usa StreamingFileSink a para gravar em um bucket do Amazon S3: `

  ```
  def createSink: StreamingFileSink[String] = {
    val applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties
    val s3SinkPath = applicationProperties.get("ProducerConfigProperties").getProperty("s3.sink.path")
  
    StreamingFileSink
      .forRowFormat(new Path(s3SinkPath), new SimpleStringEncoder[String]("UTF-8"))
      .build()
  }
  ```
+ O aplicativo cria conectores de origem e coletor para acessar recursos externos usando um StreamExecutionEnvironment objeto.
+ O aplicativo cria conectores de origem e de coletores usando propriedades dinâmicas do aplicativo. As propriedades de runtime do aplicativo para ler e configurar os conectores. Para obter mais informações sobre as propriedades de runtime, consulte [Propriedades de runtime](https://docs.aws.amazon.com/managed-flink/latest/java/how-properties.html).

##### Compile e faça o upload do código do aplicativo
<a name="examples-s3sink-scala-upload"></a>

Nesta seção, você compila e faz o upload do código do aplicativo para um bucket do Amazon S3.

**Compilar o código do aplicativo**

Use a ferramenta de construção [SBT](https://www.scala-sbt.org/) para criar o código Scala para o aplicativo. Para instalar o SBT, consulte [Instalar o sbt com a configuração cs](https://www.scala-sbt.org/download.html). Você também precisa instalar o Java Development Kit (JDK). Consulte [Pré-requisitos para concluir os exercícios](https://docs.aws.amazon.com/managed-flink/latest/java/getting-started.html#setting-up-prerequisites).

1. Para usar o seu código de aplicativo, compile-o e empacote-o em um arquivo JAR. Você pode compilar e empacotar seu código com o SBT:

   ```
   sbt assembly
   ```

1. Se o aplicativo for compilado com êxito, o arquivo a seguir é criado:

   ```
   target/scala-3.2.0/s3-sink-scala-1.0.jar
   ```

**Faça o upload do código Scala do Apache Flink Streaming**

Nesta seção, você cria um bucket do Amazon S3 e faz upload do código do seu aplicativo.

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

1. Selecione **Create bucket** (Criar bucket)

1. Insira `ka-app-code-<username>` no campo **Nome do bucket**. Adicione um sufixo para o nome do bucket, como o nome do usuário, para torná-lo globalmente exclusivo. Selecione **Next** (Próximo).

1. Na etapa **Configurar opções**, mantenha as configurações como estão e selecione **Próximo**.

1. Na etapa **Definir permissões**, mantenha as configurações como estão e selecione **Próximo**.

1. Selecione **Criar bucket**.

1. Selecione o bucket `ka-app-code-<username>` e, em seguida, selecione **Upload**.

1. Na etapa **Selecionar arquivos**, selecione **Adicionar arquivos**. Navegue até o arquivo `s3-sink-scala-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.

##### Crie e execute o aplicativo (console)
<a name="scala-7"></a>

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

##### Criar a aplicação
<a name="scala-7-console-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 **Descrição**, insira **My java test app**.
   + Em **Runtime**, selecione **Apache Flink**.
   + Deixe a versão como **Apache Flink versão 1.15.2 (versão recomendada)**.

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: `kinesisanalytics-MyApplication-us-west-2`

##### Configure o aplicativo
<a name="scala-7-console-configure"></a>

Siga o procedimento a seguir para configurar o aplicativo.

**Configurar o aplicativo**

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 **s3-sink-scala-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. Em **Propriedades**, selecione **Adicionar grupo**. 

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

   Selecione **Save** (Salvar).

1. Em **Propriedades**, selecione **Adicionar grupo**. 

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

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

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

1. Selecione **Atualizar**.

**nota**  
Quando você opta por ativar o CloudWatch registro na Amazon, 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`

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

Edite a política do IAM para adicionar permissões para acessar o bucket do Amazon S3.

**Editar a política do IAM para adicionar permissões do bucket do S3**

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:Abort*", 
                   "s3:DeleteObject*", 
                   "s3:GetObject*", 
                   "s3:GetBucket*", 
                   "s3:List*", 
                   "s3:ListBucket", 
                   "s3:PutObject"
               ],
               "Resource": [ 
                   "arn:aws:s3:::ka-app-code-<username>", 
                   "arn:aws:s3:::ka-app-code-<username>/*" 
               ]
           },
           {
               "Sid": "DescribeLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "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": "ReadInputStream",
               "Effect": "Allow",
               "Action": "kinesis:*",
               "Resource": "arn:aws:kinesis:us-west-2:012345678901:stream/ExampleInputStream"
           }
       ]
   }
   ```

------

##### Execute o aplicativo
<a name="scala-7-console-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.

##### Interromper o aplicativo
<a name="scala-7-console-stop"></a>

Para interromper o aplicativo, na **MyApplication**página, escolha **Parar**. Confirme a ação.

##### Crie e execute o aplicativo (CLI)
<a name="examples-s3sink-scala-create-run-cli"></a>

Nesta seção, você usa o AWS Command Line Interface para criar e executar o aplicativo Managed Service for Apache Flink. Use o AWS CLI comando *kinesisanalyticsv2* para criar e interagir com o Managed Service para aplicativos Apache Flink.

##### Criação de uma política de permissões
<a name="examples-s3sink-scala-permissions"></a>

**nota**  
Você deve criar uma política de permissões e uma função para o seu aplicativo. Se você não criar esses recursos do IAM, seu aplicativo não poderá acessar seus fluxos de logs e dados. 

Primeiro, crie uma política de permissões com duas instruções: uma que concede permissões para a ação de ler no fluxo de origem, e outra que concede permissões para ações de gravação no fluxo de coleta. Em seguida, anexe a política a um perfil do IAM (que será criado na próxima seção). Assim, ao assumir o perfil, o serviço Managed Service for Apache Flink terá as permissões necessárias para ler o fluxo de origem e gravar no fluxo de coleta.

Use o código a seguir para criar a política de permissões `AKReadSourceStreamWriteSinkStream`. Substitua **username** pelo nome de usuário usado para criar o bucket do Amazon S3 e armazenar o código do aplicativo. Substitua o ID da conta nos Amazon Resource Names (ARNs) **(012345678901)** pelo ID da sua conta.

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

****  

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

------

Para step-by-step obter instruções sobre como criar uma política de permissões, consulte [Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) no *Guia do usuário do IAM*.

##### Criar um perfil do IAM
<a name="examples-s3sink-scala-iam-policy"></a>

Nesta seção, você cria um perfil do IAM que o aplicativo Managed Service for Apache Flink pode assumir para ler um fluxo de origem e gravar no fluxo de coleta.

O Managed Service for Apache Flink não pode acessar seu fluxo sem permissões. Essas permissões são concedidas usando um perfil do IAM. Cada perfil do IAM tem duas políticas anexadas. A política de confiança concede ao Managed Service for Apache Flink permissão para assumir o perfil, e a política de permissões determina o que o serviço pode fazer depois de assumir a função.

Anexe a política de permissões que criou na seção anterior a essa função. 

**Para criar uma perfil do IAM**

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

1. No painel de navegação, selecione **Perfis** e **Criar perfil**.

1. Em **Selecionar tipo de identidade de confiança**, selecione **AWS Serviço**

1. Em **Choose the service that will use this role (Selecionar o serviço que usará esta função)**, selecione **Kinesis**.

1. Em **Selecione seu caso de uso**, selecione **Managed Service for Apache Flink**.

1. Selecione **Next: Permissions** (Próximo: permissões).

1. Na página **Attach permissions policies**, selecione **Next: Review**. É possível anexar políticas de permissões depois de criar a função.

1. Na página **Criar função**, insira **MF-stream-rw-role** para o **Nome da função**. Selecione **Criar função**. 

    Foi criado um perfil do IAM chamado `MF-stream-rw-role`. Em seguida, você atualiza as políticas de confiança e de permissões para a função

1. Anexe a política de permissões à função.
**nota**  
Para este exercício, o Managed Service for Apache Flink assume esse perfil para ler dados de um fluxo de dados do Kinesis (origem) e gravar a saída em outro fluxo de dados do Kinesis. Depois, você anexa a política que criou na etapa anterior, [Crie uma política de permissões](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-7-cli-policy).

   1. Na página **Summary (Resumo)**, selecione a guia **Permissions (Permissões)**.

   1. Selecione **Attach Policies**.

   1. Na caixa de pesquisa, insira **AKReadSourceStreamWriteSinkStream** (a política criada na seção anterior). 

   1. Selecione a política `AKReadSourceStreamWriteSinkStream` e selecione **Anexar política**.

Agora você criou a função de execução de serviço que seu aplicativo usa para acessar os recursos. Anote o ARN da nova função.

Para step-by-step obter instruções sobre como criar uma função, consulte [Como criar uma função do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) no *Guia do usuário do IAM*.

##### Criar o aplicativo
<a name="examples-s3sink-scala-create-application-cli"></a>

Salve o seguinte código JSON em um arquivo chamado `create_request.json`. Substitua o ARN da função de amostra pelo ARN da função criada anteriormente. Substitua o sufixo do ARN do bucket (nome do usuário) pelo sufixo que você selecionou na seção anterior. Substitua o ID da conta de exemplo (012345678901) na função de execução do serviço pelo ID da conta.

```
{
    "ApplicationName": "s3_sink",
    "ApplicationDescription": "Scala tumbling window application",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::012345678901:role/MF-stream-rw-role",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation": {
                    "BucketARN": "arn:aws:s3:::ka-app-code-username",
                    "FileKey": "s3-sink-scala-1.0.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        },
        "EnvironmentProperties":  { 
         "PropertyGroups": [ 
            { 
               "PropertyGroupId": "ConsumerConfigProperties",
               "PropertyMap" : {
                    "aws.region" : "us-west-2",
                    "stream.name" : "ExampleInputStream",
                    "flink.stream.initpos" : "LATEST"
               }
            },
            { 
               "PropertyGroupId": "ProducerConfigProperties",
               "PropertyMap" : {
                    "s3.sink.path" : "s3a://ka-app-code-<username>/data"
               }
            }
         ]
      }
    },
    "CloudWatchLoggingOptions": [ 
      { 
         "LogStreamARN": "arn:aws:logs:us-west-2:012345678901:log-group:MyApplication:log-stream:kinesis-analytics-log-stream"
      }
   ]
}
```

Execute o [CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html)com a seguinte solicitação para criar o aplicativo:

```
aws kinesisanalyticsv2 create-application --cli-input-json file://create_request.json
```

O aplicativo agora é criado. Inicie o aplicativo na próxima etapa.

##### Iniciar o aplicativo
<a name="examples-s3sink-scala-start"></a>

Nesta seção, a ação [StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html) será usada para iniciar o aplicativo.

**Para iniciar o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `start_request.json`.

   ```
   {{
       "ApplicationName": "s3_sink",
       "RunConfiguration": {
           "ApplicationRestoreConfiguration": { 
            "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"
            }
       }
   }
   ```

1. Execute a ação `StartApplication` com a solicitação anterior para iniciar o aplicativo:

   ```
   aws kinesisanalyticsv2 start-application --cli-input-json file://start_request.json
   ```

O aplicativo agora está em execução. Você pode verificar as métricas do Managed Service for Apache Flink no CloudWatch console da Amazon para verificar se o aplicativo está funcionando.

##### Interromper o aplicativo
<a name="examples-s3sink-scala-stop"></a>

Nesta seção, a ação [StopApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StopApplication.html) será usada para interromper o aplicativo.

**Como interromper o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `stop_request.json`.

   ```
   {
      "ApplicationName": "s3_sink"
   }
   ```

1. Execute a ação `StopApplication` com a solicitação anterior para interromper o aplicativo:

   ```
   aws kinesisanalyticsv2 stop-application --cli-input-json file://stop_request.json
   ```

O aplicativo agora está interrompido.

##### Adicionar uma opção de CloudWatch registro
<a name="examples-s3sink-scala-cw-option"></a>

Você pode usar o AWS CLI para adicionar um stream de CloudWatch log da Amazon ao seu aplicativo. Para obter informações sobre como usar o CloudWatch Logs com seu aplicativo, consulte [Como configurar o registro de aplicativos](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs.html).

##### Atualizar propriedades do ambiente
<a name="examples-s3sink-scala-update-environment-properties"></a>

Nesta seção, você usa a ação [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) para alterar as propriedades do ambiente do aplicativo sem recompilar o código do aplicativo. Neste exemplo, você altera a região dos fluxos de origem e destino.

**Para atualizar propriedades de ambiente para o aplicativo**

1. Salve o seguinte código JSON em um arquivo chamado `update_properties_request.json`.

   ```
   {"ApplicationName": "s3_sink",
      "CurrentApplicationVersionId": 1,
      "ApplicationConfigurationUpdate": { 
         "EnvironmentPropertyUpdates": { 
            "PropertyGroups": [ 
               { 
                  "PropertyGroupId": "ConsumerConfigProperties",
                  "PropertyMap" : {
                       "aws.region" : "us-west-2",
                       "stream.name" : "ExampleInputStream",
                       "flink.stream.initpos" : "LATEST"
                  }
               },
               { 
                  "PropertyGroupId": "ProducerConfigProperties",
                  "PropertyMap" : {
                       "s3.sink.path" : "s3a://ka-app-code-<username>/data"
                  }
               }
            ]
         }
      }
   }
   ```

1. Execute a ação `UpdateApplication` com a solicitação anterior para atualizar as propriedades do ambiente:

   ```
   aws kinesisanalyticsv2 update-application --cli-input-json file://update_properties_request.json
   ```

##### Atualizar o código do aplicativo
<a name="examples-s3sink-scala-update-app-code"></a>

Quando precisar atualizar o código do aplicativo com uma nova versão do pacote de código, use a ação da [UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)CLI.

**nota**  
Para carregar uma nova versão do código do aplicativo com o mesmo nome de arquivo, você deve especificar a nova versão do objeto. Para obter mais informações sobre o uso de versões de objetos do Amazon S3, consulte Como [ativar ou desativar](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html) o controle de versão.

Para usar o AWS CLI, exclua seu pacote de código anterior do bucket do Amazon S3, faça o upload da nova versão e ligue`UpdateApplication`, especificando o mesmo nome de bucket e objeto do Amazon S3 e a nova versão do objeto. O aplicativo será reiniciado com o novo pacote de código.

O exemplo de solicitação da `UpdateApplication` ação a seguir recarrega o código do aplicativo e reinicia o aplicativo. Atualize o `CurrentApplicationVersionId` para a versão atual do aplicativo. Você pode verificar a versão atual do aplicativo usando as ações `DescribeApplication` ou `ListApplications`. Atualize o sufixo do nome do bucket (<username>) com o sufixo que você selecionou na seção [Crie recursos dependentes](examples-gs-scala.md#examples-gs-scala-resources).

```
{
    "ApplicationName": "s3_sink",
    "CurrentApplicationVersionId": 1,
    "ApplicationConfigurationUpdate": {
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "BucketARNUpdate": "arn:aws:s3:::ka-app-code-username",
                    "FileKeyUpdate": "s3-sink-scala-1.0.jar",
                    "ObjectVersionUpdate": "SAMPLEUehYngP87ex1nzYIGYgfhypvDU"
                }
            }
        }
    }
}
```

##### Limpe AWS os recursos
<a name="examples-s3sink-scala-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-s3sink-scala-cleanup-app)
+ [Exclua seus fluxos de dados do Kinesis](#examples-s3sink-scala-cleanup-stream)
+ [Excluir objeto e bucket do Amazon S3](#examples-s3sink-scala-cleanup-s3)
+ [Exclua seus recursos do IAM](#examples-s3sink-scala-cleanup-iam)
+ [Exclua seus CloudWatch recursos](#examples-s3sink-scala-cleanup-cw)

##### Exclua o seu aplicativo Managed Service for Apache Flink
<a name="examples-s3sink-scala-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-s3sink-scala-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-s3sink-scala-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-s3sink-scala-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-s3sink-scala-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.