Carga de datos desde hosts remotos - Amazon Redshift

Carga de datos desde hosts remotos

Puede utilizar el comando COPY para cargar datos en paralelo desde uno o más alojamientos remotos, como instancias de Amazon EC2 u otros equipos. COPY se conecta a los alojamientos remotos por medio de SSH y ejecuta los comandos en los alojamientos remotos para generar texto de salida.

El alojamiento remoto puede ser una instancia de Linux de Amazon EC2 u otro equipo Linux o Unix configurado para aceptar conexiones SSH. En esta guía, se asume que su alojamiento remoto es una instancia de Amazon EC2. Cuando el procedimiento sea diferente para otro equipo, en la guía se señalará la diferencia.

Amazon Redshift puede conectarse a varios alojamientos y puede establecer varias conexiones SSH en cada alojamiento. Amazon Redshift envía un único comando a través de cada conexión para generar el texto que aparecerá en la salida estándar del alojamiento, que Amazon Redshift leerá después como cualquier otro archivo de texto.

Antes de empezar

Antes de empezar, debe haber implementado lo siguiente:

  • Uno o más equipos de alojamiento, como las instancias de Amazon EC2, a los que puede conectarse mediante SSH.

  • Orígenes de datos en los hosts.

    Proporcionará comandos que el clúster de Amazon Redshift ejecutará en los alojamientos para generar el texto de salida. Una vez que el clúster se conecta a un alojamiento, el comando COPY ejecuta los comandos, lee el texto de la salida estándar de los alojamientos y carga los datos en paralelo en una tabla de Amazon Redshift. El texto de salida debe tener un formato que el comando COPY pueda incorporar. Para obtener más información, consulte Preparación de los datos de entrada

  • Obtenga acceso a los hosts desde su equipo.

    En caso de una instancia de Amazon EC2, usará una conexión SSH para obtener acceso al alojamiento. Debe acceder al host para agregar la clave pública del clúster de Amazon Redshift al archivo de claves autorizadas del host.

  • Un clúster de Amazon Redshift en ejecución.

    Para obtener información acerca de cómo lanzar un clúster, consulte Guía de introducción a Amazon Redshift.

Proceso de carga de datos

En esta sección, se detalla el proceso de carga de datos desde hosts remotos. En las siguientes secciones, se proporcionan los detalles que debe completar en cada paso.

Paso 1: Recuperar la clave pública del clúster y las direcciones IP del nodo del clúster

Pasos para recuperar la clave pública del clúster y las direcciones IP del nodo del clúster para su clúster con la consola
  1. Acceda a la consola de administración de Amazon Redshift.

  2. Elija el enlace de Clusters (Clústeres) en el panel de navegación.

  3. Seleccione su clúster de la lista.

  4. Localice el grupo SSH Ingestion Settings (Configuración de ingestión de SSH).

    Tome nota de los valores de Cluster Public Key (Clave pública del clúster) y Node IP addresses (Direcciones IP del nodo). Los usará en pasos posteriores.

    En el paso 3, usará las direcciones IP para configurar el alojamiento de forma que acepte la conexión desde Amazon Redshift. Según el tipo de host al que se conecta y si se encuentra en una Virtual Private Cloud (VPC, Nube virtual privada), usará las direcciones IP públicas o las privadas.

Para recuperar la clave pública del clúster y las direcciones IP del nodo del clúster para su clúster mediante la CLI de Amazon Redshift, ejecute el comando describe-clusters.

Por ejemplo:

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

La respuesta incluirá el valor ClusterPublicKey y la lista de direcciones IP públicas y privadas, similar a la siguiente:

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

Para recuperar la clave pública del clúster y las direcciones IP del nodo del clúster para su clúster mediante la API de Amazon Redshift, use la acción DescribeClusters. Para obtener más información, consulte describe-clusters en la Guía de la CLI de Amazon Redshift o DescribeClusters en la Guía de la API de Amazon Redshift.

Paso 2: Agregar la clave pública del clúster de Amazon Redshift al archivo de claves autorizadas del alojamiento

