

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

# Conceitos básicos (Scala)
<a name="examples-gs-scala"></a>

**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, você deve adicionar dependências do Scala ao seu. JAR-archives  
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ê cria um aplicativo do Managed Service for Apache Flink para o Scala com fluxos do Kinesis como fonte e coletor. 

**Topics**
+ [Crie recursos dependentes](#examples-gs-scala-resources)
+ [Gravação de registros de amostra no fluxo de entrada](#examples-gs-scala-write)
+ [Baixe e examine o código do aplicativo](#examples-gs-scala-download)
+ [Compile e faça o upload do código do aplicativo](#examples-gs-scala-upload)
+ [Crie e execute o aplicativo (console)](gs-scala-7.md)
+ [Crie e execute o aplicativo (CLI)](examples-gs-scala-create-run-cli.md)
+ [Limpe AWS os recursos](examples-gs-scala-cleanup.md)

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

Antes de criar um aplicativo Managed Service for Apache Flink para este exercício, você cria os seguintes recursos dependentes: 
+ Duas transmissões do Kinesis para entrada e saída.
+ 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**.

  Como criar os fluxos de dados (AWS CLI)
  + Para criar o primeiro stream (`ExampleInputStream`), use o seguinte comando AWS CLI create-stream do Amazon Kinesis.

    ```
    aws kinesis create-stream \
        --stream-name ExampleInputStream \
        --shard-count 1 \
        --region us-west-2 \
        --profile adminuser
    ```
  + 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
    ```
+ 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>}}**.

**Outros recursos**

Quando você cria seu aplicativo, o Managed Service for Apache Flink cria os seguintes CloudWatch recursos da Amazon, 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-gs-scala-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-gs-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/GettingStarted`.

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 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-gs-scala-upload"></a>

Nesta seção, você compila e carrega o código do seu aplicativo no bucket do Amazon S3 que você criou na seção [Crie recursos dependentes](#examples-gs-scala-resources).

**Compilar o código do aplicativo**

Nesta seção, você usa a ferramenta de compilação [SBT](https://www.scala-sbt.org/) para criar o código do 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/getting-started-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 `getting-started-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.