Programación de consultas con el editor de consultas versión 2 - Amazon Redshift

Programación de consultas con el editor de consultas versión 2

Puede crear una programación que ejecute una instrucción SQL con el editor de consultas de Amazon Redshift versión 2. Puede crear una programación para ejecutar la instrucción SQL en los intervalos de tiempo que coincidan con las necesidades de su empresa. Cuando llega el momento de ejecutar la consulta programada, Amazon EventBridge inicia la consulta y utiliza la API de datos de Amazon Redshift.

Para crear una programación que ejecute una instrucción SQL
  1. Elija la vista Editor Editor y elija Schedule Programación para crear una programación que ejecute una instrucción SQL.

  2. Al definir la programación, se proporciona la siguiente información:

    • El rol de IAM que asume los permisos necesarios para ejecutar la consulta. Este rol de IAM también está asociado a su clúster o grupo de trabajo.

    • Los valores de autenticación para AWS Secrets Manager o las credenciales temporales para autorizar el acceso al clúster o grupo de trabajo. La API de datos admite estos métodos de autenticación. Para obtener más información, consulte Autenticación de una consulta programada.

    • El clúster o grupo de trabajo donde reside la base de datos.

    • El nombre de la tabla de base datos que contiene los datos que se van a consultar.

    • Nombre de la consulta programada y su descripción. El editor de consultas v2 antepone el prefijo "QS2-" al nombre de la consulta programada que usted proporcione. El editor de consultas versión 1 añade el prefijo «QS-» a los nombres de las consultas programadas.

    • La instrucción SQL que se ejecutará según la programación.

    • La frecuencia de la programación y las opciones de repetición o un valor con formato cron que define la programación. Para obtener más información, consulte Cron Expressions (Expresiones cron) en la Guía del usuario de Eventos de Amazon CloudWatch.

    • Si lo desea, puede habilitar las notificaciones de Amazon SNS estándar para supervisar la consulta programada. Puede que tenga que confirmar la dirección de correo electrónico que proporcionó en la notificación de Amazon SNS. Consulte en el correo electrónico si hay un enlace para confirmar la dirección de correo electrónico para las notificaciones de Amazon SNS. Para obtener más información, consulte Notificaciones por correo electrónico en la Guía para desarrolladores de Amazon Simple Notification Service. Si su consulta se está ejecutando, pero no ve mensajes publicados en el tema de SNS, consulte Mi regla se activa pero no veo ningún mensaje publicado en mi tema de Amazon SNS en la Guía del usuario de Amazon EventBridge.

  3. Seleccione Programar consulta para guardar y activar la programación y añadir la programación a la lista de consultas de la vista Consultas programadas.

La vista Consultas programadas Scheduled queries muestra todas las consultas programadas para sus clústeres y grupos de trabajo. En esta vista puede ver los detalles de la programación de la consulta, activar o desactivar la programación, editar la programación y eliminar la consulta programada. Al consultar los detalles de la consulta, también puede ver el historial de ejecución de la consulta con la programación.

nota

Una ejecución de consulta de programación solo está disponible en la lista Historial de programación durante 24 horas. Las consultas que se ejecutan de forma programada no aparecen en la vista Historial de consultas del editor de consultas v2.

Configuración de permisos para programar una consulta

Para programar consultas, el usuario de AWS Identity and Access Management (IAM) que define la programación y el rol de IAM asociado a la programación se deben configurar con los permisos de IAM para poder utilizar Amazon EventBridge y la API de datos de Amazon Redshift. Para recibir correos electrónicos de consultas programadas, también debe configurarse la notificación de Amazon SNS que especifique de forma opcional.

A continuación se describen las tareas para utilizar las políticas administradas de AWS para conceder permisos, pero según el entorno, es posible que prefiera reducir el alcance de los permisos concedidos.

