Tâches ETL en streaming dans AWS Glue - AWS Glue

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.

Tâches ETL en streaming dans AWS Glue

Vous pouvez créer des tâches Extract-transform-load (ETL) qui s'exécutent continu et consomment des données provenant de sources en streaming telles que Amazon Kinesis Data Streams, Apache Kafka et Amazon Managed Streaming for Apache Kafka (Amazon MSK). Les tâches nettoient et transforment les données, puis chargent les résultats dans les lacs de données Amazon S3 ou les magasins de données JDBC.

En outre, vous pouvez produire des données pour des flux Amazon Kinesis Data Streams. Cette fonctionnalité n'est disponible que lors de l'écriture de AWS Glue scripts. Pour plus d’informations, consultez Connexions Kinesis.

Par défaut, AWS Glue traite et écrit les données dans des fenêtres de 100 secondes. Cela permet de traiter les données de manière efficace et d'effectuer des agrégations sur les données qui arrivent plus tard que prévu. Vous pouvez modifier cette taille de fenêtre temporelle pour augmenter la ponctualité ou la précision de l'agrégation. Les tâches de streaming AWS Glue utilisent des points de contrôle au lieu de signets de tâche pour suivre les données lues.

Note

AWS Glue facture à l'heure les tâches ETL en streaming.

Cette vidéo aborde les défis liés aux coûts du streaming ETL et les fonctionnalités de réduction des coûts dans AWS Glue.

La création d'une tâche ETL en streaming implique les étapes suivantes :

  1. Pour une source de streaming Apache Kafka, créez une connection AWS Glue à la source Kafka ou au cluster Amazon MSK.

  2. Créez manuellement une table du catalogue de données pour la source en streaming.

  3. Créez une tâche ETL pour la source de données de streaming. Définissez des propriétés de tâche spécifiques au streaming et fournissez votre propre script ou modifiez éventuellement le script généré.

Pour de plus amples informations, consulter Diffusion ETL en continu AWS Glue.

Lorsque vous créez une tâche ETL en streaming pour Amazon Kinesis Data Streams, vous n'avez pas besoin de créer une connexion AWS Glue. Toutefois, s'il existe une connexion attachée à la tâche ETL AWS Glue en streaming pointant sur une source Kinesis Data Streams, puis un point de terminaison de Virtual Private Cloud (VPC) vers Kinesis est requis. Pour plus d’informations, consultez Création d’un point de terminaison d’interface dans le Guide de l’utilisateur Amazon VPC. Lorsque vous spécifiez un Amazon Kinesis Data Streams dans un autre compte, vous devez configurer les rôles et les stratégies pour autoriser l'accès entre comptes. Pour de plus amples informations, veuillez consulter la rubrique Exemple : Lire à partir d'un flux Kinesis dans un autre compte.

Les tâches ETL de streaming AWS Glue peuvent détecter automatiquement les données compressées, décompresser les données de streaming de manière transparente, effectuer les modifications habituelles sur la source d'entrée et charger vers le stockage de sortie.

AWS Glue prend en charge la décompression automatique pour les types de compression suivants, compte tenu du format d'entrée :

Type de compression Fichier Avro Référence Avro JSON CSV Grok
BZIP2 Oui Oui Oui Oui Oui
GZIP Non Oui Oui Oui Oui
SNAPPY Oui (format Snappy brut) Oui (format Snappy encadré) Oui (format Snappy encadré) Oui (format Snappy encadré) Oui (format Snappy encadré)
XZ Oui Oui Oui Oui Oui
ZSTD Oui Non Non Non Non
DEFLATE Oui Oui Oui Oui Oui

Création d'une connexion AWS Glue pour un flux de données Apache Kafka

Pour lire à partir d'un flux Apache Kafka, vous devez créer une connexion AWS Glue.

