Caricamento di dati da host remoti - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Caricamento di dati da host remoti

Puoi utilizzare il comando COPY per caricare dati in parallelo da uno o più host remoti, come EC2 istanze Amazon o altri computer. COPY si connette agli host remoti utilizzando SSH ed esegue comandi sugli host remoti per generare output di testo.

L'host remoto può essere un'istanza Amazon EC2 Linux o un altro computer Unix o Linux configurato per accettare connessioni SSH. Questa guida presuppone che il tuo host remoto sia un' EC2istanza Amazon. Se la procedura è diversa per un altro computer, la guida indicherà la differenza.

Amazon Redshift può connettersi a più host e può aprire più connessioni SSH per ogni host. Amazon Redshift invia un comando univoco attraverso ogni connessione per generare output di testo per l'output standard dell'host, che legge quindi come un file di testo.

Prima di iniziare

Prima di iniziare, devi disporre dei seguenti requisiti:

  • Una o più macchine host, come EC2 le istanze Amazon, a cui puoi connetterti tramite SSH.

  • Origini dati negli host.

    Saranno forniti i comandi che il cluster Amazon Redshift eseguirà sugli host per generare l'output di testo. Una volta che il cluster si connette a un host, il comando COPY esegue i comandi, legge il testo dall'output standard degli host e carica i dati in parallelo in una tabella Amazon Redshift. L'output di testo deve essere in un formato importabile dal comando COPY. Per ulteriori informazioni, consulta Preparazione dei dati di input

  • Accesso agli host dal computer.

    Per un' EC2 istanza Amazon, utilizzerai una connessione SSH per accedere all'host. Devi accedere all'host per aggiungere la chiave pubblica del cluster Amazon Redshift al file di chiavi autorizzate dell'host.

  • Un cluster Amazon Redshift in esecuzione.

    Per informazioni su come avviare un cluster, consultare Guida alle operazioni di base di Amazon Redshift.

Processo di caricamento dei dati

Questa sezione illustra il processo di caricamento dei dati da host remoti. Le sezioni seguenti forniscono le informazioni dettagliate necessarie per completare ogni fase.

Fase 1: recupero degli indirizzi IP dei nodi del cluster e della chiave pubblica del cluster

Sarà utilizzato l'indirizzo IP per ciascun nodo del cluster per configurare i gruppi di sicurezza dell'host in modo da consentire l'accesso dal cluster Amazon Redshift utilizzando questi indirizzi IP.

Per recuperare la chiave pubblica del cluster e gli indirizzi IP dei nodi del cluster tramite la console
  1. Accedere alla console di gestione di Amazon Redshift.

  2. Nel riquadro di navigazione scegli Clusters (Cluster).

  3. Selezionare il cluster dall'elenco.

  4. Individuare il gruppo SSH Ingestion Settings (Impostazioni di inserimento SSH).

    Prendere nota dei valori di Cluster Public Key (Chiave pubblica del cluster) e Node IP addresses (Indirizzi IP del nodo). Queste informazioni saranno utili per le fasi successive.

    Schermata del gruppo SSH Ingestion Settings che mostra gli indirizzi IP della chiave pubblica del cluster e del nodo.

    Per configurare l'host affinché accetti la connessione da Amazon Redshift, saranno utilizzati gli indirizzi IP della fase 3. A seconda del tipo di host a cui ti connetti e se si trova in un VPC, utilizzerai gli indirizzi IP pubblici o gli indirizzi IP privati.

Per recuperare la chiave pubblica del cluster e gli indirizzi IP dei nodi del cluster tramite la CLI di Amazon Redshift, emettere il comando describe-clusters.

Per esempio:

aws redshift describe-clusters --cluster-identifier <cluster-identifier>

La risposta includerà l'elenco ClusterPublicKey e l'elenco di indirizzi IP privati e pubblici, simili ai seguenti:

