

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.

# Rédiger le code du plan
<a name="developing-blueprints-code"></a>

Chaque projet de modèle que vous créez doit contenir au minimum les fichiers suivants :
+ Un script de structure Python qui définit le flux de travail. Le script contient une fonction qui définit les entités (tâches et crawlers) dans un flux de travail, ainsi que les dépendances entre elles.
+ Fichier de configuration `blueprint.cfg`, qui définit :
  + Le chemin d'accès complet de la fonction de définition de structure du flux de travail.
  + Les paramètres acceptés par le modèle.

**Topics**
+ [Création du script de structure du plan](developing-blueprints-code-layout.md)
+ [Créez le fichier de configuration](developing-blueprints-code-config.md)
+ [Spécifier les paramètres du plan](developing-blueprints-code-parameters.md)

# Création du script de structure du plan
<a name="developing-blueprints-code-layout"></a>

Le script de structure de modèle doit inclure une fonction qui génère les entités dans votre flux de travail. Vous pouvez nommer cette fonction comme vous le souhaitez. AWS Glue utilise le fichier de configuration pour déterminer le nom complet de la fonction.

Votre fonction de structure effectue les opérations suivantes :
+ (Facultatif) Instancie la classe `Job` pour créer des objets `Job`, et passe des arguments tels que `Command` et `Role`. Ce sont des propriétés de tâche que vous spécifieriez si vous créiez la tâche à l'aide de la console AWS Glue ou de l'API.
+ (Facultatif) Instancie la classe `Crawler` pour créer des objets `Crawler`, et passe les arguments nom, rôle et cible.
+ Pour indiquer les dépendances entre les objets (entités de flux de travail), transmet les arguments supplémentaires `DependsOn` et `WaitForDependencies` à `Job()` et `Crawler()`. Ces arguments sont expliqués plus loin dans cette section.
+ Instancie la classe `Workflow` pour créer l'objet de flux de travail qui est retourné à AWS Glue, en passant un argument `Name`, un argument `Entities`, et un argument facultatif `OnSchedule`. L'argument `Entities` spécifie tous les tâches et les crawlers à inclure dans le flux de travail. Pour voir comment construire un objet `Entities`, vous trouverez l'exemple de projet plus loin dans cette section.
+ Renvoie un objet `Workflow`.

Pour les définitions de classes `Job`, `Crawler` et `Workflow`, veuillez consulter [Référence des classes de plan AWS Glue](developing-blueprints-code-classes.md).

La fonction de structure doit accepter les arguments d'entrée suivants.


| Argument | Description | 
| --- | --- | 
| user\$1params | Dictionnaire Python des noms et valeurs de paramètres de modèle. Pour de plus amples informations, veuillez consulter [Spécifier les paramètres du plan](developing-blueprints-code-parameters.md). | 
| system\$1params | Dictionnaire Python contenant deux propriétés : region et accountId. | 

Voici un exemple de script générateur de structure dans un fichier nommé `Layout.py` :

```
import argparse
import sys
import os
import json
from awsglue.blueprint.workflow import *
from awsglue.blueprint.job import *
from awsglue.blueprint.crawler import *


def generate_layout(user_params, system_params):

    etl_job = Job(Name="{}_etl_job".format(user_params['WorkflowName']),
                  Command={
                      "Name": "glueetl",
                      "ScriptLocation": user_params['ScriptLocation'],
                      "PythonVersion": "2"
                  },
                  Role=user_params['PassRole'])
    post_process_job = Job(Name="{}_post_process".format(user_params['WorkflowName']),
                            Command={
                                "Name": "pythonshell",
                                "ScriptLocation": user_params['ScriptLocation'],
                                "PythonVersion": "2"
                            },
                            Role=user_params['PassRole'],
                            DependsOn={
                                etl_job: "SUCCEEDED"
                            },
                            WaitForDependencies="AND")
    sample_workflow = Workflow(Name=user_params['WorkflowName'],
                            Entities=Entities(Jobs=[etl_job, post_process_job]))
    return sample_workflow
```

L'exemple de script importe les bibliothèques de modèles requises et inclut une fonction `generate_layout` qui génère un flux de travail avec deux tâches. Ceci est un script très simple. Un script plus complexe pourrait utiliser une logique et des paramètres supplémentaires pour générer un flux de travail avec de nombreux crawlers et tâches, ou même un nombre variable de tâches et d'crawlers.

## Utilisation de l' DependsOn argument
<a name="developing-blueprints-code-layout-depends-on"></a>

L'argument `DependsOn` est une représentation sous forme de dictionnaire d'une dépendance que cette entité a sur d'autres entités dans le flux de travail. Elle se présente sous la forme suivante. 

```
DependsOn = {dependency1 : state, dependency2 : state, ...}
```

Les clés de ce dictionnaire représentent la référence d'objet, et non le nom, de l'entité, tandis que les valeurs sont des chaînes qui correspondent à l'état à surveiller. AWS Glue déduit les déclencheurs appropriés. Pour connaître les états valides, veuillez consulter [Condition Structure (Structure des conditions)](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-trigger.html#aws-glue-api-jobs-trigger-Condition).

Par exemple, une tâche peut dépendre de la réussite d'un crawler. Si vous définissez un objet crawler nommé `crawler2` comme suit :

```
crawler2 = Crawler(Name="my_crawler", ...)
```

Ensuite, un objet dépendant de `crawler2` comprendrait un argument de constructeur tel que : 