Pour créer une connexion AWS Glue pour une source Kafka (Console)
  1. Ouvrez la AWS Glue console à l'adresse https://console.aws.amazon.com/glue/.

  2. Dans le volet de navigation, sous Data catalog (Catalogue de données), choisissez Connections (Connexions).

  3. Choisissez Add connection (Ajouter une connexion), et dans la page Set up your connection's properties (Configurer les propriétés de votre connexion), saisissez un nom de connexion.

    Note

    Pour plus d'informations sur la spécification des propriétés de connexion, veuillez consulter Propriétés de connexion AWS Glue.

  4. Pour Type de connexion, choisissez Kafka.

  5. Pour les URL des serveurs d'amorçage Kafka, saisissez les numéros d'hôte et de port des brokers d'amorçage pour votre cluster Amazon MSK ou Apache Kafka. Utilisez uniquement des points de terminaison utilisant le protocole TLS (Transport Layer Security) pour établir la connexion initiale au cluster Kafka. Les points de terminaison en texte brut ne sont pas pris en charge.

    Voici un exemple de liste de paires de nom d'hôte et de numéro de port pour un cluster Amazon MSK.

    myserver1.kafka.us-east-1.amazonaws.com:9094,myserver2.kafka.us-east-1.amazonaws.com:9094, myserver3.kafka.us-east-1.amazonaws.com:9094

    Pour plus d'informations sur l'obtention des informations du broker d'amorçage, veuillez consulter la rubrique Obtenir les brokers d'amorçage pour un cluster Amazon MSK dans le Guide du développeur Amazon Managed Streaming for Apache Kafka.

  6. Si vous souhaitez une connexion sécurisée à la source de données Kafka, sélectionnez Require SSL connection (Connexion SSL obligatoire), et pour Kafka private CA certificate location (Emplacement du certificat d'autorité de certification privée Kafka), entrez un chemin d'accès Amazon S3 valide vers un certificat SSL personnalisé.

    Pour une connexion SSL à Kafka autogérée, le certificat personnalisé est obligatoire. Il est facultatif pour Amazon MSK.

    Pour plus d'informations sur la spécification d'un certificat personnalisé pour Kafka, consulter Propriétés de connexion AWS Glue SSL.

  7. Utilisez AWS Glue Studio la AWS CLI pour spécifier une méthode d'authentification du client Kafka. Pour y accéder, AWS Glue Studio AWS Gluesélectionnez dans le menu ETL du volet de navigation de gauche.

    Pour plus d'informations sur les méthodes d'authentification client Kafka, consultez AWS Glue Propriétés de connexion Kafka pour l'authentification du client .

  8. Saisissez éventuellement une description, puis choisissez Suivant.

  9. Pour un cluster Amazon MSK, spécifiez son Virtual Private Cloud (VPC), son sous-réseau et son groupe de sécurité. Les informations du VPC sont facultatives pour Kafka autogéré.

  10. Choisissez Next (Suivant) pour vérifier toutes les propriétés de connexion, puis choisissez Finish (Terminer).

Pour plus d'informations sur les connexions AWS Glue, consultez Connexion aux données.

AWS Glue Propriétés de connexion Kafka pour l'authentification du client

Authentification SASL/GSSAPI (Kerberos)

Le choix de cette méthode d'authentification vous permettra de spécifier les propriétés Kerberos.

Kerberos Keytab

Choisissez l'emplacement du fichier keytab. Un keytab stocke les clés à long terme pour un ou plusieurs principaux. Pour en savoir plus, consultez Documentation du MIT Kerberos : Keytab.

Fichier Kerberos krb5.conf

Choisissez le fichier krb5.conf. Il contient le domaine par défaut (un réseau logique, similaire à un domaine, qui définit un groupe de systèmes sous le même KDC) et l'emplacement du serveur KDC. Pour en savoir plus, consultez Documentation MIT Kerberos : krb5.conf.

Principal Kerberos et nom de service Kerberos

Saisissez le principal Kerberos et le nom de service Kerberos. Pour plus d'informations, consultez MIT Kerberos Documentation: Kerberos principal (Documentation du MIT Kerberos : principal Kerberos).

Authentification SASL/SCRAM-SHA-512

Le choix de cette méthode d'authentification vous permettra de spécifier les informations d'identification d'authentification.

AWS Secrets Manager

Recherchez votre jeton dans la zone Search (Rechercher) en saisissant son nom ou son ARN.

Nom d'utilisateur et mot de passe du fournisseur directement

Recherchez votre jeton dans la zone Search (Rechercher) en saisissant son nom ou son ARN.

Authentification SSL client

Le choix de cette méthode d'authentification vous permet de sélectionner l'emplacement du centre de stockage des clés client Kafka en naviguant sur Amazon S3. Vous pouvez également entrer le mot de passe du centre de stockage des clés client Kafka et le mot de passe de la clé client Kafka.

Authentification IAM

Cette méthode d'authentification ne nécessite aucune spécification supplémentaire et n'est applicable que lorsque la source de diffusion en direct est MSK Kafka.

Authentification SASL/PLAIN

Le choix de cette méthode d'authentification vous permet de spécifier des informations d'authentification.

Création d'un tableau de catalogue de données pour une source en streaming

Une table du catalogue de données qui spécifie les propriétés du flux de données source, y compris le schéma de données, peut être créée manuellement pour une source de streaming. Cette table est utilisée comme source de données pour la tâche ETL en streaming.

Si vous ne connaissez pas le schéma des données dans le flux de données source, vous pouvez créer la table sans schéma. Ensuite, lorsque vous créez la tâche ETL en streaming, vous pouvez activer la fonction de détection de schéma AWS Glue. AWS Gluedétermine le schéma à partir des données en streaming.

Utilisez la AWS Glueconsole, le AWS Command Line Interface (AWS CLI) ou l'AWS GlueAPI pour créer la table. Pour plus d'informations sur la création manuelle d'une table avec la console AWS Glue, consultez Création de tables.

Note

Vous ne pouvez pas utiliser la AWS Lake Formation console pour créer la table ; vous devez utiliser la AWS Glue console.

Tenez également compte des informations suivantes pour les sources en streaming au format Avro ou pour les données de journal auxquelles vous pouvez appliquer des modèles Grok.

Source de données Kinesis

Lors de la création de la table, définissez les propriétés de streaming ETL suivantes (console).

Type de source

Kinesis

Pour une source Kinesis dans le même compte :
Région

AWS Région dans laquelle réside le service Amazon Kinesis Data Streams. Le nom de la région et du flux Kinesis sont convertis en un ARN de flux.

Exemple : https://kinesis.us-east-1.amazonaws.com

Nom du flux Kinesis

Nom du flux comme décrit dans Création d'un flux dans le Guide du développeur d'Amazon Kinesis Data Streams.

Pour obtenir une source Kinesis dans un autre compte, reportez-vous à Cet exemple pour configurer les rôles et les stratégies pour autoriser un accès entre comptes. Configurez ces paramètres :
ARN du flux de diffusion

ARN du flux de données Kinesis auprès duquel le consommateur est enregistré. Pour plus d'informations, consultez les sections Amazon Resource Names (ARN) et AWS Service Namespaces dans le. Références générales AWS

ARN du rôle assumé

Amazon Resource Name (ARN) du rôle à assumer.

Nom de la séance (facultatif)

Identifiant de la séance du rôle assumé.

Utilisez le nom de séance de rôle pour identifier de manière unique une séance lorsque le même rôle est assumé par différents principaux ou pour différentes raisons. Dans les scénarios impliquant plusieurs comptes, le nom de séance de rôle est visible et peut être enregistré par le compte propriétaire du rôle. Le nom de la séance de rôle est également utilisé dans l'ARN du principal de rôle présumé. Cela signifie que les demandes d'API inter-comptes ultérieures utilisant les informations d'identification de sécurité temporaires exposeront le nom de session du rôle au compte externe dans ses AWS CloudTrail journaux.

Pour définir les propriétés ETL de streaming pour Amazon Kinesis Data Streams (API AWS Glue ou AWS CLI)
  • Pour configurer les propriétés ETL de streaming pour une source Kinesis dans le même compte, spécifiez les paramètres streamName et endpointUrl dans la structure StorageDescriptor de l'opération d'API CreateTable ou de la commande create_table de la CLI.

    "StorageDescriptor": { "Parameters": { "typeOfData": "kinesis", "streamName": "sample-stream", "endpointUrl": "https://kinesis.us-east-1.amazonaws.com" } ... }

    Ou, spécifiez le streamARN.

    "StorageDescriptor": { "Parameters": { "typeOfData": "kinesis", "streamARN": "arn:aws:kinesis:us-east-1:123456789:stream/sample-stream" } ... }
  • Pour configurer les propriétés ETL de streaming pour une source Kinesis dans un autre compte, spécifiez les paramètres streamARN, awsSTSRoleARN et awsSTSSessionName (facultatif) dans la structureStorageDescriptor de l'opération d'API CreateTable ou de la commande create_table de la CLI.

    "StorageDescriptor": { "Parameters": { "typeOfData": "kinesis", "streamARN": "arn:aws:kinesis:us-east-1:123456789:stream/sample-stream", "awsSTSRoleARN": "arn:aws:iam::123456789:role/sample-assume-role-arn", "awsSTSSessionName": "optional-session" } ... }

Source de données Kafka

Lors de la création de la table, définissez les propriétés de streaming ETL suivantes (console).

Type de source

Kafka

Pour une source Kafka :
Nom de la rubrique

Nom de la rubrique tel que spécifié dans Kafka.

Connexion

Une connexion AWS Glue qui fait référence à une source Kafka, comme décrit dans Création d'une connexion AWS Glue pour un flux de données Apache Kafka.

Source AWS Glue de la table Schema Registry

Pour utiliser Registre de schémas pour les tâches de streaming AWS Glue, suivez les instructions de Cas d'utilisation : AWS Glue Data Catalog pour créer ou mettre à jour une table de Registre de schémas.

Présentement, le streaming AWS Glue prend uniquement en charge le format Glue Schema Registry Avro avec l'inférence de schéma définie sur false.

Notes et restrictions pour les sources en streaming Avro

Les notes et restrictions suivantes s'appliquent aux sources en streaming au format Avro :

  • Lorsque la détection du schéma est activée, le schéma Avro doit être inclus dans la charge utile. Lorsqu'elle est désactivée, la charge utile ne doit contenir que des données.

  • Certains types de données Avro ne sont pas pris en charge dans les trames dynamiques. Vous ne pouvez pas spécifier ces types de données lors de la définition du schéma avec la page Define a schema (Définir un schéma) de l'assistant création de table dans la console AWS Glue. Lors de la détection de schéma, les types non pris en charge dans le schéma Avro sont convertis en types pris en charge comme suit :

    • EnumType => StringType

    • FixedType => BinaryType

    • UnionType => StructType

  • Si vous définissez le schéma de table à l'aide de la page Define a schema (Définir un schéma) dans la console, le type de l'élément racine implicite pour le schéma est record. Si vous voulez un type d'élément racine autre que record, par exemple, array ou map, vous ne pouvez pas spécifier le schéma à l'aide de la page Define a schema (Définir un schéma). Au lieu de cela, vous devez ignorer cette page et spécifier le schéma en tant que propriété de table ou dans le script ETL.

    • Pour spécifier le schéma dans les propriétés de la table, complétez l'assistant de création de table, modifiez les détails de la table et ajoutez une nouvelle paire clé-valeur sous Table properties (Propriétés de la table). Utilisez la clé avroSchema et saisissez un objet de schéma JSON pour la valeur, comme illustré dans la capture d'écran suivante.

      Sous l'en-tête Table properties (Propriétés de la table), il y a deux colonnes de champs de texte. L'en-tête de la colonne de gauche est Key (Clé), et l'en-tête de la colonne de droite est Value (Valeur). La paire clé/valeur de la première ligne est classification/avro. La paire clé/valeur de la deuxième ligne est avroSchema/{"type":"array","items":"string"}.
    • Pour spécifier le schéma dans le script ETL, modifiez l'instruction d'affectation datasource0 et ajoutez la clé avroSchema à l'argument additional_options, comme indiqué dans les exemples Python et Scala suivants.

      Python
      SCHEMA_STRING = ‘{"type":"array","items":"string"}’ datasource0 = glueContext.create_data_frame.from_catalog(database = "database", table_name = "table_name", transformation_ctx = "datasource0", additional_options = {"startingPosition": "TRIM_HORIZON", "inferSchema": "false", "avroSchema": SCHEMA_STRING})
      Scala
      val SCHEMA_STRING = """{"type":"array","items":"string"}""" val datasource0 = glueContext.getCatalogSource(database = "database", tableName = "table_name", redshiftTmpDir = "", transformationContext = "datasource0", additionalOptions = JsonOptions(s"""{"startingPosition": "TRIM_HORIZON", "inferSchema": "false", "avroSchema":"$SCHEMA_STRING"}""")).getDataFrame()

Application de modèles Grok à des sources de streaming

Vous pouvez créer une tâche ETL en streaming pour une source de données de journalisation et utiliser des modèles Grok pour convertir les journaux en données structurées. La tâche ETL traite ensuite les données en tant que source de données structurée. Vous spécifiez les modèles Grok à appliquer lorsque vous créez la table du catalogue de données pour la source en streaming.

Pour plus d'informations sur les modèles Grok et les valeurs de chaînes de modèle personnalisées, veuillez consulter Écriture de classifieurs personnalisés Grok.

Pour ajouter des modèles Grok au tableau du catalogue de données (console)
  • Utilisez l'assistant de création de table et créez la table avec les paramètres spécifiés dans Création d'un tableau de catalogue de données pour une source en streaming. Spécifiez le format de données en tant que Grok, remplissez le champ Grok pattern (Modèle Grok), et éventuellement ajouter des modèles personnalisés sous Custom patterns (optional) (Modèles personnalisés – facultatif).

    *

    Appuyez sur Entrée après chaque modèle personnalisé.

Pour ajouter des modèles Grok au tableau du catalogue de données (API AWS Glue ou AWS CLI)
  • Ajoutez le paramètre GrokPattern et, éventuellement, le paramètre CustomPatterns à l'opération d'API CreateTable ou à la commande create_table de la CLI.

    "Parameters": { ... "grokPattern": "string", "grokCustomPatterns": "string", ... },

    Formulez grokCustomPatterns en tant que chaîne et utilisez « \n » comme séparateur entre les motifs.

    Voici un exemple de ces paramètres dans un fichier.

    "parameters": { ... "grokPattern": "%{USERNAME:username} %{DIGIT:digit:int}", "grokCustomPatterns": "digit \d", ... }

Définition des propriétés de tâche pour une tâche ETL en streaming

Lorsque vous définissez une tâche ETL en streaming dans la console AWS Glue, fournissez les propriétés spécifiques aux flux suivantes. Pour obtenir la description d'autres propriétés de la tâche, consulter Définition des propriétés des tâches Spark.

Rôle IAM

Spécifiez le rôle AWS Identity and Access Management (IAM) utilisé pour autoriser les ressources utilisées pour exécuter la tâche, accéder aux sources de streaming et accéder aux magasins de données cibles.

Pour accéder à Amazon Kinesis Data Streams, associez AmazonKinesisFullAccess AWS la politique gérée au rôle ou associez une politique IAM similaire qui permet un accès plus précis. Pour obtenir des exemples de stratégies, consultez Controlling Access to Amazon Kinesis Data Streams Resources Using IAM (Contrôle de l'accès aux ressources Amazon Kinesis Data Streams à l'aide d'IAM).

Pour plus d'informations sur les autorisations requises pour exécuter des tâches dans AWS Glue, consultez Gestion des identités et des accès pour AWS Glue.

Type

Choisissez Spark Streaming.

Version AWS Glue

La version AWS Glue détermine les versions d'Apache Spark et Python ou Scala qui sont disponibles pour la tâche. Choisissez une sélection qui spécifie la version de Python ou Scala disponible pour la tâche. AWS Glue version 2.0 avec prise en charge de Python 3 est la valeur par défaut pour les tâches ETL en streaming.

Fenêtre de maintenance

Spécifie une fenêtre dans laquelle une tâche de streaming peut être redémarrée. veuillez consulter Fenêtres de maintenance pour le AWS Glue streaming.

Délai d'expiration de la tâche

Vous pouvez saisir une durée en minutes. La valeur par défaut est vide.

  • Les tâches de streaming doivent avoir un délai d'expiration inférieur à 7 jours ou 10080 minutes.

  • Lorsque la valeur est laissée vide, la tâche sera redémarrée au bout de 7 jours, si vous n'avez pas défini de fenêtre de maintenance. Si vous avez défini une fenêtre de maintenance, la tâche sera redémarrée pendant la fenêtre de maintenance après 7 jours.

Source de données

Spécifiez la table que vous avez créée dans Création d'un tableau de catalogue de données pour une source en streaming.

Cible de données

Effectuez l’une des actions suivantes :

  • Choisissez Create tables in your data target (Créer des tables dans votre cible de données) et spécifiez les propriétés de cible de données suivantes.

    Banque de données

    Choisissez Amazon S3 ou JDBC.

    Format

    Choisissez n'importe quel format. Tous sont pris en charge pour le streaming.

  • Choisissez Use tables in the data catalog and update your data target (Utiliser les tables du catalogue de données et mettre à jour votre cible de données) et choisissez une table pour un magasin de données JDBC.

Définition du schéma en sortie

Effectuez l’une des actions suivantes :

  • Choisissez Automatically detect schema of each record (Détection automatique du schéma de chaque enregistrement) pour activer la détection de schéma. AWS Glue détermine le schéma à partir des données en streaming.

  • Choisissez Specify output schema for all records (Spécifier le schéma de sortie pour tous les enregistrements) pour utiliser la transformation Apply Mapping (Appliquer le mappage) pour définir le schéma en sortie.

Script

Vous pouvez également fournir votre propre script ou modifier le script généré pour effectuer des opérations prises en charge par le moteur Apache Spark Structured Streaming. Pour plus d'informations sur les opérations disponibles, consultez la section Opérations sur le DataFrames streaming/Datasets.

Restrictions et notes sur ETL en streaming

Gardez à l'esprit les notes et restrictions suivantes :

  • La décompression automatique pour les tâches ETL de streaming AWS Glue est uniquement disponible pour les types de compression pris en charge. Veuillez prendre en compte les points suivants :

    • Le format Framed Snappy fait référence au format de trame officiel pour Snappy.

    • L'algorithme Deflate est pris en charge dans la version 3.0 de Glue et non dans la version 2.0.

  • Lorsque vous utilisez la détection de schéma, vous ne pouvez pas effectuer de jointures de données en streaming.

  • Les tâches ETL AWS Glue en streaming ne prennent pas en charge le type de données Union pour le Registre de schéma AWS Glue avec le format Avro.

  • Votre script ETL peut utiliser les transformations intégrées d'AWS Glue et les transformations natives d'Apache Spark Structured Streaming. Pour plus d'informations, voir Opérations sur le DataFrames streaming/Datasets sur le site Web d'Apache Spark ou. AWS Glue PySpark transforme la référence

  • Les tâches ETL AWS Glue en streaming utilisent des points de contrôle pour garder la trace des données qui ont été lues. Par conséquent, une tâche arrêtée et redémarrée reprend là où elle s'est arrêtée dans le flux. Si vous souhaitez retraiter les données, vous pouvez supprimer le dossier du point de contrôle référencé dans le script.

  • Les signets de tâche ne sont pas pris en charge.

  • Pour utiliser la fonctionnalité de diffusion améliorée de Kinesis Data Streams dans tâche, consultez Utilisation de la diffusion améliorée dans les tâches de streaming Kinesis.

  • Si vous utilisez une table de catalogue de données créée à partir d'AWS Glue Schema Registry, lorsqu'une nouvelle version de schéma devient disponible, pour refléter le nouveau schéma, vous devez effectuer les opérations suivantes :

    1. Arrêtez les tâches associées à la table.

    2. Mettez à jour le schéma de la table Catalogue de données.

    3. Redémarrez les tâches associées à la table.