{ "Clusters": [ { "VpcSecurityGroups": [], "ClusterStatus": "available", "ClusterNodes": [ { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "LEADER", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-0", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-1", "PublicIPAddress": "10.nnn.nnn.nnn" } ], "AutomatedSnapshotRetentionPeriod": 1, "PreferredMaintenanceWindow": "wed:05:30-wed:06:00", "AvailabilityZone": "us-east-1a", "NodeType": "dc2.large", "ClusterPublicKey": "ssh-rsa AAAABexamplepublickey...Y3TAl Amazon-Redshift", ... ... }

Per recuperare la chiave pubblica del cluster e gli indirizzi IP del nodo del cluster per il cluster utilizzando l'API Amazon Redshift, utilizza l' DescribeClusters azione. Per ulteriori informazioni, consulta describe-clusters nella Amazon Redshift CLI Guide o DescribeClustersnella Amazon Redshift API Guide.

Fase 2: Aggiunta della chiave pubblica del cluster Amazon Redshift al file di chiavi autorizzate di ciascun host

Aggiungere la chiave pubblica del cluster a ciascun file delle chiavi autorizzate dell'host in modo che l'host riconosca il cluster Amazon Redshift e accetti la connessione SSH.

Come aggiungere la chiave pubblica del cluster Amazon Redshift al file di chiavi autorizzate di ciascun host
  1. Accedere all'host tramite una connessione SSH.

    Per informazioni sulla connessione a un'istanza tramite SSH, consulta Connect to Your Instance nella Amazon EC2 User Guide.

  2. Copiare la chiave pubblica di Amazon Redshift dalla console o dal testo di risposta della CLI.

  3. Copiare e incollare i contenuti della chiave pubblica nel file /home/<ssh_username>/.ssh/authorized_keys nell'host remoto. Il valore <ssh_username> deve corrispondere al valore per il campo "username" nel file manifest. Includere la stringa completa, compreso il prefisso "ssh-rsa " e il suffisso "Amazon-Redshift". Ad esempio:

    ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift

Fase 3: Configurazione dell'host affinché accetti tutti gli indirizzi IP del cluster Amazon Redshift

Se lavori con un' EC2 istanza Amazon o un cluster Amazon EMR, aggiungi le regole in entrata al gruppo di sicurezza dell'host per consentire il traffico proveniente da ogni nodo del cluster Amazon Redshift. In Type (Tipo), seleziona SSH con il protocollo TCP sulla porta 22. In Origine, inserire gli indirizzi IP dei nodi del cluster di Amazon Redshift recuperati in Fase 1: recupero degli indirizzi IP dei nodi del cluster e della chiave pubblica del cluster. Per informazioni sull'aggiunta di regole a un gruppo di EC2 sicurezza Amazon, consulta Authorizing Inbound Traffic for Your Instances nella Amazon EC2 User Guide.

Utilizza gli indirizzi IP privati quando:

  • Hai un cluster Amazon Redshift che non si trova in un Virtual Private Cloud (VPC) e un'istanza EC2 Amazon -Classic, entrambi situati nella stessa regione. AWS

  • Hai un cluster Amazon Redshift che si trova in un VPC e un'istanza Amazon EC2 -VPC, entrambi nella stessa regione AWS e nello stesso VPC.

In alternativa, utilizza gli indirizzi IP pubblici.

Per ulteriori informazioni sull'utilizzo di Amazon Redshift in un VPC, consulta Gestione dei cluster nel cloud privato virtuale (VPC) nella Guida alla gestione di Amazon Redshift.

Fase 4: ottenere una chiave pubblica per l'host

Facoltativamente, è possibile fornire la chiave pubblica dell'host nel file manifest in modo che Amazon Redshift possa identificare l'host. Il comando COPY non richiede la chiave pubblica dell'host ma, per motivi di sicurezza, consigliamo vivamente di utilizzare una chiave pubblica per prevenire gli attacchi «». man-in-the-middle

È possibile trovare la chiave pubblica dell'host nel seguente percorso, dove <ssh_host_rsa_key_name> è il nome univoco della chiave pubblica dell'host:

: /etc/ssh/<ssh_host_rsa_key_name>.pub
Nota

Amazon Redshift supporta solo le chiavi RSA. Non supportiamo le chiavi DSA.

Quando crei il file manifest alla fase 5, incollerai il testo della chiave pubblica nel campo "Public Key" (Chiave pubblica) nella voce del file manifest.

Fase 5: creazione di un file manifest

Il comando COPY può connettersi a più host tramite SSH e può creare più connessioni SSH per ogni host. COPY esegue un comando attraverso ogni connessione host, quindi carica l'output dai comandi in parallelo nella tabella. Il file manifest è un file di testo in formato JSON che Amazon Redshift utilizza per la connessione all'host. Il file manifest specifica gli endpoint dell'host SSH e i comandi che vengono eseguiti sugli host per restituire i dati ad Amazon Redshift. Facoltativamente, puoi includere la chiave pubblica dell'host, il nome utente di login e un flag obbligatorio per ogni voce.

Crea il file manifest nel computer locale. In un passaggio successivo, il file viene caricato in Amazon S3.

Il file manifest è nel seguente formato:

{ "entries": [ {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "<host_user_name>"}, {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "host_user_name"} ] }

Il file manifest contiene un costrutto "entries" per ogni connessione SSH. Ogni voce rappresenta una singola connessione SSH. È possibile avere più connessioni a un singolo host o più connessioni a più host. Le doppie virgolette sono richieste come mostrato, sia per i nomi dei campi sia per i valori. L'unico valore che non necessita di doppie virgolette è il valore booleano true o false per il campo obbligatorio.

Di seguito sono descritti i campi del file manifest.

endpoint

L'indirizzo URL o l'indirizzo IP dell'host. Ad esempio, "ec2-111-222-333.compute-1.amazonaws.com" o "22.33.44.56"

command

Il comando che verrà eseguito dall'host per generare output di testo o binario (gzip, lzop, or bzip2). Il comando può essere qualsiasi comando che l'utente "host_user_name" è autorizzato a eseguire. Il comando può essere semplice come stampare un file o eseguire una query su un database o lanciare uno script. L'output (file di testo o file binario gzip, lzop o bzip2) deve essere in un formato che il comando COPY di Amazon Redshift possa importare. Per ulteriori informazioni, consulta Preparazione dei dati di input.

publickey

(Facoltativo) La chiave pubblica dell'host. Se fornita, Amazon Redshift userà la chiave pubblica per identificare l'host. Se la chiave pubblica non viene fornita, Amazon Redshift non tenterà l'identificazione dell'host. Ad esempio, se la chiave pubblica dell'host remoto è ssh-rsa AbcCbaxxx…xxxDHKJ root@amazon.com, digita il seguente testo nel campo della chiave pubblica: AbcCbaxxx…xxxDHKJ.

mandatory

(Facoltativo) Indica se il comando COPY debba fallire se la connessione fallisce. Il valore predefinito è false. Se Amazon Redshift non riesce a effettuare almeno una connessione, il comando COPY avrà esito negativo.

username

(Facoltativo) Il nome utente che verrà utilizzato per accedere al sistema host ed eseguire il comando remoto. Il nome di login dell'utente deve essere lo stesso utilizzato per aggiungere la chiave pubblica al file delle chiavi autorizzate nella fase 2. Il nome utente predefinito è "redshift".

Il seguente esempio mostra un manifest completato per aprire quattro connessioni allo stesso host ed eseguire un comando diverso tramite ciascuna connessione:

{ "entries": [ {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata1.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata2.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata3.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata4.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"} ] }

Fase 6: Caricamento del file manifest in un bucket Amazon S3

Caricare il file manifest in un bucket Amazon S3. Se il bucket Amazon S3 non si trova nella stessa AWS regione del cluster Amazon Redshift, devi utilizzare l'REGIONopzione per specificare la AWS regione in cui si trova il manifest. Per ulteriori informazioni sulla creazione di un bucket Amazon S3 e sul caricamento di un file, consultare Guida per l'utente di Amazon Simple Storage Service.

Fase 7: esecuzione del comando COPY per il caricamento di dati

Eseguire un comando COPY per effettuare la connessione all'host e caricare i dati in una tabella Amazon Redshift. Nel comando COPY, specificare il percorso dell'oggetto Amazon S3 esplicito per il file manifest e includere l'opzione SSH. Ad esempio,

COPY sales FROM 's3://amzn-s3-demo-bucket/ssh_manifest' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|' SSH;
Nota

Se utilizzi la compressione automatica, il comando COPY esegue due operazioni di lettura dati, il che significa che eseguirà il comando remoto due volte. La prima operazione di lettura consiste nel fornire un campione per l'analisi della compressione e la seconda operazione di lettura carica effettivamente i dati. Se la doppia esecuzione del comando remoto può causare un problema, dati i potenziali effetti collaterali, è necessario disattivare la compressione automatica. Per disattivare la compressione automatica, esegui il comando COPY con l'opzione COMPUPDATE impostata su OFF. Per ulteriori informazioni, consulta Caricamento di tabelle con compressione automatica.