Debe agregar la clave pública del clúster al archivo de claves autorizadas de cada alojamiento para que este último reconozca a Amazon Redshift y acepte la conexión SSH.

Para agregar la clave pública del clúster de Amazon Redshift al archivo de claves autorizadas del alojamiento
  1. Obtenga acceso al host con una conexión Secure Shell (SSH, Shell seguro).

    Para obtener información acerca de cómo conectarse a una instancia con SSH, consulte Conexión con la instancia en la Guía del usuario de Amazon EC2.

  2. Copie la clave pública de Amazon Redshift desde la consola o desde el texto de respuesta de la CLI.

  3. Copie y pegue el contenido de la clave pública en el archivo /home/<ssh_username>/.ssh/authorized_keys que se encuentra en el host remoto. <ssh_username> debe coincidir con el valor del campo "username" del archivo de manifiesto. Incluya la cadena completa, incluso el prefijo "ssh-rsa" y el sufijo "Amazon-Redshift". Por ejemplo:

    ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift

Paso 3: Configurar el alojamiento para que acepte todas las direcciones IP del clúster de Amazon Redshift

Si está trabajando con una instancia de Amazon EC2 o con un clúster de Amazon EMR, agregue reglas de entrada al grupo de seguridad del alojamiento para permitir tráfico desde cada nodo del clúster de Amazon Redshift. En Type (Tipo), seleccione SSH with TCP protocol on Port 22 (SSH con protocolo TCP en el puerto 22). En Source (Origen), ingrese las direcciones IP de los nodos del clúster de Amazon Redshift que recuperó en Paso 1: Recuperar la clave pública del clúster y las direcciones IP del nodo del clúster. Para obtener más información acerca de cómo se agregan las reglas a un grupo de seguridad de Amazon EC2, consulte Autorización del tráfico de entrada para sus instancias en la Guía del usuario de Amazon EC2.

Use las direcciones IP privadas en los casos que se muestran a continuación:

  • Tiene un clúster de Amazon Redshift que no se encuentra en una Virtual Private Cloud (VPC) y una instancia de Amazon EC2-Classic, y ambas se encuentran en la misma región de AWS.

  • Tiene un clúster de Amazon Redshift que se encuentra en una VPC y una instancia de Amazon EC2-VPC, y ambas se encuentran en la misma región de AWS y en la misma VPC.

De lo contrario, use las direcciones IP públicas.

Para obtener más información acerca del uso de Amazon Redshift en una VPC, consulte Administración de clústeres en nube privada virtual (VPC) en la Guía de administración de Amazon Redshift.

Paso 4: Obtener la clave pública para el host

De manera opcional, puede proporcionar la clave pública del alojamiento en el archivo de manifiesto de manera que Amazon Redshift pueda identificar al alojamiento. El comando COPY no requiere la clave pública del host; no obstante, por motivos de seguridad, le recomendamos encarecidamente que use una clave pública para ayudar a evitar ataques de tipo "man-in-the-middle".

Puede encontrar la clave pública del host en la siguiente ubicación, donde <ssh_host_rsa_key_name> es el nombre único de la clave pública del host:

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

Amazon Redshift solo es compatible con claves RSA. No es compatible con claves DSA.

Al crear el archivo de manifiesto en el paso 5, copiará el texto de la clave pública en el campo "Public Key", en la entrada del archivo de manifiesto.

Paso 5: Crear un archivo de manifiesto

El comando COPY puede conectarse con distintos hosts mediante Secure Shell (SSH, Shell seguro) y puede crear distintas conexiones SSH a cada host. COPY ejecuta un comando a través de cada conexión al host y, luego, carga la salida en la tabla desde los comandos en paralelo. El archivo de manifiesto es un archivo de texto con formato JSON que Amazon Redshift usa para conectarse al alojamiento. En el archivo de manifiesto, se especifican los puntos de conexión del alojamiento SSH y los comandos que se ejecutan en los alojamientos para devolver los datos a Amazon Redshift. De forma opcional, puede incluir la clave pública del host, el nombre de usuario de inicio de sesión y una marca obligatoria para cada entrada.

