

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Création et exécution d'un service géré pour l'application Apache Flink
<a name="get-started-exercise"></a>

Dans cet exercice, vous allez créer une application de service géré pour Apache Flink avec des flux de données comme source et comme récepteur.

**Topics**
+ [Création de deux flux de données Amazon Kinesis](#get-started-exercise-1)
+ [Écriture d’exemples d’enregistrements dans le flux d’entrée](#get-started-exercise-2)
+ [Téléchargez et examinez le code Java de streaming d'Apache Flink](#get-started-exercise-5)
+ [Compilez le code de l'application](#get-started-exercise-5.5)
+ [Téléchargez le code Java de streaming Apache Flink](#get-started-exercise-6)
+ [Création et exécution du service géré pour l'application Apache Flink](#get-started-exercise-7)

## Création de deux flux de données Amazon Kinesis
<a name="get-started-exercise-1"></a>

Avant de créer un Amazon Managed Service pour Apache Flink dans le cadre de cet exercice, créez deux flux de données Kinesis `ExampleInputStream` (`ExampleOutputStream`et). Votre application utilise ces flux pour les flux source et de destination de l’application.

Vous pouvez créer ces flux à l'aide de la console Amazon Kinesis ou de la commande AWS CLI suivante. Pour de plus amples informations, veuillez consulter [Création et mise à jour des flux de données](https://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-streams.html). 

**Pour créer les flux de données (AWS CLI)**

1. Pour créer le premier flux (`ExampleInputStream`), utilisez la commande Amazon Kinesis `create-stream` AWS CLI suivante.

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

1. Pour créer le second flux utilisé par l’application pour écrire la sortie, exécutez la même commande en remplaçant le nom du flux par `ExampleOutputStream`.

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

## Écriture d’exemples d’enregistrements dans le flux d’entrée
<a name="get-started-exercise-2"></a>

Dans cette section, vous utilisez un script Python pour écrire les exemples d’enregistrements dans le flux pour que l’application les traite.

**Note**  
Cette section nécessite le kit [AWS SDK pour Python (Boto)](https://aws.amazon.com/developers/getting-started/python/).

1. Créez un fichier nommé `stock.py` avec le contenu suivant :

   ```
    
   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. Plus loin dans ce didacticiel, vous exécutez le script `stock.py` pour envoyer des données à l’application. 

   ```
   $ python stock.py
   ```

## Téléchargez et examinez le code Java de streaming d'Apache Flink
<a name="get-started-exercise-5"></a>

Le code d'application Java pour ces exemples est disponible sur GitHub. Pour télécharger le code d’application, procédez comme suit :

1. Cloner le référentiel distant à l’aide de la commande suivante :

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

1. Accédez au répertoire `GettingStarted`.

Le code d'application est situé dans les fichiers `CustomSinkStreamingJob.java` et `CloudWatchLogSink.java`. Notez les informations suivantes à propos du code d’application :
+ L'application utilise une source Kinesis pour lire à partir du flux source. L'extrait de code suivant crée le récepteur Kinesis :

  ```
  return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
                  new SimpleStringSchema(), inputProperties));
  ```

## Compilez le code de l'application
<a name="get-started-exercise-5.5"></a>

Dans cette section, vous allez utiliser le compilateur Apache Maven pour créer le code Java pour l’application. Pour obtenir des informations sur l’installation d’Apache Maven et sur le kit de développement Java (JDK), consultez [Conditions préalables pour terminer les exercices](tutorial-stock-data.md#setting-up-prerequisites).

Votre application Java nécessite les composants suivants :
+ Un fichier de [modèle d'objet du projet (pom.xml)](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html). Ce fichier contient des informations sur la configuration et les dépendances de l'application, y compris le service Amazon Managed Service pour les bibliothèques Apache Flink.
+ Une méthode `main` qui contient la logique de l'application.

**Note**  
**Pour utiliser le connecteur Kinesis pour l'application suivante, vous devez télécharger le code source du connecteur et le créer comme décrit dans la documentation [Apache Flink](https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/connectors/kinesis.html).**

**Pour créer et compiler le code d'application**

1. Créez une Java/Maven application dans votre environnement de développement. Pour de plus amples informations sur la création d'une application, veuillez consultez la documentation relative à votre environnement de développement :
   + [Création de votre premier projet Java (Eclipse Java Neon)](https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2FgettingStarted%2Fqs-3.htm) (français non garanti)
   + [Création, exécution et mise en package de votre première application Java (IntelliJ Idea)](https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-application.html) (français non garanti)

1. Utilisez le code suivant dans un fichier nommé `StreamingJob.java`. 

   ```
    
   package com.amazonaws.services.kinesisanalytics;
   
   import com.amazonaws.services.kinesisanalytics.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 java.io.IOException;
   import java.util.Map;
   import java.util.Properties;
   
   public class StreamingJob {
   
       private static final String region = "us-east-1";
       private static final String inputStreamName = "ExampleInputStream";
       private static final String outputStreamName = "ExampleOutputStream";
   
       private static DataStream<String> createSourceFromStaticConfig(StreamExecutionEnvironment env) {
           Properties inputProperties = new Properties();
           inputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region);
           inputProperties.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST");
   
           return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(), inputProperties));
       }
   
       private static DataStream<String> createSourceFromApplicationProperties(StreamExecutionEnvironment env)
               throws IOException {
           Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties();
           return env.addSource(new FlinkKinesisConsumer<>(inputStreamName, new SimpleStringSchema(),
                   applicationProperties.get("ConsumerConfigProperties")));
       }
   
       private static FlinkKinesisProducer<String> createSinkFromStaticConfig() {
           Properties outputProperties = new Properties();
           outputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region);
           outputProperties.setProperty("AggregationEnabled", "false");
   
           FlinkKinesisProducer<String> sink = new FlinkKinesisProducer<>(new SimpleStringSchema(), outputProperties);
           sink.setDefaultStream(outputStreamName);
           sink.setDefaultPartition("0");
           return sink;
       }
   
       private static FlinkKinesisProducer<String> createSinkFromApplicationProperties() throws IOException {
           Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties();
           FlinkKinesisProducer<String> sink = new FlinkKinesisProducer<>(new SimpleStringSchema(),
                   applicationProperties.get("ProducerConfigProperties"));
   
           sink.setDefaultStream(outputStreamName);
           sink.setDefaultPartition("0");
           return sink;
       }
   
       public static void main(String[] args) throws Exception {
           // set up the streaming execution environment
           final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
   
           /*
            * if you would like to use runtime configuration properties, uncomment the
            * lines below
            * DataStream<String> input = createSourceFromApplicationProperties(env);
            */
   
           DataStream<String> input = createSourceFromStaticConfig(env);
   
           /*
            * if you would like to use runtime configuration properties, uncomment the
            * lines below
            * input.addSink(createSinkFromApplicationProperties())
            */
   
           input.addSink(createSinkFromStaticConfig());
   
           env.execute("Flink Streaming Java API Skeleton");
       }
   }
   ```

   Notez les informations suivantes à propos de l'exemple de code précédent :
   + Ce fichier contient la méthode `main` qui définit la fonctionnalité de l'application.
   + Votre application crée les connecteurs source et récepteur pour accéder aux ressources externes à l’aide d’un objet `StreamExecutionEnvironment`. 
   + L’application crée les connecteurs source et récepteur à l’aide de propriétés statiques. Pour utiliser les propriétés de l’application dynamique, utilisez les méthodes `createSourceFromApplicationProperties` et `createSinkFromApplicationProperties` pour créer les connecteurs. Ces méthodes lisent les propriétés de l’application pour configurer les connecteurs.

1. Pour utiliser votre code d’application, vous le compilez et l’intégrez dans un fichier JAR. Vous pouvez compiler et intégrer votre code de deux manières :
   + À l'aide de l'outil de ligne de commande Maven. Créez votre fichier JAR en exécutant la commande suivante dans le répertoire qui contient le fichier `pom.xml` :

     ```
     mvn package
     ```
   + À l’aide de votre environnement de développement. Consultez la documentation de votre environnement de développement pour plus de détails.

   Vous pouvez charger votre package en tant que fichier JAR, ou compresser le package et le charger en tant que fichier ZIP. Si vous créez votre application à l'aide du AWS CLI, vous spécifiez le type de contenu de votre code (JAR ou ZIP).

1. En cas d’erreur lors de la compilation, vérifiez que votre variable d’environnement `JAVA_HOME` est correctement définie.

Si la compilation de l’application aboutit, le fichier suivant est créé :

`target/java-getting-started-1.0.jar`

## Téléchargez le code Java de streaming Apache Flink
<a name="get-started-exercise-6"></a>

Dans cette section, vous allez créer un compartiment Amazon Simple Storage Service (Amazon S3) et charger votre code d'application.

**Pour charger le code d’application**

1. Ouvrez la console Amazon S3 à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Choisissez **Créer un compartiment**.

1. Saisissez **ka-app-code-*<username>*** dans le champ **Nom du compartiment**. Ajoutez un suffixe au nom du compartiment, par exemple votre nom d’utilisateur, pour qu’il soit unique. Choisissez **Suivant**.

1. À l’étape **Configurer les options**, conservez les paramètres, puis choisissez **Suivant**.

1. À l’étape **Définir des autorisations**, conservez les paramètres, puis choisissez **Suivant**.

1. Choisissez **Créer un compartiment**.

1. Dans la console Amazon S3, choisissez le *<username>* compartiment **ka-app-code-**, puis **Upload**.

1. À l’étape **Sélectionner les fichiers**, choisissez **Ajouter des fichiers**. Accédez au fichier `java-getting-started-1.0.jar` que vous avez créé à l’étape précédente. Choisissez **Suivant**.

1. À l'étape **Définir des autorisations**, conservez les paramètres. Choisissez **Suivant**.

1. À l'étape **Définir les propriétés**, conservez les paramètres. Choisissez **Charger**.

Votre code d'application est désormais stocké dans un compartiment Amazon S3 auquel votre application peut accéder.

## Création et exécution du service géré pour l'application Apache Flink
<a name="get-started-exercise-7"></a>

Vous pouvez créer et exécuter une application de service géré pour Apache Flink à l’aide de la console ou de l’interface AWS CLI.

**Note**  
Lorsque vous créez l'application à l'aide de la console, vos ressources Gestion des identités et des accès AWS (IAM) et Amazon CloudWatch Logs sont créées pour vous. Lorsque vous créez l'application à l'aide du AWS CLI, vous créez ces ressources séparément.

**Topics**
+ [Création et exécution de l'application (console)](#get-started-exercise-7-console)
+ [Créez et exécutez l'application (AWS CLI)](#get-started-exercise-7-cli)

### Création et exécution de l'application (console)
<a name="get-started-exercise-7-console"></a>

Suivez ces étapes pour créer, configurer, mettre à jour et exécuter l’application à l’aide de la console.

#### Pour créer l’application
<a name="get-started-exercise-7-console-create"></a>

1. [Ouvrez la console Kinesis à l'adresse /kinesis. https://console.aws.amazon.com](https://console.aws.amazon.com/kinesis)

1. Dans le tableau de bord Amazon Kinesis, choisissez **Création d'une application d'analyse**.

1. Sur la page **Kinesis Analytics - Créer une application**, fournissez les détails de l'application comme suit :
   + Pour **Nom de l’application**, saisissez **MyApplication**.
   + Pour **Description**, saisissez **My java test app**.
   + Pour **Runtime (Exécution)**, choisissez **Apache Flink 1.6**.

1. Pour **Autorisations d’accès**, choisissez **Créer/mettre à jour un rôle IAM) `kinesis-analytics-MyApplication-us-west-2`**.

1. Choisissez **Créer une application**.

**Note**  
Lorsque vous créez une application Amazon Managed Service pour Apache Flink à l'aide de la console, vous avez la possibilité de créer un rôle et une politique IAM pour votre application. Votre application utilise ce rôle et cette politique pour accéder à ses ressources dépendantes. Ces ressources IAM sont nommées en utilisant le nom de votre application et la région, comme suit :  
Stratégie : `kinesis-analytics-service-MyApplication-us-west-2`
Rôle : `kinesis-analytics-MyApplication-us-west-2`

#### Modifier la politique IAM
<a name="get-started-exercise-7-console-iam"></a>

Modifiez la politique IAM pour ajouter des autorisations afin d'accéder aux flux de données Kinesis.

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Choisissez **Stratégies**. Choisissez la politique **`kinesis-analytics-service-MyApplication-us-west-2`** créée pour vous par la console dans la section précédente. 

1. Sur la page **Récapitulatif**, choisissez **Modifier la politique**. Sélectionnez l’onglet **JSON**.

1. Ajoutez la section mise en surbrillance dans l’exemple de stratégie suivant à la politique. Remplacez le compte d'exemple IDs (*012345678901*) par votre identifiant de compte.

------
#### [ 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": "ListCloudwatchLogGroups",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:*"
               ]
           },
           {
               "Sid": "ListCloudwatchLogStreams",
               "Effect": "Allow",
               "Action": [
                   "logs:DescribeLogStreams"
               ],
               "Resource": [
                   "arn:aws:logs:us-west-2:012345678901:log-group:/aws/kinesis-analytics/MyApplication:log-stream:*"
               ]
           },
           {
               "Sid": "PutCloudwatchLogs",
               "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"
           }
       ]
   }
   ```

------

#### Configuration de l'application
<a name="get-started-exercise-7-console-configure"></a>

1. Sur la **MyApplication**page, choisissez **Configurer**.

1. Sur la page **Configurer l’application**, indiquez l’**emplacement du code**:
   + Pour le compartiment **Amazon S3**, saisissez **ka-app-code-*<username>***.
   + Pour le **chemin de l'objet Amazon S3**, saisissez **java-getting-started-1.0.jar**.

1. Sous **Accéder aux ressources de l’application**, pour **Autorisations d’accès**, choisissez **Créer/mettre à jour un rôle IAM `kinesis-analytics-MyApplication-us-west-2`**.

1. Sous **Propriétés**, pour **ID de groupe**, saisissez **ProducerConfigProperties**.

1. Entrez les valeurs et propriétés d’application suivantes :    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/streams/latest/dev/get-started-exercise.html)

