Migrer des données depuis Amazon Redshift

Présentation

Ce document décrit le processus de migration des données depuis Amazon Redshift vers BigQuery via des adresses IP publiques.

Si vous souhaitez transférer des données de votre instance Redshift via un cloud privé virtuel (VPC) sur des adresses IP privées, consultez la page Migrer des données Amazon Redshift avec un réseau VPC.

Utiliser le service de transfert de données BigQuery pour copier vos données d'un entrepôt de données Amazon Redshift vers BigQuery. Le service engager les agents de migration dans GKE et déclenche une opération de déchargement depuis Amazon Redshift vers une zone de préproduction dans un bucket Amazon S3. Ensuite, le service de transfert de données BigQuery transférera vos données du compartiment Amazon S3 vers BigQuery.

Ce schéma montre la circulation globale des données lors de la migration entre un entrepôt de données Amazon Redshift et un entrepôt BigQuery.

Avant de commencer

Cette section décrit le processus de configuration d'une migration de données d'Amazon Redshift vers BigQuery. Voici la procédure à suivre :

  • Exigences de Google Cloud : remplissez les conditions préalables et définissez les autorisations sur Google Cloud.
  • Accordez l'accès à votre cluster Amazon Redshift.
  • Accordez l'accès au bucket Amazon S3 que vous utiliserez pour héberger temporairement les données. Prenez note de la paire de clés d'accès, car vous en aurez besoin ultérieurement.
  • Configurez la migration avec le service de transfert de données BigQuery. Vous avez alors besoin de :
    • L'URL JDBC Amazon Redshift. Suivez ces instructions pour obtenir l'URL JDBC.
    • Le nom d'utilisateur et le mot de passe de votre base de données Amazon Redshift.
    • La paire de clés d'accès AWS obtenue à l'étape Accorder l'accès à votre bucket S3.
    • L'URI du bucket Amazon S3. Nous vous recommandons de définir une règle de cycle de vie pour ce bucket afin d'éviter des frais inutiles. Nous recommandons une durée d'expiration de 24 heures afin de laisser suffisamment de temps pour le transfert de toutes les données vers BigQuery.

Autorisations requises

Avant de créer un transfert Amazon Redshift :

  1. Assurez-vous que la personne qui crée le transfert dispose des autorisations requises suivantes dans BigQuery :

    • Autorisations bigquery.transfers.update pour créer le transfert
    • Les autorisations bigquery.datasets.get et bigquery.datasets.update sur l'ensemble de données cible

    Le rôle IAM prédéfini bigquery.admin inclut les autorisations bigquery.transfers.update, bigquery.datasets.update et bigquery.datasets.get. Pour en savoir plus sur les rôles IAM dans le cadre du service de transfert de données BigQuery, consultez la documentation de référence sur le Contrôle des accès.

  2. Consultez la documentation d'Amazon S3 pour vous assurer que vous avez configuré toutes les autorisations nécessaires pour activer le transfert. Au minimum, la stratégie AWS gérée AmazonS3ReadOnlyAccess doit être appliquée aux données sources Amazon S3.

Exigences de Google Cloud

Pour assurer la réussite de la migration de l'entrepôt de données Amazon Redshift, assurez-vous de respecter les conditions préalables suivantes sur Google Cloud.

  1. Sélectionnez ou créez un projet Google Cloud pour stocker vos données de migration.

    • Dans Google Cloud Console, accédez à la page de sélection du projet.

      Accéder au sélecteur de projet

    • Sélectionnez ou créez un projet Google Cloud.

  2. Activez l'API du service de transfert de données BigQuery.

    Dans Google Cloud Console, cliquez sur le bouton Enable (Activer) de la page BigQuery Data Transfer Service API (API de service de transfert de données BigQuery).

    Activer une API

    BigQuery est automatiquement activé dans les nouveaux projets. Pour un projet existant, vous devrez peut-être activer l'API BigQuery. Une coche verte indique que vous avez déjà activé l'API.

    API activée

  3. Créez un ensemble de données BigQuery pour stocker vos données. Vous n'avez pas besoin de créer de tables.

