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.
Déchargez les données d'un cluster Amazon Redshift entre différents comptes vers Amazon S3
Créée par Andrew Kamel () AWS
Dépôt de code : aws-unload-redshift-to-s3-python | Environnement : Production | Technologies : bases de données ; analyse ; sans serveur |
Charge de travail : Open source | AWSservices : AWS Lambda ; Amazon Redshift ; Amazon S3 ; Secrets Manager AWS |
Récapitulatif
Lorsque vous testez des applications, il est utile de disposer de données de production dans votre environnement de test. L'utilisation des données de production peut vous donner une évaluation plus précise de l'application que vous développez.
Ce modèle extrait les données d'un cluster Amazon Redshift dans un environnement de production vers un bucket Amazon Simple Storage Service (Amazon S3) dans un environnement de développement sur Amazon Web Services ().AWS
Le schéma décrit les étapes de configuration DEV des deux PROD comptes, notamment les suivantes :
Ressources requises
AWS Identity and Access Management (IAM) rôles
Ajustements réseau apportés aux sous-réseaux, aux groupes de sécurité et au cloud privé virtuel (VPC) pour prendre en charge la connexion Amazon Redshift
Exemple de AWS Lambda fonction avec un environnement d'exécution Python pour tester l'architecture
Pour accorder l'accès au cluster Amazon Redshift, le modèle permet de stocker les AWS Secrets Manager informations d'identification pertinentes. L'avantage est de disposer de toutes les informations nécessaires pour se connecter directement au cluster Amazon Redshift sans avoir besoin de savoir où se trouve le cluster Amazon Redshift. De plus, vous pouvez contrôler l'utilisation du secret.
Le secret enregistré dans Secrets Manager inclut l'hôte du cluster Amazon Redshift, le nom de la base de données, le port et les informations d'identification pertinentes.
Pour plus d'informations sur les considérations de sécurité liées à l'utilisation de ce modèle, consultez la section Bonnes pratiques.
Conditions préalables et limitations
Prérequis
Un cluster Amazon Redshift exécuté dans le compte PROD
Un compartiment S3 créé dans le DEV compte
VPCpeering entre les PROD comptes DEV et, avec des tables de routage ajustées en conséquence
DNSnoms d'hôte et DNS résolution activés pour les deux pairs VPCs
Limites
En fonction de la quantité de données que vous souhaitez interroger, le délai d'expiration de la fonction Lambda peut être dépassé.
Si votre exécution prend plus de temps que le délai maximum Lambda (15 minutes), utilisez une approche asynchrone pour votre code Lambda. L'exemple de code de ce modèle utilise la bibliothèque psycopg2
pour Python, qui ne prend actuellement pas en charge le traitement asynchrone. Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir Services AWS par région
. Pour des points de terminaison spécifiques, consultez la page Points de terminaison et quotas du service, puis choisissez le lien vers le service.
Architecture
Le schéma suivant montre l'architecture cible, avec DEV les PROD comptes et.
Le schéma suivant illustre le flux de travail suivant :
La fonction Lambda du DEV compte IAM joue le rôle requis pour accéder aux informations d'identification Amazon Redshift dans Secrets Manager du compte. PROD
La fonction Lambda récupère ensuite le secret du cluster Amazon Redshift.
La fonction Lambda du DEV compte utilise les informations pour se connecter au cluster Amazon Redshift du compte via PROD le peered. VPCs
La fonction Lambda envoie ensuite une commande de déchargement pour interroger le cluster Amazon Redshift dans le compte. PROD
Le cluster Amazon Redshift du PROD compte assume le IAM rôle approprié pour accéder au compartiment S3 du compte. DEV
Le cluster Amazon Redshift décharge les données demandées dans le compartiment S3 du compte. DEV
Interrogation de données depuis Amazon Redshift
Le schéma suivant montre les rôles utilisés pour récupérer les informations d'identification Amazon Redshift et se connecter au cluster Amazon Redshift. Le flux de travail est lancé par la fonction Lambda.
Le schéma suivant illustre le flux de travail suivant :
L'
CrossAccount-SM-Read-Role
entrée dans le DEV compte suppose l'SM-Read-Role
entrée dans le PROD compte.Le
SM-Read-Role
rôle utilise la politique ci-jointe pour récupérer le secret auprès de Secrets Manager.Les informations d'identification sont utilisées pour accéder au cluster Amazon Redshift.
Chargement de données vers Amazon S3
Le schéma suivant montre le processus de lecture-écriture entre comptes permettant d'extraire des données et de les télécharger sur Amazon S3. Le flux de travail est lancé par la fonction Lambda. Le modèle enchaîne IAM les rôles dans Amazon Redshift. La commande de déchargement qui provient du cluster Amazon Redshift suppose CrossAccount-S3-Write-Role
le, puis suppose le. S3-Write-Role
Ce chaînage de rôles permet à Amazon Redshift d'accéder à Amazon S3.
Le flux de travail comprend les étapes suivantes :
L'
CrossAccount-SM-Read-Role
entrée dans le DEV compte suppose l'SM-Read-Role
entrée dans le PROD compte.SM-Read-Role
récupère les informations d'identification Amazon Redshift auprès de Secrets Manager.La fonction Lambda se connecte au cluster Amazon Redshift et envoie une requête.
Le cluster Amazon Redshift suppose que.
CrossAccount-S3-Write-Role
Cela
CrossAccount-S3-Write-Role
suppose que c'S3-Write-Role
est dans le DEV compte.Les résultats de la requête sont déchargés dans le compartiment S3 du DEV compte.
Outils
Services AWS
AWS Key Management Service (AWS KMS) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
AWS Lambda est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
Amazon Redshift est un service d'entrepôt de données géré à l'échelle du pétaoctet dans le cloud. AWS
AWS Secrets Managervous permet de remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, en API appelant Secrets Manager pour récupérer le secret par programmation.
Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
Référentiel de code
Le code de ce modèle est disponible dans le dépôt GitHub unload-redshift-to-s3-python
Bonnes pratiques
Avertissement de sécurité
Avant de mettre en œuvre cette solution, tenez compte des recommandations de sécurité importantes suivantes :
N'oubliez pas que la connexion des comptes de développement et de production peut augmenter la portée et réduire le niveau de sécurité global. Nous recommandons de ne déployer cette solution que temporairement, en extrayant la portion de données requise, puis en détruisant immédiatement les ressources déployées. Pour détruire les ressources, vous devez supprimer la fonction Lambda, supprimer tous les IAM rôles et politiques créés pour cette solution et révoquer tout accès réseau accordé entre les comptes.
Consultez vos équipes de sécurité et de conformité avant de copier des données depuis des environnements de production vers des environnements de développement. Les informations personnellement identifiables (PII), les informations de santé protégées (PHI) et les autres données confidentielles ou réglementées ne doivent généralement pas être copiées de cette manière. Copiez uniquement les informations non confidentielles accessibles au public (par exemple, les données boursières publiques provenant d'une interface de boutique). Envisagez de tokeniser ou d'anonymiser les données, ou de générer des données de test synthétiques, au lieu d'utiliser des données de production dans la mesure du possible. L'un des principes de AWS sécurité consiste à tenir les gens à l'écart des données. En d'autres termes, les développeurs ne doivent pas effectuer d'opérations dans le compte de production.
Limitez l'accès à la fonction Lambda dans le compte de développement car elle peut lire les données du cluster Amazon Redshift dans l'environnement de production.
Pour éviter de perturber l'environnement de production, appliquez les recommandations suivantes :
Utilisez un compte de développement dédié distinct pour les activités de test et de développement.
Mettez en œuvre des contrôles d'accès réseau stricts et limitez le trafic entre les comptes au strict nécessaire.
Surveillez et auditez l'accès à l'environnement de production et aux sources de données.
Mettez en œuvre des contrôles d'accès basés sur le principe du moindre privilège pour toutes les ressources et tous les services concernés.
Passez régulièrement en revue et alternez les informations d'identification, telles que AWS Secrets Manager les secrets et les clés d'accès aux IAM rôles.
Reportez-vous à la documentation de sécurité suivante pour les services utilisés dans cet article :
La sécurité est une priorité absolue lors de l'accès aux données et aux ressources de production. Suivez toujours les meilleures pratiques, mettez en œuvre des contrôles d'accès fondés sur le moindre privilège, et révisez et mettez à jour régulièrement vos mesures de sécurité.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Créez un secret pour le cluster Amazon Redshift. | Pour créer le secret du cluster Amazon Redshift, procédez comme suit :
| DevOps ingénieur |
Créez un rôle pour accéder à Secrets Manager. | Pour créer le rôle, procédez comme suit :
| DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Créez un rôle pour accéder au compartiment S3. | Pour créer le rôle permettant d'accéder au compartiment S3, procédez comme suit :
| DevOps ingénieur |
Créez le rôle Amazon Redshift. | Pour créer le rôle Amazon Redshift, procédez comme suit :
| DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Déployez la fonction Lambda. | Pour déployer une fonction Lambda dans le peeredVPC, procédez comme suit :
| DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Importez les ressources requises. | Pour importer les ressources requises, exécutez les commandes suivantes :
| Développeur d'applications |
Exécutez la fonction de gestion Lambda. | La fonction Lambda utilise AWS Security Token Service (AWS STS) pour l'accès entre comptes et la gestion des informations d'identification temporaires. La fonction utilise l' AssumeRole APIopération pour assumer temporairement les autorisations du Pour exécuter la fonction Lambda, utilisez l'exemple de code suivant :
| Développeur d'applications |
Découvrez le secret. | Pour obtenir le secret Amazon Redshift, utilisez l'exemple de code suivant :
| Développeur d'applications |
Exécutez la commande de déchargement. | Pour décharger les données dans le compartiment S3, utilisez l'exemple de code suivant.
| Développeur d'applications |
Tâche | Description | Compétences requises |
---|---|---|
Supprimez la fonction Lambda. | Pour éviter d'encourir des coûts imprévus, supprimez les ressources et la connexion entre les DEV comptes et. PROD Pour supprimer la fonction Lambda, procédez comme suit :
| DevOps ingénieur |
Supprimez les IAM rôles et les politiques. | Supprimez les IAM rôles et les politiques des PROD comptes DEV et. Dans le DEV compte, procédez comme suit :
Dans le PROD compte, procédez comme suit :
| DevOps ingénieur |
Supprimez le secret dans Secrets Manager. | Pour supprimer le secret, procédez comme suit :
| DevOps ingénieur |
Supprimez les règles VPC de peering et de groupe de sécurité. | Pour supprimer les règles VPC de peering et de groupe de sécurité, procédez comme suit :
| DevOps ingénieur |
Supprimez les données du compartiment S3. | Pour supprimer les données d'Amazon S3, procédez comme suit :
| DevOps ingénieur |
Nettoyez AWS KMS les clés. | Si vous avez créé des AWS KMS clés personnalisées pour le chiffrement, procédez comme suit :
| DevOps ingénieur |
Vérifiez et supprimez les CloudWatch journaux Amazon. | Pour supprimer les CloudWatch journaux, procédez comme suit :
| DevOps ingénieur |
Ressources connexes
Informations supplémentaires
Après avoir déchargé les données d'Amazon Redshift vers Amazon S3, vous pouvez les analyser à l'aide d'Amazon Athena.
Amazon Athena est un service de requêtes de données volumineuses qui s'avère utile lorsque vous devez accéder à de gros volumes de données. Vous pouvez utiliser Athena sans avoir à approvisionner des serveurs ou des bases de données. Athena prend en charge les requêtes complexes et vous pouvez l'exécuter sur différents objets.
Comme pour la plupart des autres Services AWS, le principal avantage d'Athena est qu'elle offre une grande flexibilité dans la façon dont vous exécutez les requêtes sans complexité supplémentaire. Lorsque vous utilisez Athena, vous pouvez interroger différents types de données, tels que CSV etJSON, dans Amazon S3 sans modifier le type de données. Vous pouvez interroger des données provenant de différentes sources, y compris extérieures AWS. Athena réduit la complexité car vous n'avez pas à gérer de serveurs. Athena lit les données directement depuis Amazon S3 sans les charger ni les modifier avant que vous n'exécutiez la requête.