Para el usuario de IAM que haya iniciado sesión en el editor de consultas versión 2, edite el usuario de IAM mediante la consola de IAM (https://console.aws.amazon.com/iam/).

  • Además de los permisos para ejecutar las operaciones de Amazon Redshift y del editor de consultas versión 2, adjunte las políticas administradas AmazonEventBridgeFullAccess y AmazonRedshiftDataFullAccess AWS a un usuario de IAM.

  • Como alternativa, asigne los permisos a un rol y asigne el rol al usuario.

    Adjunte una política con el permiso sts:AssumeRole al ARN del recurso del rol de IAM que especifique cuando defina la consulta programada. Para obtener más información sobre cómo asumir roles, consulte Conceder permisos de usuario para cambiar de rol en la Guía del usuario de IAM.

    En el siguiente ejemplo, se muestra una política de permisos que asume el rol de IAM myRedshiftRole en la cuenta 123456789012. El rol de IAM myRedshiftRole también es el rol de IAM que se adjunta al clúster o grupo de trabajo en el que se ejecuta la consulta programada.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeIAMRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::123456789012:role/myRedshiftRole" ] } ] }

    Actualice la política de confianza del rol de IAM utilizado para programar la consulta a fin de permitir que el usuario de IAM la asuma.

    { "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myIAMusername" }, "Action": "sts:AssumeRole" } ] }

Para el rol de IAM que especifique para permitir la ejecución de la consulta programada, edite el rol de IAM mediante la consola de IAM (https://console.aws.amazon.com/iam/).

  • Adjunte las políticas administradas AmazonRedshiftDataFullAccess y AmazonEventBridgeFullAccess de AWS al rol de IAM. La política administrada AmazonRedshiftDataFullAccess solo permite el permiso redshift-serverless:GetCredentials para los grupos de trabajo Redshift sin servidor que estén etiquetados con la clave RedshiftDataFullAccess.

Autenticación de una consulta programada

Cuando programa una consulta, utiliza uno de los siguientes métodos de autenticación cuando se ejecuta el código SQL. Cada método requiere una combinación diferente de entrada en el editor de consultas versión 2. Estos métodos de autenticación son compatibles con la API de datos que se utiliza para ejecutar sus instrucciones SQL.

El usuario o rol de base de datos que se utiliza para ejecutar la consulta debe tener los privilegios de base de datos necesarios. Por ejemplo, para conceder privilegios IAMR:MyRedshiftQEv2Scheduler a la tabla mytable, ejecute el siguiente comando SQL.

GRANT all ON TABLE mytable TO "IAMR:MyRedshiftQEv2Scheduler";

Para ver la lista de usuarios de la base de datos en su clúster o grupo de trabajo, consulte la vista del sistema PG_USER_INFO.

nota

Cualquier grupo de trabajo de Redshift sin servidor para el que programe consultas se debe etiquetar con la clave RedshiftDataFullAccess. Para obtener más información, consulte Autorización del acceso a la API de datos de Amazon Redshift.

Como alternativa al etiquetado del grupo de trabajo, puede agregar una política insertada al rol de IAM (que se especifica con la programación) que permita redshift-serverless:GetCredentials. Por ejemplo:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllServerlessWorkgroups", "Effect": "Allow", "Action": "redshift-serverless:GetCredentials", "Resource": [ "arn:aws:redshift-serverless:*:*:workgroup/*" ] } ] }
AWS Secrets Manager

Con este método, se proporciona un valor secreto para secret-arn que se almacena en AWS Secrets Manager. Este secreto contiene las credenciales para conectarse a la base de datos. Es posible que haya creado un secreto con las credenciales adecuadas al crear el clúster o el grupo de trabajo. El secreto debe estar etiquetado con la clave RedshiftDataFullAccess. Si la clave de etiqueta aún no está presente, utilice la consola de AWS Secrets Manager para agregarla. Para obtener información sobre cómo crear un secreto, consulte Creación de un secreto para las credenciales de conexión a la base de datos.

Para obtener más información acerca de los permisos mínimos, consulte Creación y administración de secretos con AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.

Credenciales temporales

Con este método, proporcione los valores Nombre de la base de datos y Usuario de la base de datos cuando se conecte a una base de datos de un clúster. Solo necesita proporcionar el Nombre de base de datos cuando se conecte a una base de datos de un grupo de trabajo.

Al conectarse a un clúster, la política AmazonRedshiftDataFullAccess permite al usuario de la base de datos denominado redshift_data_api_user el permiso para redshift:GetClusterCredentials. Si desea utilizar un usuario de base de datos diferente para ejecutar la instrucción SQL, agregue una política al rol de IAM adjunta a su clúster para permitir redshift:GetClusterCredentials. La siguiente política de ejemplo permite a los usuarios de la base de datos awsuser y myuser.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllDbUsers", "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": [ "arn:aws:redshift:*:*:dbuser:*/awsuser", "arn:aws:redshift:*:*:dbuser:*/myuser" ] } ] }

Configuración de permisos para el historial de consultas de la programación

Para permitir a los usuarios ver el historial de consultas de la programación, edite el rol de IAM (que se especifica con la programación) Relaciones de confianza para agregar permisos.

El ejemplo siguiente es una política de confianza en un rol de IAM que permite al usuario de IAM myIAMusername ver el historial de consultas de la programación. En lugar de permitir a un usuario de IAM el permiso sts:AssumeRole, puede elegir permitir a un rol de IAM este permiso.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "redshift-serverless.amazonaws.com" ] }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myIAMusername" }, "Action": "sts:AssumeRole" } ] }