Cree el archivo de manifiesto en su equipo local. En un paso posterior, cargará el archivo en Amazon S3.

El archivo de manifiesto se encuentra en el siguiente 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"} ] }

El archivo de manifiesto tiene una construcción "entries" para cada conexión SSH. Cada entrada representa una conexión SSH única. Puede tener distintas conexiones a un único host o distintas conexiones a distintos hosts. Se requieren comillas dobles, como se muestra, para los valores y los nombres de campo. El único valor que no necesita comillas dobles es el valor booleano true o false del campo obligatorio.

A continuación se describen los campos del archivo de manifiesto.

punto de conexión

La dirección URL o dirección IP del host. Por ejemplo, "ec2-111-222-333.compute-1.amazonaws.com" o "22.33.44.56".

comando

El comando que el alojamiento ejecutará para generar la salida binaria o de texto (en formato gzip, lzop o bzip2). El comando puede ser cualquiera que el usuario "host_user_name" (nombre_de_usuario_del_host) tenga permiso para ejecutar. El comando puede ser tan sencillo como imprimir un archivo, o podría consultar una base de datos o lanzar un script. La salida (archivo de texto o archivo binario gzip, lzop o bzip2) debe estar en un formato que el comando COPY de Amazon Redshift pueda capturar. Para obtener más información, consulte Preparación de los datos de entrada.

publickey

(Opcional) La clave pública del host. Si se proporciona la clave pública, Amazon Redshift la usará para identificar el alojamiento. Si no se proporciona la clave pública, Amazon Redshift no intentará identificar el alojamiento. Por ejemplo, si la clave pública del host remoto es: ssh-rsa AbcCbaxxx…xxxDHKJ root@amazon.com, escriba el siguiente texto en el campo de clave pública: AbcCbaxxx…xxxDHKJ.

mandatory

(Opcional) Indica si el comando COPY debe fallar en caso de que la conexión falle. El valor predeterminado es false. Si Amazon Redshift no logra al menos una conexión de manera correcta, se produce un error en el comando COPY.

username

(Opcional) Se trata del nombre de usuario que se utilizará para iniciar sesión en el sistema de alojamiento y ejecutar el comando remoto. El nombre de inicio de sesión de usuario debe ser el mismo que el del inicio de sesión que se utilizó para agregar la clave pública al archivo de claves autorizadas del host en el paso 2. El nombre de usuario predeterminado es "redshift".

En el siguiente ejemplo, se observa un manifiesto completado para abrir cuatro conexiones en el mismo alojamiento y ejecutar un comando diferente a través de cada conexión:

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

Paso 6: Cargar el archivo de manifiesto en un bucket de Amazon S3

Cargue el archivo de manifiesto en un bucket de Amazon S3. Si el bucket de Amazon S3 no se encuentra en la misma región de AWS que el clúster de Amazon Redshift, debe usar la opción REGION para especificar la región de AWS en la que se encuentra el manifiesto. Para obtener información acerca de cómo crear un bucket de Amazon S3 y cómo cargar un archivo, consulte Guía del usuario de Amazon Simple Storage Service.

Paso 7: Ejecutar el comando COPY para cargar los datos

Ejecute un comando COPY para conectarse al alojamiento y cargar los datos en una tabla de Amazon Redshift. En el comando COPY, especifique la ruta de objeto de Amazon S3 de forma explícita para el archivo de manifiesto e incluya la opción para el SSH. Por ejemplo,

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

Si utiliza la compresión automática, el comando COPY realizará dos lecturas de datos, lo que significa que ejecuta el comando remoto dos veces. La primera lectura se realiza para proporcionar una muestra para el análisis de compresión, la segunda lectura es la que carga los datos. Si la ejecución del comando remoto dos veces puede ocasionar un problema debido a efectos secundarios potenciales, debe desactivar la compresión automática. Para desactivar la compresión automática, ejecute el comando COPY con la opción COMPUPDATE establecida en OFF. Para obtener más información, consulte Carga de tablas con compresión automática.