Laden von Daten aus Remote-Hosts - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

Laden von Daten aus Remote-Hosts

Sie können den Befehl COPY verwenden, um Daten parallel Daten aus einem oder mehreren Remote-Hosts wie Amazon-EC2-Instances oder anderen Computern zu laden. COPY stellt über SSH eine Verbindung zu den Remote-Hosts her und führt Befehle auf den Remote-Hosts aus, um Textausgaben zu generieren.

Beim Remote-Host kann es sich um eine Amazon-EC2-Linux-Instance oder einen anderen Unix- oder Linux-Computer handeln, der für die Annahme von SSH-Verbindungen konfiguriert wurde. In diesem Handbuch wird angenommen, dass es sich bei Ihrem Remote-Host um eine Amazon-EC2-Instance handelt. Wenn sich das Verfahren für eine andere Art von Computer unterscheidet, wird im Handbuch auf den Unterschied hingewiesen.

Amazon Redshift kann eine Verbindung zu mehreren Hosts herstellen und für jeden Host mehrere SSH-Verbindungen öffnen. Amazon Redshift sendet über jede Verbindung einen eindeutigen Befehl, um die Textausgabe an die Standardausgabe des Hosts zu generieren. Amazon Redshift liest diese dann wie eine Textdatei.

Bevor Sie beginnen

Folgendes sollte vorhanden sein, bevor Sie den Vorgang starten:

  • Ein oder mehrere Host-Computer, beispielsweise Amazon-EC2-Instances, mit denen Sie über SSH eine Verbindung herstellen können.

  • Datenquellen auf den Hosts.

    Sie stellen Befehle bereit, die der Amazon-Redshift-Cluster auf den Hosts ausführt, um die Textausgabe zu generieren. Nachdem der Cluster eine Verbindung mit einem Host hergestellt hat, führt der COPY-Befehl die Befehle aus, liest den Text aus der Standardausgabe des Hosts und lädt die Daten parallel in eine Amazon-Redshift-Tabelle. Die Textausgabe muss ein Format aufweisen, das der COPY-Befehl verarbeiten kann. Weitere Informationen finden Sie unter Vorbereiten der Eingabedaten

  • Zugriff auf die Hosts von Ihrem Computer aus.

    Im Fall einer Amazon-EC2-Instance verwenden Sie eine SSH-Verbindung, um auf den Host zuzugreifen. Sie müssen auf den Host zugreifen, um den öffentlichen Schlüssel des Amazon-Redshift-Clusters zu der Datei des Hosts mit den autorisierten Schlüsseln hinzuzufügen.

  • Ein aktiver Amazon Redshift Cluster.

    Weitere Informationen zum Starten eines Clusters finden Sie im Handbuch Erste Schritte mit Amazon Redshift.

Prozess für das Laden von Daten

In diesem Abschnitt wird das Laden von Daten aus Remote-Hosts beschrieben. In den folgenden Abschnitten finden Sie detaillierte Anweisungen für die einzelnen Schritte.

Schritt 1: Abrufen des öffentlichen Schlüssels des Clusters und der IP-Adressen der Cluster-Knoten

Sie verwenden die IP-Adresse der einzelnen Cluster-Knoten, um die Host-Sicherheitsgruppen zu konfigurieren, damit diese den Zugriff von Ihrem Amazon-Redshift-Cluster unter Verwendung dieser IP-Adressen gestatten.

So rufen Sie den öffentlichen Schlüssel des Clusters und die IP-Adressen der Cluster-Knoten für Ihren Cluster über die Konsole ab
  1. Greifen Sie auf die Managementkonsole von Amazon Redshift zu.

  2. Wählen Sie im Navigationsbereich den Link Cluster aus.

  3. Wählen Sie Ihren Cluster aus der Liste aus.

  4. Suchen Sie die Gruppe SSH-Erfassungseinstellungen.

    Notieren Sie sich die Informationen unter Cluster Public Key (Öffentlicher Schlüssel des Clusters) und Node IP addresses (Knoten-IP-Adressen). Diese Informationen werden in späteren Schritten verwendet.

    Screenshot aus der Gruppe „SSH-Erfassungseinstellungen“ mit dem öffentlichen Clusterschlüssel und den IP-Adressen der Knoten.

    Sie verwenden die IP-Adressen in Schritt 3, um den Host so zu konfigurieren, dass er die Verbindung von Amazon Redshift akzeptiert. Abhängig von der Art des Hosts, zu dem Sie eine Verbindung herzustellen, und davon, ob er sich in einer VPC befindet, verwenden Sie entweder die öffentlichen IP-Adressen oder die privaten IP-Adressen.