Monitoreo de la consulta programada

Para el tema de Amazon SNS que especifique para enviar notificaciones por correo electrónico, cree el tema de Amazon SNS mediante el editor de consultas v2; para ello, navegue hasta la sección Notificaciones SNSactive el monitoreo y cree el tema con Crear un tema de SNS. El editor de consultas v2 crea el tema de Amazon SNS y agrega una entidad principal de servicio a la política de acceso para Amazon EventBridge. A continuación, se muestra un ejemplo de Política de acceso que se crea en el tema de Amazon SNS. En el ejemplo, se usan la Región de AWS us-west-2, la Cuenta de AWS 123456789012 y el tema de Amazon SNS select-version-pdx-testunload.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "Allow_Publish_Events", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-west-2:123456789012:select-version-pdx-testunload" } ] }

Cuando se ejecuta la consulta programada, Amazon SNS envía correos electrónicos de notificación de AWS. El siguiente ejemplo muestra un correo electrónico enviado a myemail@example.com para la consulta programada QS2-may25a que se ejecutó en Región de AWS eu-north-1 en Cuenta de AWS 123456789012 mediante el tema de notificación may25a-SNS de Amazon SNS.

{"version":"0","id":"8e4323ec-5258-7138-181b-91290e30ff9b","detail-type":"Scheduled Event","source":"aws.events","account":"123456789012","time":"2023-05-25T15:22:00Z", "region":"eu-north-1","resources":["arn:aws:events:eu-north-1:123456789012:rule/QS2-may25a"],"detail":{}} -- If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe: https://sns.eu-north-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:eu-north-1:123456789012:may25a-SNS:0c1a3d05-39c2-4507-bc3d-47250513d7b0&Endpoint=myemail@example.com Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support

Solución de problemas de configuración de la programación de una consulta

Tenga en cuenta lo siguiente si tiene problemas para programar una consulta.

Las consultas no se están ejecutando

Compruebe si el rol de IAM utilizado en la programación tiene permiso para obtener las credenciales  de clúster temporales. El permiso para los clústeres aprovisionados es redshift:GetClusterCredentialsWithIAM. El permiso para los grupos de trabajo de Redshift sin servidor es redshift-serverless:GetCredentials.

No se muestra el historial programado

El usuario de IAM o rol de IAM utilizado para iniciar sesión en la consola de AWS no se ha agregado a la política de confianza del rol de IAM utilizado para programar la consulta.

Al utilizar AWS Secrets Manager para la consulta programada para la conexión, confirme que el secreto esté etiquetado con la clave RedshiftDataFullAccess.

