Como posso agendar consultas para um cluster do Amazon Redshift?

5 minuto de leitura
0

Estou tentando agendar uma consulta para ser executada em um cluster do Amazon Redshift. Como posso fazer isso?

Breve descrição

Você pode usar o editor de consultas para executar, visualizar, salvar e agendar consultas SQL para seus clusters provisionados do Amazon Redshift. As consultas agendadas são iniciadas pelo Amazon EventBridge.

Resolução

Observação: se receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.

Permissões do editor de consultas

Para usar o editor de consultas, os usuários devem ter um conjunto mínimo de permissões para o Amazon Redshift. Se o seu cluster usa outros serviços da AWS, os usuários também devem ter permissões para esses serviços. Por exemplo, segredos do AWS Secrets Manager e chaves do AWS Key Management Service (AWS KMS). Para obter mais informações, consulte Permissions required to use the Amazon Redshift console query editor (Permissões necessárias para usar o editor de consultas do console do Amazon Redshift).

Você pode usar as políticas gerenciadas do AWS Identity and Access Management (IAM) para gerenciar permissões com base nos perfis do IAM. Para obter mais informações, consulte AWS managed (predefined) policies for Amazon Redshift (Políticas gerenciadas [predefinidas] da AWS para o Amazon Redshift).

Para agendar consultas, o usuário e o perfil do IAM associados à consulta devem ter permissão para gerenciar o editor de consultas. Para obter instruções, consulte Setting up permissions to schedule a query on the Amazon Redshift console (Como configurar permissões para agendar uma consulta no console do Amazon Redshift).

Como agendar consultas usando o Console de Gerenciamento da AWS

Para agendar a consulta usando o Console de Gerenciamento da AWS, siga estas etapas:

Observação:

  • Você deve usar o editor de consultas v1 para agendar consultas.
  • Você pode usar esse editor de consulta somente com clusters provisionados.

1.    Abra o console do Amazon Redshift.

2.    No painel de navegação, escolha Query editor (Editor de consultas).

3.    Siga as instruções para conectar-se a um banco de dados em seu cluster.

4.    Siga as instruções para criar um cronograma para executar uma instrução SQL.

5.    Se você estiver usando o AWS Secrets Manager com o Amazon Redshift, escolha seu segredo.

6.    Se você estiver usando credenciais de usuário temporárias do IAM, escolha seu cluster e forneça o banco de dados e os nomes de usuário. Observação: a permissão GetClusterCredentials deve estar presente para que o usuário do IAM use as credenciais temporárias.

7.    Escolha Save (Salvar).

Observação: se você ativou o Simple Notification Service (Amazon SNS), certifique-se de que a ação da API "sns:Publish" esteja presente para “events.amazonaws.com”. Para confirmar, adicione a seguinte instrução:

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

Como agendar consultas usando uma instrução SQL com o EventBridge

Você pode programar instruções SQL usando o EventBridge e a API de dados do Amazon Redshift. No exemplo a seguir, um cronograma é configurado para atualizar os eventos atuais a cada cinco minutos.

1.    Crie uma regra de evento do EventBridge chamada "scheduled-refresh-currentEvents" e programe-a para ser executada a cada cinco minutos usando expressões cron ou rate semelhantes às seguintes:

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

2.    Crie e salve um arquivo JSON chamado refreshCurrentEvents.json usando seu editor de texto favorito que contém o cluster, o perfil e o ARN do AWS Secrets Manager:

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

3.    Crie um destino de evento usando o arquivo JSON salvo:

aws events put-targets --cli-input-json file://refreshCurrentEvents.json

4.    Para remover o destino e excluir a regra, execute os seguintes comandos:

aws events remove-targets --rule scheduled-refresh-currentEvents --ids scheduled-refresh-currentEvents
aws events delete-rule --name scheduled-refresh-currentEvents

Exibir status e resultados do SQL

Para visualizar o status e o resultado da consulta, siga estas etapas:

1.    Abra o console do Amazon RedShift.

2.    No painel de navegação, escolha Query editor (Editor de consultas) e Scheduled queries (Consultas agendadas).

3.    Escolha o nome da sua consulta.

4.    No Schedule history (Histórico do agendamento), anote o ID. Você precisará do ID na etapa 7.

5.    Para recuperar os resultados da consulta, assuma o perfil do IAM usado para agendar a consulta usando o comando assume-role da AWS CLI semelhante ao seguinte:

aws sts assume-role --role-arn "<Role ARN>" --role-session-name AWSCLI-Session

A saída retorna o ID da chave de acesso, a chave de acesso secreta e o token da sessão.

6.    Configure variáveis de ambiente usando os seguintes comandos de exportação:

export AWS_ACCESS_KEY_ID=<RoleAccessKeyID>
export AWS_SECRET_ACCESS_KEY=<RoleSecretKey>
export AWS_SESSION_TOKEN=<RoleSessionToken>

7.    Recupere os resultados usando o comando redshift-data da AWS CLI semelhante ao seguinte:

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

Informações relacionadas

Why can't I connect to the Amazon Redshift query editor? (Por que não consigo me conectar ao Editor de Consultas do Amazon Redshift?)

Using the Amazon Redshift Data API to interact with Amazon Redshift clusters (Como usar a API de dados do Amazon Redshift para interagir com clusters do Amazon Redshift)

Creating an Amazon EventBridge rule that runs on a schedule (Como criar uma regra do Amazon EventBridge que é executada de acordo com uma programação)

AWS OFICIAL
AWS OFICIALAtualizada há um ano