Accorder l'accès à votre cluster Amazon Redshift

Suivez les instructions d'Amazon pour ajouter les adresses IP suivantes à la liste d'autorisation. Vous pouvez autoriser les adresses IP correspondant à l'emplacement de votre ensemble de données ou toutes les adresses IP du tableau ci-dessous. Les adresses IP suivantes, qui appartiennent à Google, sont réservées aux migrations de données Amazon Redshift.

Zones régionales

Description de la région Nom de la région Adresses IP
Amériques
Iowa us-central1 34.121.70.114
34.78.1.11.1
34.122.223.84
34.121.145.212
35.232.1.105
35.202.145.227
35.226.82.216
35.225.241.102
Las Vegas us-west4 34.125.53.201
34.125.69.174
34.125.159.85
34.125.152.1
34.125.195.166
34.125.50.249
34.125.68.55
34.125.91.116
Los Angeles us-west2 35.236.59.167
34.94.132.139
34.94.207.21
34.94.81.187
34.94.88.122
35.235.101.187
34.94.238.66
34.94.195.77
Montréal northamerica-northeast1 34.95.20.253
35.203.31.1919
34.95.22.233
34.59.15.99
35.203.12.23
35.203.39.46
35.203.116.49
35.203.104.223
Virginie du Nord us-east4 35.2445.95.250
35.245.126.228
35.236.225.172
35.245.86.140
35.199.31.35
35.199.19.115
35.230.167.48
35.245.128.132
35.245.111.126
35.236.209.21
Oregon us-west1 35.197.117.207
35.199.178.12
35.197.86.233
34.82.155.140
35.247.28.48
35.247.31.246
35.247.106.13
34.105.85.54
Salt Lake City us-west3 34.106.37.58
34.106.85.113
34.106.28.153
34.106.64.121
34.106.246.131
34.106.56.150
34.106.41.31
34.106.182.92
São Paulo southamerica-east1 35.199.88.228
34.95.169.140
35.198.53.30
34.95.144.215
35.247.250.120
35.247.255.158
34.95.231.121
35.198.8.157
Caroline du Sud us-east1 35.196.207.183
35.237.231.98
104.196.102.222
35.231.13.201
34.75.129.215
34.75.127.9
35.229.36.137
35.237.91.139
Europe
Belgique europe-west1 35.24.36.149
35.205.171.56
34.76.234.4
35.205.38.234
34.77.237.73
35.195.107.238
35.195.52.87
34.76.102.189
Finlande europe-north1 35.228.35.94
35.228.183.156
35.228.211.18
35.228.146.84
35.228.103.114
35.228.53.184
35.228.203.85
35.228.183.138
Francfort europe-west3 35.246.153.144
35.198.80.78
35.246.181.106
35.246.211.135
34.89.165.108
35.198.68.187
35.242.223.6
34.89.137.180
Londres europe-west2 35.189.119.113
35.189.101.107
35.189.69.131
35.197.205.93
35.189.121.178
35.189.121.41
35.189.85.30
35.197.195.192
Pays-Bas europe-west4 35.204.237.173
35.204.18.163
34.91.86.224
34.90.184.136
34.91.115.67
34.90.218.6
34.91.147.143
34.93.253.1
Varsovie europe-central2 34.118.72.8
34.118.45.245
34.118.69.169
34.116.244.189
34.116.170.150
34.118.97.148
34.116.148.164
34.116.168.127
Zurich europe-west6 34.65.205.160
34.65.121.140
34.65.196.143
34.65.9.133
34.65.156.193
34.65.16.124
34.65.233.83
34.65.168.250
Asie-Pacifique
Delhi asia-south2 34.126.212.96
34.126.212.85
34.126.208.224
34.126.212.94
34.126.208.226
34.126.212.232
34.126.212.93
34.126.212.206
Hong Kong asia-east2 34.92.245.180
35.241.116.105
35.220.240.216
35.220.188.244
34.92.196.78
34.92.165.209
35.220.193.228
34.96.153.178
Jakarta asia-southeast2 34.101.79.105
34.101.129.32
34.101.244.197
34.101.100.180
34.101.109.205
34.101.185.189
34.101.179.27
34.101.197.251
Melbourne australia-southeast2 34.126.196.95
34.126.196.106
34.126.196.126
34.126.196.96
34.126.196.112
34.126.106.99
34.126.196.76
34.126.196.68
Mumbai asia-south1 34.93.67.112
35.244.0.1
35.200.245.13
35.200.203.161
34.93.209.130
34.93.120.224
35.244.10,12
35.200.186.100
Osaka asia-northeast2 34.97.94.51
34.97.118.176
34.97.63.76
34.97.159.156
34.97.113.218
34.947.4.108
34.97.119.140
34.97.30.191
Séoul asia-northeast3 34.64.152.215
34.64.140.241
34.64.133.199
34.64.174.192
34.64.145.219
34.64.136.56
34.64.247.158
34.64.135.220
Singapour asia-southeast1 34.87.12.235
34.87.64.5
34.87.91.51
35.198.197.191
35.240.253.175
35.247.165.193
35.247.181.82
35.247.189.103
Sydney australia-southeast1 35.189.33.150
35.189.38.5
35.189.29.88
35.189.22.179
35.189.20.163
35.189.29.83
35.189.31.141
35.189.14.219
Taïwan asia-east1 35.222.20.20
35.194.177.253
34.80.17.79
34.80.178.20
34.80.174.198
35.201.132.11
35.201.223.177
35.229.251.28
35.185.155.147
35.194.232.172
Tokyo asia-northeast1 34.85.11.246
34.85.30.58
34.85.8.125
34.85.38.59
34.85.31.67
34.85.36.143
34.85.32.222
34.85.18.128
34.85.23.202
34.85.35.192