1. Sous **Surveillance**, assurez-vous que **Surveillance du niveau des métriques** est défini sur **Application**.

1. Pour la **CloudWatch journalisation**, cochez la case **Activer**.

1. Choisissez **Mettre à jour**.

**Note**  
Lorsque vous choisissez d'activer la CloudWatch journalisation, le service géré pour Apache Flink crée un groupe de journaux et un flux de journaux pour vous. Les noms de ces ressources sont les suivants :   
Groupe de journaux : `/aws/kinesis-analytics/MyApplication`
Flux de journaux : `kinesis-analytics-log-stream`

#### Exécutez l'application
<a name="get-started-exercise-7-console-run"></a>

1. Sur la **MyApplication**page, choisissez **Exécuter**. Confirmez l’action.

1. Lorsque l’application est en cours d’exécution, actualisez la page. La console affiche le **graphique de l’application**.

#### Arrêtez l'application
<a name="get-started-exercise-7-console-stop"></a>

Sur la **MyApplication**page, choisissez **Stop**. Confirmez l’action.

#### Mise à jour de l'application
<a name="get-started-exercise-7-console-update"></a>

À l’aide de la console, vous pouvez mettre à jour les paramètres d’application tels que les paramètres de surveillance, les propriétés d’application et l’emplacement ou le nom du fichier JAR de l’application. Vous pouvez également recharger le fichier JAR de l'application à partir du compartiment Amazon S3 si vous avez besoin de mettre à jour le code de l'application.