Si la consulta programada utiliza una conexión de AWS Secrets Manager, el rol de IAM utilizado para programar la consulta debe tener el equivalente a una política administrada SecretsManagerReadWrite asociada al rol.

El estado del historial de consultas es Failed

Consulte la vista del sistema SYS_QUERY_HISTORY para obtener detalles sobre por qué se produjo un error en la consulta. Un problema habitual es que el usuario o el rol de la base de datos que se utilizó para ejecutar la consulta podría no tener los privilegios necesarios para ejecutar el código SQL. Para obtener más información, consulte Autenticación de una consulta programada.

El siguiente código SQL consulta la vista SYS_QUERY_HISTORY para devolver las consultas con errores.

SELECT user_id, query_id, transaction_id, session_id, database_name, query_type, status, error_message, query_text FROM sys_query_history WHERE status = 'failed';

Para conocer los detalles de una determinada consulta programada con errorrd , consulte Búsqueda de detalles sobre las consultas programadas con AWS CloudShell.

Búsqueda de detalles sobre las consultas programadas con AWS CloudShell

Puede utilizar AWS CloudShell para conocer los detalles de una consulta programada. Debe tener los permisos adecuados para ejecutar los comandos de la AWS CLI que se muestran en el procedimiento siguiente.

Para ver los resultados de una consulta programada
  1. En la consola de AWS, abra el símbolo del sistema de AWS CloudShell. Para obtener más información acerca de AWS CloudShell, consulte ¿Qué es AWS CloudShell? en la Guía del usuario de AWS CloudShell.

  2. Asuma el rol de IAM de la consulta programada. Para asumir el rol, busque el rol de IAM asociado a la consulta programada en el editor de consultas v2 y utilícelo en el comando AWS CLI en AWS CloudShell. Por ejemplo, para el rol scheduler introduzca un comando AWS STS para asumir el rol que utiliza la consulta programada.

    aws sts assume-role —role-arn "arn:aws:iam::123456789012:role/scheduler" —role-session-name "scheduler-test"

    Las credenciales devueltas son similares a las siguientes.

    "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY...", "Expiration": "2023-08-18T18:19:44+00:00" }, "AssumedRoleUser": { "AssumedRoleId": "AROA35B2NH6WBTP7ONL4E:scheduler-test", "Arn": "arn:aws:sts::123456789012:assumed-role/scheduler/scheduler-test" } }
  3. Cree variables de entorno en la AWS CLI mediante las credenciales que se muestran al asumir el rol de IAM. Debe utilizar estos tokens antes de que caduquen. Por ejemplo, puede introducir lo siguiente en AWS CloudShell.

    export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY export AWS_SESSION_TOKEN=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY...
  4. Para ver el error de una consulta con errores, ejecute el comando AWS CLI para describir una instrucción. El ID de la instrucción SQL procede del ID que aparece en la sección Historial de programación de una consulta programada en el editor de consultas v2.

    aws redshift-data describe-statement —id 130d2620-05d2-439c-b7cf-815d9767f513

    En este ejemplo, la instrucción SQL programada select * from users limit 100 da como resultado un error de SQL que indica que la tabla users no existe.

    { "CreatedAt": "2023-08-18T17:39:15.563000+00:00", "Duration": -1, "Error": "ERROR: relation \"users\" does not exist", "HasResultSet": false, "Id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "QueryString": "select * from users limit 100\n—RequestID=a1b2c3d4-5678-90ab-cdef-EXAMPLE22222; TraceID=1-633c5642-4039308d03f3a0ba53dbdf6f", "RedshiftPid": 1073766651, "RedshiftQueryId": 0, "ResultRows": -1, "ResultSize": -1, "Status": "FAILED", "UpdatedAt": "2023-08-18T17:39:16.116000+00:00", "WorkgroupName": "default" }

Demostración de la programación de una consulta

Para obtener una demostración de la programación de consultas, vea el siguiente vídeo.