Zones multirégionales

Description de la zone multirégionale Nom de la zone multirégionale Adresses IP
Centres de données dans les États membres de l'Union européenne1 EU 34.76.156.158
34.76.156.172
34.76.136.146
34.76.29
34.76.156.232
34.76.156.81
34.76.156.246
34.76.102.206
34.76.129.246
34.76.121.168
Centres de données aux États-Unis US 35.185.196.212
35.197.102.120
35.185.224.10
35.185.228.170
35.197.5.235
35.185.206.139
35.197.67.234
35.197.38.65
35.185.202.229
35.185.200.120

1 Les données situées dans la zone multirégionale EU ne sont pas stockées dans les centres de données des régions europe-west2 (Londres) ou europe-west6 (Zurich).

Accorder l'accès à votre bucket Amazon S3

Vous devez disposer d'un bucket S3 à utiliser comme zone intermédiaire pour transférer les données Amazon Redshift vers BigQuery. Consultez la documentation Amazon pour obtenir des instructions détaillées.

  1. Nous vous recommandons de créer un utilisateur IAM Amazon dédié et de lui octroyer uniquement un accès en lecture à Redshift et un accès en lecture et en écriture à S3. Cette opération peut être effectuée en appliquant les stratégies existantes suivantes :

    Autorisations Amazon de migration Redshift

  2. Créez une paire de clés d'accès utilisateur IAM Amazon.

Facultatif : contrôler la charge de travail avec une file d'attente de migration distincte

Vous pouvez définir une file d'attente Amazon Redshift à des fins de migration pour limiter et séparer les ressources utilisées pour la migration. Cette file d'attente de migration peut être configurée avec un nombre maximum de requêtes simultanées. Vous pouvez ensuite associer un groupe d'utilisateurs de migration donné à la file d'attente, et utiliser ces identifiants lorsque vous configurez la migration pour transférer des données vers BigQuery. Le service de transfert aura uniquement accès à la file d'attente de migration.

Configurer un transfert Amazon Redshift

Pour configurer un transfert Amazon Redshift :

