Saltar al contenido

¿Cómo programo las consultas para un clúster de Amazon Redshift?

6 minutos de lectura
0

Quiero programar una consulta para que se ejecute en un clúster de Amazon Redshift.

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Utiliza el editor de consultas v2 para ejecutar, ver, guardar y programar consultas de SQL para los clústeres de Amazon Redshift aprovisionados. 

Configuración de los permisos del editor de consultas

Antes de crear una consulta programada, debes configurar los roles y los permisos correctos de AWS Identity and Access Management (IAM). Las consultas programadas requieren que Amazon EventBridge inicie la consulta según lo programado y que la API de datos de Amazon Redshift ejecute la consulta en el clúster.

Tanto el usuario de IAM que crea la programación como el rol de IAM que ejecuta la consulta deben tener los permisos adecuados.

Acceso de usuarios de IAM

Puedes adjuntar políticas, como AmazonRedshiftDataFullAccess y AmazonEventBridgeFullAccess

También puedes crear una política personalizada con permisos más específicos. Para obtener más información, consulta Configuración de los permisos para programar una consulta.

Rol de ejecución de consultas

Para ejecutar consultas programadas, identifica o crea un rol de IAM para tu clúster de Amazon Redshift o grupo de trabajo de Amazon Redshift sin servidor.

A continuación, adjunta las políticas, como AmazonRedshiftDataFullAccess y AmazonEventBridgeFullAccess, para que Amazon Redshift pueda asumir el rol y realizar las acciones programadas.

Para obtener más información, consulta Uso de políticas basadas en la identidad (políticas de IAM) para Amazon Redshift.

Asumir la configuración de roles

Actualiza la política de confianza del rol para permitir que la entidad principal de programación lo asuma. A continuación, utiliza la consola de Amazon Redshift o el comando modify-cluster-iam-roles de la AWS CLI para vincular el rol a tu clúster de Amazon Redshift o grupo de trabajo de Amazon Redshift sin servidor.

Autenticación de bases de datos

Guarda tus credenciales en un secreto de AWS Secrets Manager al que pueda acceder tu rol de IAM.

Agrega las etiquetas adecuadas para permitir el uso de la API de datos de Amazon Redshift. Configura tu rol de IAM para obtener credenciales temporales de Amazon Redshift. El rol de IAM de tu clúster o grupo de trabajo debe confiar en la entidad principal y el usuario de la base de datos debe tener los permisos necesarios.

Para obtener más información, consulta Autenticación de una consulta programada.

Programación de consultas en la consola de Amazon Redshift

Sigue estos pasos:

  1. Abre la consola de Amazon Redshift.
  2. En el panel de navegación, elige Editor y, a continuación, elige Editor de consultas V2.
  3. Conéctate a una base de datos de tu clúster.
  4. Crea una programación de consultas para ejecutar una instrucción SQL.
  5. (Opcional) Si usas Secrets Manager con Amazon Redshift, selecciona tu secreto.
  6. (Opcional) Si utilizas credenciales de usuario de IAM temporales, elige tu clúster y proporciona la base de datos y los nombres de usuario.

Nota: Para llamar a la acción GetClusterCredentials, debes tener un conjunto mínimo de permisos.

Para ver las programaciones recién creadas, sigue estos pasos:

  1. Abre la consola de Amazon RedShift.
  2. En el panel de navegación, elige Editor y, a continuación, elige Editor de consultas V2.
  3. Elige Consultas programadas.

Puedes activar las notificaciones de Amazon Simple Notification Service (Amazon SNS) para supervisar el estado de ejecución de la consulta.

Si has activado Amazon SNS, asegúrate de que la acción de la API Publish existe para events.amazonaws.com.

Ejemplo de política de acceso que incluye la acción Publish para events.amazonaws.com:

{
  "Sid": "Allow_Publish_Events",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Action": "sns:Publish",
  "Resource": "arn:aws:sns:us-east-1:{ACCOUNT_ID}:{SNS_TOPIC_NAME}"
}