Um den öffentlichen Schlüssel des Clusters und die IP-Adressen der Cluster-Knoten für Ihren Cluster über die Amazon-Redshift-CLI abzurufen, führen Sie den Befehl describe-clusters aus.

Beispiel:

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

Die Antwort enthält den ClusterPublicKey-Wert und die Liste der privaten und öffentlichen IP-Adressen, ähnlich wie folgt:

{ "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", ... ... }

Um den öffentlichen Schlüssel des Clusters und die IP-Adressen der Cluster-Knoten für Ihren Cluster über die Amazon-Redshift-API abzurufen, verwenden Sie die Aktion DescribeClusters. Weitere Informationen finden Sie unter describe-clusters im Leitfaden für Amazon Redshift CLI oder unter DescribeClusters im Leitfaden für die Amazon-Redshift-API.

Schritt 2: Hinzufügen des öffentlichen Schlüssels des Amazon-Redshift-Clusters zur Datei des Hosts mit den autorisierten Schlüsseln

Sie fügen den öffentlichen Schlüssel des Clusters zur Datei mit den autorisierten Schlüsseln der einzelnen Hosts hinzu, damit der Host den Amazon-Redshift-Cluster erkennt und die SSH-Verbindung akzeptiert.

So fügen Sie den öffentlichen Schlüssel des Amazon-Redshift-Clusters zur Datei des Hosts mit den autorisierten Schlüsseln hinzu:
  1. Greifen Sie über eine SSH-Verbindung auf den Host zu.

    Informationen zum Herstellen von Verbindungen mit Instances über SSH finden Sie unter Connect to Your Instance (Herstellen einer Verbindung mit Ihrer Instance) im Amazon-EC2-Benutzerhandbuch.

  2. Kopieren Sie den öffentlichen Amazon-Redshift-Schlüssel aus der Konsole oder aus dem CLI-Antworttext.

  3. Kopieren Sie den Inhalt des öffentlichen Schlüssels in die Datei /home/<ssh_username>/.ssh/authorized_keys auf dem Remote-Host. Der <ssh_username> muss mit dem Wert für das Benutzernamenfeld in der Manifestdatei übereinstimmen. Kopieren Sie die gesamte Zeichenfolge einschließlich des Präfix ssh-rsa und des Suffix Amazon-Redshift. Beispiel:

    ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift

Schritt 3: Konfigurieren des Hosts, sodass er alle IP-Adressen des Amazon-Redshift-Clusters akzeptiert

Wenn Sie mit einer Amazon-EC2-Instance oder einem Amazon-EMR-Cluster arbeiten, fügen Sie der Sicherheitsgruppe des Hosts Regeln für eingehenden Datenverkehr hinzu, um Datenverkehr von den einzelnen Amazon-Redshift-Clusterknoten zuzulassen. Wählen Sie für Type SSH mit TCP-Protokoll auf Port 22 aus. Geben Sie für Source die IP-Adressen der Amazon-Redshift-Clusterknoten ein, die Sie in Schritt 1: Abrufen des öffentlichen Schlüssels des Clusters und der IP-Adressen der Cluster-Knoten abgerufen haben. Informationen zum Hinzufügen von Regeln zu einer Amazon-EC2-Sicherheitsgruppe finden Sie unter Authorizing Inbound Traffic for Your Instances (Autorisieren von eingehendem Datenverkehr für Instances) im Amazon-EC2-Benutzerhandbuch.