Sur la **MyApplication**page, choisissez **Configurer**. Mettez à jour les paramètres de l’application, puis choisissez **Mettre à jour**.

### Créez et exécutez l'application (AWS CLI)
<a name="get-started-exercise-7-cli"></a>

Dans cette section, vous allez utiliser le AWS CLI pour créer et exécuter l'application Managed Service for Apache Flink. Le service géré pour Apache Flink utilise la `kinesisanalyticsv2` AWS CLI commande pour créer et interagir avec le service géré pour les applications Apache Flink.

#### Créer une stratégie d’autorisations
<a name="get-started-exercise-7-cli-policy"></a>

Vous commencez par créer une stratégie d’autorisations avec deux instructions : une qui accorde des autorisations pour l’action `read` sur le flux source et une autre qui accorde des autorisations pour les actions `write` sur le flux récepteur. Vous attachez ensuite la politique à un rôle IAM (que vous allez créer dans la section suivante). Ainsi, lorsque le service géré pour Apache Flink assume le rôle, le service dispose des autorisations nécessaires pour lire à partir du flux source et écrire dans le flux récepteur.

Utilisez le code suivant pour créer la politique d’autorisations `KAReadSourceStreamWriteSinkStream`. Remplacez `username` par le nom d’utilisateur que vous avez utilisé pour créer le compartiment Amazon S3 pour stocker le code d’application. Remplacez l'ID de compte dans Amazon Resource Names (ARNs) (`012345678901`) par votre identifiant de compte.

