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.
Connexions Redshift
Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans les tables des bases de données Amazon Redshift. Lors de la connexion aux bases de données Amazon Redshift, AWS Glue déplace les données via Amazon S3 pour atteindre un débit maximal, à l'aide du code SQL et des commandes Amazon Redshift. COPY
UNLOAD
Dans AWS Glue 4.0 et versions ultérieures, vous pouvez utiliser l'intégration Amazon Redshift pour Apache Spark pour lire et écrire avec des optimisations et des fonctionnalités spécifiques à Amazon Redshift, au-delà de celles disponibles lors de la connexion via les versions précédentes.
Découvrez comment AWS Glue facilite plus que jamais la migration des utilisateurs d'Amazon Redshift vers AWS Glue pour l'intégration des données sans serveur et l'ETL.
Configuration des connexions Redshift
Pour utiliser les clusters Amazon Redshift dans AWS Glue, vous aurez besoin de certaines conditions préalables :
-
Un répertoire Amazon S3 à utiliser pour le stockage temporaire lors de la lecture et de l'écriture dans la base de données.
-
Un Amazon VPC permettant la communication entre votre cluster Amazon Redshift, votre tâche AWS Glue et votre répertoire Amazon S3.
-
Autorisations IAM appropriées sur le job AWS Glue et le cluster Amazon Redshift.
Configuration des rôles IAM
Configurer le rôle pour le cluster Amazon Redshift
Votre cluster Amazon Redshift doit être capable de lire et d'écrire sur Amazon S3 afin de pouvoir s'intégrer aux tâches AWS Glue. Pour autoriser cela, vous pouvez associer des rôles IAM au cluster Amazon Redshift auquel vous souhaitez vous connecter. Votre rôle doit disposer d'une politique autorisant la lecture et l'écriture dans votre répertoire temporaire Amazon S3. Votre rôle doit avoir une relation de confiance permettant au service redshift.amazonaws.com
de AssumeRole
.
Pour associer un rôle IAM à Amazon Redshift
Conditions préalables : un compartiment ou un répertoire Amazon S3 utilisé pour le stockage temporaire de fichiers.
-
Identifiez les autorisations Amazon S3 dont votre cluster Amazon Redshift aura besoin. Lors du déplacement de données vers et depuis un cluster Amazon Redshift, les tâches AWS Glue émettent des instructions COPY et UNLOAD à l'encontre d'Amazon Redshift. Si votre tâche modifie une table dans Amazon Redshift, AWS Glue émettra également des instructions CREATE LIBRARY. Pour plus d'informations sur les autorisations Amazon S3 spécifiques requises pour qu'Amazon Redshift exécute ces instructions, consultez la documentation Amazon Redshift : Amazon Redshift : Permissions to access other Resources. AWS
Dans la console IAM, créez une politique IAM avec les autorisations nécessaires. Pour plus d'informations sur la création de politiques, consultez Création de politiques IAM.
Dans la console IAM, créez un rôle et une relation de confiance permettant à Amazon Redshift d'assumer ce rôle. Suivez les instructions de la documentation IAM pour créer un rôle pour un AWS service (console)
Lorsqu'on vous demande de choisir un cas d'utilisation du AWS service, choisissez « Redshift - Personnalisable ».
Lorsque vous êtes invité à joindre une politique, choisissez celle que vous avez définie précédemment.
Note
Pour plus d'informations sur la configuration des rôles pour Amazon Redshift, consultez la section Autoriser Amazon Redshift à accéder à d'autres AWS services en votre nom dans la documentation Amazon Redshift.
Dans la console Amazon Redshift, associez le rôle à votre cluster Amazon Redshift. Suivez les instructions de la documentation Amazon Redshift.
Sélectionnez l'option en surbrillance dans la console Amazon Redshift pour configurer ce paramètre :
Note
Par défaut, les tâches AWS Glue transmettent les informations d'identification temporaires Amazon Redshift créées à l'aide du rôle que vous avez spécifié pour exécuter la tâche. Nous vous déconseillons d'utiliser ces informations d'identification. Pour des raisons de sécurité, ces informations d'identification expirent au bout d'une heure.
Configuration du rôle pour la tâche AWS Glue
La tâche AWS Glue a besoin d'un rôle pour accéder au compartiment Amazon S3. Vous n'avez pas besoin d'autorisations IAM pour le cluster Amazon Redshift. Votre accès est contrôlé par la connectivité dans Amazon VPC et par les informations d'identification de votre base de données.
Configurer Amazon VPC
Pour configurer l'accès pour les magasins de données Amazon Redshift
Connectez-vous à la console Amazon Redshift AWS Management Console et ouvrez-la à l'adresse. https://console.aws.amazon.com/redshiftv2/
-
Dans le volet de navigation de gauche, choisissez Clusters.
-
Choisissez le nom du cluster à partir duquel vous souhaitez accéder AWS Glue.
-
Dans la section Propriétés du cluster, choisissez un groupe de sécurité dans les groupes de sécurité VPC pour autoriser AWS Glue à utiliser. Enregistrez le nom du groupe de sécurité que vous avez choisi pour référence ultérieure. Le choix du groupe de sécurité ouvre la liste des groupes de sécurité de la EC2 console Amazon.
-
Choisissez le groupe de sécurité à modifier et accédez à l'onglet Inbound (Entrant).
-
Ajoutez une règle d'autoréférencement pour autoriser AWS Glue composants pour communiquer. Plus spécifiquement, ajoutez ou confirmez qu'il existe une règle Type
All TCP
, que Protocol (Protocole) estTCP
, que Port Range (Plage de ports) comprend tous les ports et que la valeur de Source est le même nom de groupe de sécurité que la valeur de Group ID (ID du groupe).La règle entrante ressemble à ce qui suit :
Type Protocole Plage de ports Source Tous les TCP
TCP
0-65535
database-security-group
Par exemple :
-
Ajoutez également une règle pour le trafic sortant. Ouvrez le trafic sortant pour tous les ports, par exemple :
Type Protocole Plage de ports Destination Tout le trafic
ALL
ALL
0.0.0.0/0
Ou créez une règle avec référence circulaire où Type est
All TCP
, Protocol (Protocole) estTCP
, Port Range (Plage de ports) comprend tous les ports et dont la valeur de Destination est le même nom de groupe de sécurité que la valeur de Group ID (ID du groupe). Si vous utilisez un point de terminaison d'un VPC Amazon S3, ajoutez également une règle HTTPS pour l'accès à Amazon S3. Les3-prefix-list-id
est requis dans la règle du groupe de sécurité pour autoriser le trafic entre le VPC et le point de terminaison Amazon S3 VPC.Par exemple :
Type Protocole Plage de ports Destination Tous les TCP
TCP
0-65535
security-group
HTTPS
TCP
443
s3-prefix-list-id
Configurer AWS Glue
Vous devez créer une connexion AWS Glue Data Catalog qui fournit les informations de connexion Amazon VPC.
Pour configurer la connectivité Amazon Redshift entre Amazon VPC et Glue dans la console AWS
-
Créez une connexion au catalogue de données en suivant les étapes décrites dans :Ajouter une AWS Glue connexion. Après avoir créé la connexion, conservez le nom de la connexion pour l'étape suivante.
connectionName
Lorsque vous sélectionnez un type de connexion, sélectionnez Amazon Redshift.
Lorsque vous sélectionnez un cluster Redshift, sélectionnez le nom de votre cluster.
Fournissez les informations de connexion par défaut pour un utilisateur Amazon Redshift sur votre cluster.
Vos paramètres Amazon VPC seront automatiquement configurés.
Note
Vous devrez fournir
PhysicalConnectionRequirements
manuellement pour votre Amazon VPC lorsque vous créez une connexion Amazon Redshift via le kit AWS SDK. -
Dans la configuration de votre tâche AWS Glue
connectionName
, fournissez une connexion réseau supplémentaire.
Exemple : lecture à partir de tables Amazon Redshift
Vous pouvez lire à partir de clusters Amazon Redshift et des environnements Amazon Redshift sans serveur.
Conditions préalables : une table Amazon Redshift à partir de laquelle vous souhaitez lire. Suivez les étapes décrites dans la section précédente, Configuration des connexions Redshift après quoi vous devriez avoir l'URI Amazon S3 pour un répertoire temporaire temp-s3-dir
et un rôle IAM (dans le compterole-account-id
). rs-role-name
Exemple : écrire sur des tables Amazon Redshift
Vous pouvez sur des clusters Amazon Redshift et des environnements Amazon Redshift sans serveur.
Conditions préalables : un cluster Amazon Redshift et suivez les étapes de la Configuration des connexions Redshift section précédente, après quoi vous devriez avoir l'URI Amazon S3 pour un répertoire temporaire et un rôle IAMtemp-s3-dir
,rs-role-name
, (dans le compte). role-account-id
Vous aurez également besoin d'un DynamicFrame
dont vous souhaitez écrire le contenu dans la base de données.
Référence des options de connexion Amazon Redshift
Les options de connexion de base utilisées pour toutes les connexions JDBC AWS Glue afin de configurer des informations telles queurl
, user
et password
sont cohérentes entre tous les types de JDBC. Pour plus d'informations sur les paramètres JDBC standards, consultez Référence des options de connexion JDBC.
Le type de connexion Amazon Redshift propose des options de connexion supplémentaires :
-
"redshiftTmpDir"
: (obligatoire) chemin Amazon S3 où les données temporaires peuvent être stockées lors de la copie à partir de la base de données. -
"aws_iam_role"
: (facultatif) ARN pour un rôle IAM. La tâche AWS Glue transmettra ce rôle au cluster Amazon Redshift pour accorder au cluster les autorisations nécessaires pour exécuter les instructions de la tâche.
Options de connexion supplémentaires disponibles dans AWS Glue 4.0+
Vous pouvez également transmettre les options du nouveau connecteur Amazon Redshift via les options de connexion AWS Glue. Pour obtenir la liste complète des options de connecteur prises en charge, consultez la section relative aux paramètres SQL de Spark dans Intégration Amazon Redshift pour Apache Spark.
Pour vous faciliter la tâche, nous vous rappelons ici certaines nouvelles options :
Nom | Obligatoire | Par défaut | Description |
---|---|---|---|
autopushdown |
Non | TRUE | Applique le pushdown des prédicats et des requêtes en capturant et en analysant les plans logiques de Spark pour les opérations SQL. Les opérations sont traduites en une requête SQL, puis exécutées dans Amazon Redshift pour améliorer les performances. |
autopushdown.s3_result_cache |
Non | FALSE | Met en cache la requête SQL pour décharger les données du mappage des chemins Amazon S3 en mémoire, afin que la même requête n'ait pas besoin de s'exécuter à nouveau dans la même session Spark. Pris en charge uniquement lorsqu' |
unload_s3_format |
Non | PARQUET | PARQUET : décharge les résultats de la requête au format Parquet. TEXTE : décharge les résultats de la requête séparés par une barre verticale au format texte. |
sse_kms_key |
Non | N/A | La clé AWS SSE-KMS à utiliser pour le chiffrement pendant les |
extracopyoptions |
Non | N/A | Une liste d'options supplémentaires à ajouter à la commande Notez que ces options étant ajoutées à la fin de la commande |
csvnullstring (expérimental) |
Non | NULL | La valeur de chaîne à écrire pour les valeurs nulles lors de l'utilisation du |
Ces nouveaux paramètres peuvent être utilisés comme suit.
Nouvelles options destinées à améliorer les performances
Le nouveau connecteur intègre de nouvelles options d'amélioration des performances :
-
autopushdown
: activée par défaut. -
autopushdown.s3_result_cache
: désactivée par défaut. -
unload_s3_format
:PARQUET
par défaut.
Pour plus d'informations sur l'utilisation de ces options, consultez Intégration Amazon Redshift pour Apache Spark. Nous vous recommandons de ne pas activer
autopushdown.s3_result_cache
lorsque vous effectuez des opérations mixtes (lecture et écriture), car les résultats mis en cache peuvent contenir des informations périmées. L'option unload_s3_format
est définie sur PARQUET
par défaut pour la commande UNLOAD
, afin d'améliorer les performances et de réduire les coûts de stockage. Pour utiliser le comportement par défaut de la commande UNLOAD
, réinitialisez l'option sur TEXT
.
Nouvelle option de chiffrement pour la lecture
Par défaut, les données du dossier temporaire qui AWS Glue utilisé lorsqu'il lit les données de la table Amazon Redshift est crypté à l'aide SSE-S3
du chiffrement. Pour utiliser les clés gérées par le client à partir de AWS Key Management Service (AWS KMS) pour chiffrer vos données, vous pouvez définir d'("sse_kms_key"
→ kmsKey)
où KSMKey est l'identifiant de la clé AWS KMS, au lieu de l'ancienne option de configuration dans ("extraunloadoptions" →
s"ENCRYPTED KMS_KEY_ID '$kmsKey'")
AWS Glue version 3.0.
datasource0 = glueContext.create_dynamic_frame.from_catalog( database = "
database-name
", table_name = "table-name
", redshift_tmp_dir = args["TempDir"], additional_options = {"sse_kms_key":"<KMS_KEY_ID
>"}, transformation_ctx = "datasource0" )
Prise en charge de l'URL JDBC basée sur IAM
Le nouveau connecteur prend en charge l'URL JDBC basée sur IAM, ce qui vous évite de transmettre un nom d'utilisateur/mot de passe ou un secret. Avec une URL JDBC basée sur IAM, le connecteur utilise le rôle d'exécution des tâches pour accéder à la source de données Amazon Redshift.
Étape 1 : Joignez la politique minimale requise suivante à votre AWS Glue rôle d'exécution de la tâche.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": [ "arn:aws:redshift:<region>:<account>:dbgroup:<cluster name>/*", "arn:aws:redshift:*:<account>:dbuser:*/*", "arn:aws:redshift:<region>:<account>:dbname:<cluster name>/<database name>" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "redshift:DescribeClusters", "Resource": "*" } ] }
Étape 2 : utilisez l'URL JDBC basée sur IAM comme suit. Spécifiez une nouvelle option DbUser
avec le nom d'utilisateur Amazon Redshift qui permet de vous connecter.
conn_options = { // IAM-based JDBC URL "url": "jdbc:redshift:iam://
<cluster name>
:<region>/<database name>", "dbtable": dbtable, "redshiftTmpDir": redshiftTmpDir, "aws_iam_role": aws_iam_role, "DbUser": "<Redshift User name>" // required for IAM-based JDBC URL } redshift_write = glueContext.write_dynamic_frame.from_options( frame=dyf, connection_type="redshift", connection_options=conn_options ) redshift_read = glueContext.create_dynamic_frame.from_options( connection_type="redshift", connection_options=conn_options )
Note
DynamicFrame
ne prend actuellement en charge qu'une URL JDBC basée sur IAM avec un
DbUser
dans le flux de travail GlueContext.create_dynamic_frame.from_options
.
Migration à partir de AWS Glue de la version 3.0 à la version 4.0
Dans AWS Glue 4.0, les tâches ETL ont accès à un nouveau connecteur Amazon Redshift Spark et à un nouveau pilote JDBC avec différentes options et configurations. Le nouveau connecteur et le nouveau pilote Amazon Redshift ont été conçus dans un souci de performance et garantissent la cohérence transactionnelle de vos données. Ces produits sont décrits dans la documentation Amazon Redshift. Pour plus d’informations, consultez :
Restriction portant sur les noms et les identifiants des tables et des colonnes
Concernant le nom de la table Redshift, les exigences du nouveau connecteur et du nouveau pilote Amazon Redshift Spark sont plus restreintes. Pour plus d'informations, consultez la section Noms et identifiants qui explique comment définir le nom de votre table Amazon Redshift. Le flux de travail des signets de tâches peut ne pas fonctionner avec un nom de table non conforme aux règles et avec certains caractères (l'espace, par exemple).
Si vous utilisez d'anciennes tables dont les noms ne sont pas conformes aux règles relatives aux noms et identifiants et que vous rencontrez des problèmes liés aux signets (tâches dédiées au retraitement des données d'anciennes tables Amazon Redshift), nous vous recommandons de renommer vos tables. Pour plus d'informations, consultez les exemples d'utilisation de la commande ALTER TABLE.
Modification de tempformat par défaut dans le Dataframe
Le AWS Glue version 3.0 Le connecteur Spark utilise le tempformat
format CSV par défaut lors de l'écriture sur Amazon Redshift. Pour être cohérent, dans AWS Glue version 3.0, la valeur par défaut
DynamicFrame
est toujours celle tempformat
à utiliserCSV
. Si vous avez déjà utilisé Spark Dataframe APIs directement avec le connecteur Amazon Redshift Spark, vous pouvez définir explicitement le format CSV dans tempformat
DataframeReader
les options/. Writer
Sinon, tempformat
est défini par défaut sur AVRO
dans le nouveau connecteur Spark.
Changement de comportement : mapper le type de données Amazon Redshift REAL sur le type de données FLOAT de Spark au lieu de DOUBLE
Entrée AWS Glue version 3.0, Amazon Redshift REAL
est converti en un type Spark
DOUBLE
. Le nouveau connecteur Amazon Redshift Spark a mis à jour le comportement afin que le type Amazon Redshift
REAL
soit converti en type FLOAT
de Spark et inversement. Si, conformément à un ancien cas d'utilisation, vous souhaitez toujours que le type REAL
Amazon Redshift soit mappé sur un type Spark DOUBLE
, vous pouvez utiliser la solution alternative suivante :
-
Pour un
DynamicFrame
, mappez le typeFloat
sur un typeDouble
avecDynamicFrame.ApplyMapping
. Pour unDataframe
, vous devez utilisercast
.
Exemple de code :
dyf_cast = dyf.apply_mapping([('a', 'long', 'a', 'long'), ('b', 'float', 'b', 'double')])