Para obtener más información, consulta Supervisión de la consulta programada.

Programación de consultas con EventBridge

Puedes usar EventBridge y la API de datos de Amazon Redshift para programar instrucciones SQL.

Sigue estos pasos:

  1. Define una regla de eventos de EventBridge denominada scheduled-refresh-currentEvents.

  2. Utiliza la consola de EventBridge para programar la regla de eventos para que se ejecute de forma regular o a una hora específica. O bien, ejecuta el siguiente comando put-rule de la AWS CLI:

    aws events put-rule \
    --name scheduled-refresh-currentEvents \
    --schedule-expression "cron(0/5 * * * ? *)"

    Nota: Sustituye 5 por el número de minutos que desees entre las actualizaciones.

  3. Usa un editor de texto para crear y guardar el siguiente archivo JSON denominado refreshCurrentEvents.json:

    {
      "Rule": "scheduled-refresh-currentEvents",
      "EventBusName": "default",
      "Targets": [
        {
          "Id": "scheduled-refresh-currentEvents",
          "Arn": "Clsuter ARN",
          "RoleArn": "Role ARN",
          "RedshiftDataParameters": {
            "SecretManagerArn": "Secrets Manager ARN",
            "Database": "Database Name",
            "Sql": "REFRESH MATERIALIZED VIEW currentEvents;",
            "StatementName": "scheduled-refresh-currentEvents",
            "WithEvent": true
          }
        }
      ]
    }

    Nota: Sustituye Cluster ARN y Role ARNSecrets Manager ARN por tus valores de ARN.

  4. Ejecuta el siguiente comando put-targets para crear un objetivo de evento con el archivo JSON guardado:

    aws events put-targets --cli-input-json file://refreshCurrentEvents.json
  5. Ejecuta el siguiente comando remove-targets para eliminar los objetivos:

    aws events remove-targets --rule scheduled-refresh-currentEvents --ids scheduled-refresh-currentEvents
    
  6. Ejecuta el siguiente comando delete-rule para eliminar la regla:

    aws events delete-rule --name scheduled-refresh-currentEvents

Visualización del estado y los resultados de SQL

Sigue estos pasos:

  1. Abre la consola de Amazon RedShift.

  2. En el panel de navegación, elige Editor y, a continuación, elige Editor de consultas V2.

  3. Elige Consultas programadas.

  4. Selecciona tu consulta.

  5. En Historial de programación, anota el ID que utilizarás en un paso posterior.

  6. Para recuperar los resultados de la consulta, ejecuta el siguiente comando assume-role:

    aws sts assume-role --role-arn "Role ARN" --role-session-name Example Session Name

    Nota: Sustituye Role ARN por el ARN del rol que utilizas para programar la consulta y Example Session Name por tu nombre de sesión. El resultado del comando devuelve el ID de la clave de acceso, la clave de acceso secreta y el token de sesión.

  7. Ejecuta los siguientes comandos de exportación para configurar las variables de entorno:

    export AWS_ACCESS_KEY_ID=ExampleRoleAccessKeyID
    export AWS_SECRET_ACCESS_KEY=ExampleRoleSecretAccessKey
    export AWS_SESSION_TOKEN=ExampleSessionToken

    Nota: Sustituye los valores del ejemplo por tus valores.

  8. Ejecuta el comando redshift-data con get-statement-result para recuperar los resultados:

    aws redshift-data get-statement-result --id ID --region Region

    Nota: Sustituye ID por el ID de tu instrucción y Region por tu región de AWS.

Información relacionada

¿Por qué no puedo conectarme a la política AmazonRedshiftQueryEditor en Amazon Redshift?

Uso de la API de datos de Amazon Redshift para interactuar con los clústeres de Amazon Redshift

Creación de una regla de Amazon EventBridge que se ejecute según una programación en Amazon EventBridge

OFICIAL DE AWSActualizada hace un año