Console

  1. Accédez à la page "BigQuery" de Cloud Console.

    Accéder à BigQuery

  2. Cliquez sur Transfers (Transferts).

  3. Cliquez sur Add Transfer (Ajouter un transfert).

  4. Sur la page Nouveau transfert :

    • Dans le champ Source, sélectionnez Migration: Amazon Redshift.
    • Pour le champ Display name (Nom à afficher), saisissez le nom du transfert, par exemple My migration. Le nom à afficher peut être n'importe quelle valeur permettant d'identifier facilement le transfert si vous devez le modifier par la suite.
    • Pour Destination dataset (Ensemble de données de destination), sélectionnez l'ensemble de données approprié.

      Nouvelle migration Amazon Redshift - Général

  5. Sous Data Source Details (Détails de la source de données), poursuivez avec les détails spécifiques de votre transfert Amazon Redshift.

    • Pour JDBC connection url for Amazon Redshift, (URL de connexion JDBC pour Amazon Redshift), indiquez l'URL JDBC qui permet d'accéder à votre cluster Amazon Redshift.
    • Sous Username of your database (Nom d'utilisateur de votre base de données), saisissez le nom d'utilisateur de la base de données Amazon Redshift que vous souhaitez migrer.
    • Sous Password of your database (Mot de passe de votre base de données), entrez le mot de passe de la base de données.
    • Dans les champs Access key ID (ID de clé d'accès) et Secret access key (Clé d'accès secrète), saisissez la paire de clés d'accès obtenue à l'étape Accorder l'accès à votre bucket S3. s'affiche en haut de l'écran.
    • Pour Amazon S3 URI (URI Amazon S3), saisissez l'URI du bucket S3 que vous utiliserez comme zone intermédiaire.
    • Sous Amazon Redshift Schema (Schéma Amazon Redshift), saisissez le schéma Amazon Redshift à partir duquel vous souhaitez migrer des tables.
    • Sous Table name patterns (Modèles de nom de table), spécifiez un nom ou un modèle pour faire correspondre les noms de table dans le schéma. Vous pouvez utiliser des expressions régulières pour spécifier le modèle au format suivant : <table1Regex>;<table2Regex>. Le modèle doit suivre la syntaxe d'expression régulière Java.

      Nouveaux détails de la source de données de migration Amazon Redshift

    • (Facultatif) Dans la section Notification options (Options de notification) :

      • Cliquez sur le bouton pour activer les notifications par e-mail. Lorsque vous activez cette option, l'administrateur de transfert reçoit une notification par e-mail en cas d'échec de l'exécution du transfert.
      • Pour le champ Select a Pub/Sub topic (Sélectionner un sujet Pub/Sub), choisissez le nom de votre sujet ou cliquez sur Create a topic (Créer un sujet). Cette option configure les notifications d'exécution Cloud Pub/Sub pour votre transfert.

        Sujet Pub/Sub

  6. Cliquez sur Save.

  7. Cloud Console affiche tous les détails de configuration du transfert, y compris un Resource name (nom de ressource) pour ce transfert.

    Confirmation du transfert

bq

Saisissez la commande bq mk, puis spécifiez l'option de création de transfert --transfer_config. Les paramètres suivants sont également requis :

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params
bq mk \
--transfer_config \
--project_id=project_id \
--data_source=data_source \
--target_dataset=dataset \
--display_name=name \
--params='parameters'

Où :

  • project_id correspond à votre ID de projet Google Cloud. Si --project_id n'est pas spécifié, le projet par défaut est utilisé.
  • data_source correspond à la source de données : redshift.
  • dataset est l'ensemble de données cible de BigQuery pour la configuration de transfert.
  • name est le nom à afficher pour la configuration de transfert. Ce nom peut correspondre à toute valeur permettant d'identifier facilement le transfert si vous devez le modifier ultérieurement.
  • parameters contient les paramètres de la configuration de transfert créée au format JSON. Exemple : --params='{"param":"param_value"}'.

Les paramètres requis pour une configuration de transfert Amazon Redshift sont les suivants :

  • jdbc_url : l'URL de connexion JDBC permet de localiser le cluster Amazon Redshift.
  • database_username : nom d'utilisateur permettant d'accéder à votre base de données pour décharger les tables spécifiées.
  • database_password : mot de passe utilisé avec le nom d'utilisateur pour accéder à votre base de données afin de décharger les tables spécifiées.
  • access_key_id : ID de clé d'accès permettant de signer les requêtes adressées à AWS.
  • secret_access_key : clé d'accès secrète utilisée avec l'ID de clé d'accès pour signer les requêtes adressées à AWS.
  • s3_bucket : URI Amazon S3 commençant par "s3://" et spécifiant un préfixe pour les fichiers temporaires à utiliser.
  • redshift_schema : schéma Amazon Redshift contenant toutes les tables à migrer.
  • table_name_patterns : modèles de nom de table séparés par un point-virgule (;). Le format de table est une expression régulière pour la/les table(s) à migrer. Si non spécifié, toutes les tables situées sous le schéma de la base de données seront transférées.

Par exemple, la commande suivante crée un transfert Amazon Redshift nommé My Transfer avec un ensemble de données cible nommé mydataset et un projet dont l'ID est google.com:myproject.

bq mk \
--transfer_config \
--project_id=myproject \
--data_source=redshift \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"jdbc_url":"jdbc:postgresql://test-example-instance.sample.us-west-1.redshift.amazonaws.com:5439/dbname","database_username":"my_username","database_password":"1234567890","access_key_id":"A1B2C3D4E5F6G7H8I9J0","secret_access_key":"1234567890123456789012345678901234567890","s3_bucket":"s3://bucket/prefix","redshift_schema":"public","table_name_patterns":"table_name"}'