Verwenden Sie die privaten IP-Adressen in folgenden Fällen:

  • Es gibt einen Amazon-Redshift-Cluster, der sich nicht in einer Virtual Private Cloud (VPC) befindet, und eine Amazon-EC2-Classic-Instance. Beide befinden sich in derselben AWS-Region.

  • Es gibt einen Amazon-Redshift-Cluster, der sich in einer VPC befindet, und eine Amazon-EC2-VPC-Instance. Beide befinden sich in derselben AWS-Region und in derselben VPC.

Verwenden Sie andernfalls die öffentlichen IP-Adressen.

Weitere Informationen zur Nutzung von Amazon Redshift finden Sie unter Managing Clusters in Virtual Private Cloud (VPC) (Verwalten von Clustern in Virtual Private Cloud (VPC)) im Amazon-Redshift-Verwaltungshandbuch.

Schritt 4: Abrufen des öffentlichen Schlüssels für den Host

Sie können optional den öffentlichen Schlüssel des Hosts in der Manifestdatei angeben, sodass Amazon Redshift den Host identifizieren kann. Der öffentliche Schlüssel des Hosts ist für den COPY-Befehl nicht erforderlich. Aus Sicherheitsgründen wird jedoch nachdrücklich empfohlen, einen öffentlichen Schlüssel zu verwenden, um „Man-In-The-Middle“-Angriffe verhindern zu helfen.

Sie finden den öffentlichen Schlüssel des Hosts an der folgenden Stelle, wobei <ssh_host_rsa_key_name> der eindeutige Name für den öffentlichen Schlüssel des Hosts ist:

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

Amazon Redshift unterstützt nur RSA-Schlüssel. DSA-Schlüssel werden nicht unterstützt.

Wenn Sie in Schritt 5 Ihre Manifestdatei erstellen, fügen Sie den Text des öffentlichen Schlüssels in das Feld „Public Key“ im Manifestdateieintrag ein.

Schritt 5: Erstellen einer Manifestdatei

Der COPY-Befehl kann über SSH Verbindungen zu mehreren Hosts herstellen und für jeden Host mehrere SSH-Verbindungen erstellen. COPY führt über jede Hostverbindung einen Befehl aus und lädt anschließend die Ausgabe der Befehle parallel in die Tabelle. Die Manifestdatei ist eine Textdatei im JSON-Format, die Amazon Redshift zum Herstellen der Verbindung zum Host verwendet. Die Manifestdatei gibt die Endpunkte des SSH-Hosts und die Befehle an, die auf den Hosts ausgeführt werden, um Daten an Amazon Redshift zurückzugeben. Optional können Sie den öffentlichen Schlüssel des Hosts, den Anmeldebenutzernamen und ein obligatorisches Flag für die einzelnen Einträge einschließen.

Erstellen Sie die Manifestdatei auf Ihrem lokalen Computer. In einem späteren Schritt laden Sie die Datei zu Amazon S3 hoch.

Die Manifestdatei hat folgendes Format:

{ "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"} ] }

Die Manifestdatei enthält für jede SSH-Verbindung jeweils ein "entries"-Konstrukt. Jeder Eintrag stellt eine einzelne SSH-Verbindung dar. Es kann mehrere Verbindungen zu einem einzelnen Host oder mehrere Verbindungen zu mehreren Hosts geben. Die doppelten Anführungszeichen sind wie gezeigt erforderlich, sowohl für die Feldnamen als auch die Werte. Der einzige Wert, der keine doppelten Anführungszeichen benötigt, sind die booleschen Werte true oder false für das obligatorische Feld.

Nachfolgend werden die Felder in der Manifestdatei beschrieben.

endpoint

Die URL- oder IP-Adresse des Hosts. Beispiele sind ec2-111-222-333.compute-1.amazonaws.com oder 22.33.44.56.

command