```
DependsOn = {crawler2 : "SUCCEEDED"}
```

Par exemple :

```
job1 = Job(Name="Job1", ..., DependsOn = {crawler2 : "SUCCEEDED", ...})
```

Si `DependsOn` est omis pour une entité, cette entité dépend du déclencheur de démarrage du flux de travail.

## Utilisation de l' WaitForDependencies argument
<a name="developing-blueprints-code-layout-wait-for-dependencies"></a>

L'argument `WaitForDependencies` définit si une entité de tâche ou d'crawler doit attendre jusqu'à ce que *toutes* les entités dont elle dépend se terminent ou qu'*une seule d'entre elles* se termine.

Les valeurs autorisées sont « `AND` » ou « `ANY` ».

## Utilisation de l' OnSchedule argument
<a name="developing-blueprints-code-layout-on-schedule"></a>

L'argument `OnSchedule` pour le constructeur de classe `Workflow` est une expression `cron` qui définit la définition de déclenchement de démarrage d'un flux de travail.

Si cet argument est spécifié, AWS Glue crée un déclencheur de planification avec la planification correspondante. Si elle n'est pas spécifiée, le déclencheur de démarrage du flux de travail est un déclencheur à la demande.

# Créez le fichier de configuration
<a name="developing-blueprints-code-config"></a>

Le fichier de configuration de modèle est un fichier obligatoire qui définit le point d'entrée de script pour la génération du flux de travail et les paramètres que le modèle accepte. Le fichier doit être nommé `blueprint.cfg`.

Voici un exemple de fichier de configuration.

```
{
    "layoutGenerator": "DemoBlueprintProject.Layout.generate_layout",
    "parameterSpec" : {
           "WorkflowName" : {
                "type": "String",
                "collection": false
           },
           "WorkerType" : {
                "type": "String",
                "collection": false,
                "allowedValues": ["G1.X", "G2.X"],
                "defaultValue": "G1.X"
           },
           "Dpu" : {
                "type" : "Integer",
                "allowedValues" : [2, 4, 6],
                "defaultValue" : 2
           },
           "DynamoDBTableName": {
                "type": "String",
                "collection" : false
           },
           "ScriptLocation" : {
                "type": "String",
                "collection": false
    	}
    }
}
```

La propriété `layoutGenerator` spécifie le nom complet de la fonction dans le script qui génère la structure.

La propriété `parameterSpec` spécifie les paramètres que ce modèle accepte. Pour de plus amples informations, veuillez consulter [Spécifier les paramètres du plan](developing-blueprints-code-parameters.md).

**Important**  
Votre fichier de configuration doit inclure le nom du flux de travail en tant que paramètre de modèle, ou vous devez générer un nom de flux de travail unique dans votre script de structure.

# Spécifier les paramètres du plan
<a name="developing-blueprints-code-parameters"></a>

Le fichier de configuration contient les spécifications des paramètres de modèle dans un objet JSON `parameterSpec`. `parameterSpec` contient un ou plusieurs objets paramètres.

```
"parameterSpec": {
    "<parameter_name>": {
      "type": "<parameter-type>",
      "collection": true|false, 
      "description": "<parameter-description>",
      "defaultValue": "<default value for the parameter if value not specified>"
      "allowedValues": "<list of allowed values>" 
    },
    "<parameter_name>": {    
       ...
    }
  }
```

Voici les règles de codage de chaque objet paramètre :
+ Le nom du paramètre et `type` sont obligatoires. Toutes les autres propriétés sont facultatives.
+ Si vous spécifiez la propriété `defaultValue`, le paramètre est facultatif. Sinon, le paramètre est obligatoire et l'analyste de données qui crée un flux de travail à partir du modèle doit lui fournir une valeur.
+ Si vous définissez la propriété `collection` à `true`, le paramètre peut prendre une collection de valeurs. Les collections peuvent être de n'importe quel type de données.
+ Si vous spécifiez `allowedValues`, la console AWS Glue affiche une liste déroulante de valeurs que l'analyste de données doit choisir lors de la création d'un flux de travail à partir du plan.

Les valeurs suivantes sont autorisées pour `type` :


| Types de données de paramètre | Remarques | 
| --- | --- | 
| String | - | 
| Integer | - | 
| Double | - | 
| Boolean | Les valeurs possibles sont true et false. Génère une case à vérifier sur la page Create a workflow from <blueprint> (Créer un flux de travail à partir du <blueprint>) sur la console AWS Glue. | 
| S3Uri | Chemin d'accès Amazon S3, en commençant par s3://. Génère un champ de texte et un bouton Browse (Parcourir)sur la page Create a workflow from <blueprint> (Créer un flux de travail à partir du <blueprint>). | 
| S3Bucket | Noms du compartiment Amazon S3 uniquement. Génère un sélecteur de compartiment sur la page Create a workflow from <blueprint> (Créer un flux de travail à partir du <blueprint>). | 
| IAMRoleArn | Nom de ressource Amazon (ARN) d'un rôle Gestion des identités et des accès AWS (IAM). Génère un sélecteur de rôle sur la page Create a workflow from <blueprint> (Créer un flux de travail à partir du <blueprint>). | 
| IAMRoleName | Nom d'un rôle IAM. Génère un sélecteur de rôle sur la page Create a workflow from <blueprint> (Créer un flux de travail à partir du <blueprint>). | 