------
#### [ 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"
        }
    ]
}
```

------

Pour step-by-step obtenir des instructions sur la création d'une politique d'autorisations, voir [Tutoriel : créer et joindre votre première politique gérée par le client](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html#part-two-create-policy) dans le *guide de l'utilisateur IAM*.

**Note**  
Pour accéder à d'autres AWS services, vous pouvez utiliser le AWS SDK pour Java. Le service géré pour Apache Flink définit automatiquement les informations d’identification requises par le kit SDK en fonction du rôle IAM d’exécution du service associé à votre application. Aucune étape supplémentaire n’est nécessaire.

#### Créer un rôle IAM
<a name="get-started-exercise-7-cli-role"></a>

Dans cette section, vous allez créer un rôle IAM que Managed Service for Apache Flink peut assumer pour lire un flux source et écrire dans le flux récepteur.

Le service géré pour Apache Flink ne peut pas accéder à votre flux sans autorisation. Vous utilisez un rôle IAM pour accorder ces autorisations. Deux politiques sont attachées à chaque rôle IAM. La politique d’approbation accorde au service géré pour Apache Flink l’autorisation d’assumer le rôle, et la politique d’autorisation détermine ce que le service géré pour Apache Flink peut faire après avoir assumé le rôle.

Vous attachez la politique d’autorisations que vous avez créée dans la section précédente à ce rôle.

**Pour créer un rôle IAM**

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dans le volet de navigation, choisissez **Rôles**, puis **Créer un rôle**.

1. Sous **Sélectionner le type d'identité approuvée**, choisissez **Service AWS **. Sous **Choisir le service qui utilisera ce rôle**, choisissez **EC2**. Sous **Sélectionner votre cas d’utilisation**, choisissez **Kinesis Analytics**.

   Choisissez **Suivant : Autorisations**.

1. Dans la page **Attacher des stratégies d’autorisations**, choisissez **Suivant : vérification**. Vous attachez des stratégies d’autorisations après avoir créé le rôle.

1. Sur la page **Créer un rôle**, saisissez **KA-stream-rw-role** pour le **Nom du rôle**. Sélectionnez **Créer un rôle**.

   Vous venez de créer un nouveau rôle IAM appelé `KA-stream-rw-role`. Ensuite, vous mettez à jour les stratégies d’approbation et d’autorisation pour le rôle.

1. Attachez la politique d’autorisation au rôle.
**Note**  
Dans le cadre de cet exercice, le service géré pour Apache Flink assume ce rôle à la fois pour la lecture des données à partir d’un flux de données Kinesis (source) et pour l’écriture des résultats dans un autre flux de données Kinesis. Vous attachez donc la politique que vous avez créée à l’étape précédente, [Créer une stratégie d’autorisations](#get-started-exercise-7-cli-policy).

   1. Sur la page **Récapitulatif**, choisissez l’onglet **Autorisations**.

   1. Choisissez **Attacher des stratégies**.

   1. Dans la zone de recherche, saisissez **KAReadSourceStreamWriteSinkStream** (la politique que vous avez créée dans la section précédente).

   1. Sélectionnez la politique **KAReadInputStreamWriteOutputStream**, puis **Attacher une stratégie**.

Vous avez maintenant créé le rôle d’exécution de service que votre application utilise pour accéder aux ressources. Notez l’ARN du nouveau rôle.

Pour step-by-step obtenir des instructions sur la création d'un rôle, consultez la section [Création d'un rôle IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) dans le guide de l'*utilisateur IAM*.

#### Création de l’application de service géré pour Apache Flink
<a name="get-started-exercise-7-cli-create"></a>

1. Copiez le code JSON suivant dans un fichier nommé `create_request.json`. Remplacez l’exemple d’ARN du rôle par l’ARN du rôle que vous avez créé précédemment. Remplacez le suffixe de l’ARN du compartiment (`username`) par le suffixe que vous avez choisi dans la section précédente. Remplacez l’exemple d’ID de compte (`012345678901`) dans le rôle d’exécution de service par votre ID de compte.

   ```
   {
       "ApplicationName": "test",
       "ApplicationDescription": "my java test app",
       "RuntimeEnvironment": "FLINK-1_6",
       "ServiceExecutionRole": "arn:aws:iam::012345678901:role/KA-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. Exécutez l’action [https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_CreateApplication.html) avec la demande précédente pour créer l’application : 

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

L’application est maintenant créée. Vous démarrez l’application dans l’étape suivante.

#### Démarrage de l’application
<a name="get-started-exercise-7-cli-start"></a>

Dans cette section, vous utilisez l’action [https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StartApplication.html) pour démarrer l’application.

**Pour démarrer l’application**

1. Copiez le code JSON suivant dans un fichier nommé `start_request.json`.

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

1. Exécutez l’action [https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StartApplication.html](https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StartApplication.html) avec la demande précédente pour démarrer l’application :

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

L’application est maintenant en cours d’exécution. Vous pouvez consulter les métriques du service géré pour Apache Flink sur la CloudWatch console Amazon pour vérifier que l'application fonctionne.

#### Arrêt de l’application
<a name="get-started-exercise-7-cli-stop"></a>

Dans cette section, vous allez utiliser l’action [https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StopApplication.html) pour arrêter l’application.

**Pour arrêter l’application**

1. Copiez le code JSON suivant dans un fichier nommé `stop_request.json`.

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

1. Exécutez l’action [https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StopApplication.html](https://docs.aws.amazon.com/kinesisanalytics/latest/apiv2/API_StopApplication.html) avec la demande suivante pour arrêter l’application :

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

L’application est maintenant arrêtée.