Der Befehl, der durch den Host ausgeführt wird, um eine Textausgabe oder eine Binärausgabe (gzip, lzop oder bzip2) zu generieren. Bei diesem Befehl kann es sich um jeden Befehl handeln, zu dessen Ausführung der Benutzer host_user_name berechtigt ist. Beim Befehl kann es sich einfach um einen Befehl zum Drucken einer Datei, um eine Abfrage einer Datenbank oder um das Starten eines Skripts handeln. Die Ausgabe (Textdatei, binäre gzip-Datei, binäre lzop-Datei oder binäre bzip2-Datei) muss ein Format aufweisen, das der Amazon-Redshift-Befehl COPY verarbeiten kann. Weitere Informationen finden Sie unter Vorbereiten der Eingabedaten.

publickey

(Optional) Der öffentliche Schlüssel des Hosts. Wenn angegeben, verwendet Amazon Redshift den öffentlichen Schlüssel, um den Host zu identifizieren. Wenn der öffentliche Schlüssel nicht angegeben ist, versucht Amazon Redshift nicht, den Host zu identifizieren. Wenn beispielsweise der öffentliche Schlüssel des Remote-Hosts ssh-rsa AbcCbaxxx…xxxDHKJ root@amazon.com ist, geben Sie den folgenden Text in das Feld für den öffentlichen Schlüssel ein: AbcCbaxxx…xxxDHKJ.

mandatory

(Optional) Zeigt an, ob der COPY-Befehl fehlschlagen soll, wenn keine Verbindung hergestellt wird. Der Standardwert ist false. Wenn Amazon Redshift nicht mindestens eine Verbindung herstellt, schlägt der COPY-Befehl fehl.

username

(Optional) Der Benutzername, der für die Anmeldung am Hostsystem und die Ausführung des Remotebefehls verwendet wird. Der Benutzeranmeldename muss mit dem Anmeldenamen identisch sein, der zum Hinzufügen des öffentlichen Schlüssels zur Datei des Hosts mit den autorisierten Schlüsseln in Schritt 2 verwendet wurde. Der Standardbenutzername ist „redshift“.

Im folgenden Beispiel wird gezeigt, wie ein abgeschlossenes Manifest vier Verbindungen mit demselben Host herstellt und über jede Verbindung einen anderen Befehl ausführt:

{ "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"} ] }

Schritt 6: Hochladen der Manifestdatei in einen Amazon S3 Bucket

Laden Sie die Manifestdatei zu einem Amazon S3 Bucket hoch. Wenn sich der Amazon-S3-Bucket nicht in derselben AWS-Region wie Ihr Amazon-Redshift-Cluster befindet, müssen Sie die Option REGION verwenden, um die AWS-Region anzugeben, in der sich das Manifest befindet. Informationen zum Erstellen eines Amazon S3 Buckets und zum Hochladen einer Datei finden Sie im Benutzerhandbuch zu Amazon Simple Storage Service.

Schritt 7: Ausführen des COPY-Befehls, um die Daten zu laden

Führen Sie einen COPY-Befehl aus, um eine Verbindung zum Host herzustellen und die Daten in eine Amazon-Redshift-Tabelle zu laden. Geben Sie im COPY-Befehl den expliziten Amazon-S3-Objektpfad für die Manifestdatei an und schließen Sie die SSH-Option ein. Beispiel,

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

Wenn Sie die automatische Kompression verwenden, führt der COPY-Befehl zwei Datenlesevorgänge aus. Dies bedeutet, dass der Remotebefehl zweimal ausgeführt wird. Der erste Lesevorgang dient dazu, eine Stichprobe zur Kompressionsanalyse bereitzustellen. Im zweiten Lesevorgang werden die Dateien tatsächlich geladen. Wenn die zweimalige Ausführung des Remotebefehls aufgrund möglicher Nebeneffekte Probleme verursachen könnte, sollten Sie die automatische Kompression deaktivieren. Um die automatische Kompression zu deaktivieren, führen Sie den COPY-Befehl aus, wobei Sie die Option COMPUPDATE auf OFF setzen. Weitere Informationen finden Sie unter Laden von Tabellen mit automatischer Kompression.