API

Utilisez la méthode projects.locations.transferConfigs.create et fournissez une instance de la ressource TransferConfig.

Java

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create redshift transfer config
public class CreateRedshiftTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String datasetRegion = "US";
    String jdbcUrl = "MY_JDBC_URL_CONNECTION_REDSHIFT";
    String dbUserName = "MY_USERNAME";
    String dbPassword = "MY_PASSWORD";
    String accessKeyId = "MY_AWS_ACCESS_KEY_ID";
    String secretAccessId = "MY_AWS_SECRET_ACCESS_ID";
    String s3Bucket = "MY_S3_BUCKET_URI";
    String redShiftSchema = "MY_REDSHIFT_SCHEMA";
    String tableNamePatterns = "*";
    String vpcAndReserveIpRange = "MY_VPC_AND_IP_RANGE";
    Map<String, Value> params = new HashMap<>();
    params.put("jdbc_url", Value.newBuilder().setStringValue(jdbcUrl).build());
    params.put("database_username", Value.newBuilder().setStringValue(dbUserName).build());
    params.put("database_password", Value.newBuilder().setStringValue(dbPassword).build());
    params.put("access_key_id", Value.newBuilder().setStringValue(accessKeyId).build());
    params.put("secret_access_key", Value.newBuilder().setStringValue(secretAccessId).build());
    params.put("s3_bucket", Value.newBuilder().setStringValue(s3Bucket).build());
    params.put("redshift_schema", Value.newBuilder().setStringValue(redShiftSchema).build());
    params.put("table_name_patterns", Value.newBuilder().setStringValue(tableNamePatterns).build());
    params.put(
        "migration_infra_cidr", Value.newBuilder().setStringValue(vpcAndReserveIpRange).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDatasetRegion(datasetRegion)
            .setDisplayName("Your Redshift Config Name")
            .setDataSourceId("redshift")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    createRedshiftTransfer(projectId, transferConfig);
  }

  public static void createRedshiftTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Cloud redshift transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Cloud redshift transfer was not created." + ex.toString());
    }
  }
}

Quotas et limites

BigQuery a un quota de charge de 15 To par tâche de chargement et par table. En interne, Amazon Redshift compresse les données de la table. La taille de la table exportée sera donc supérieure à celle indiquée par Amazon Redshift. Si vous envisagez de migrer une table de plus de 15 To, contactez d'abord l'assistance Google Cloud.

Notez qu'en utilisant ce service, des coûts peuvent être engagés en dehors de Google. Consultez les pages de tarification d'Amazon Redshift et d'Amazon S3 pour en savoir plus.

En raison du modèle de cohérence d'Amazon S3, il est possible que certains fichiers ne soient pas inclus dans le transfert vers BigQuery.

Étape suivante