Comment puis-je planifier des requêtes pour un cluster Amazon Redshift ?

Lecture de 5 minute(s)
0

J'essaie de planifier l'exécution d'une requête dans un cluster Amazon Redshift. Comment faire ?

Brève description

Vous pouvez utiliser l'éditeur de requêtes pour exécuter, afficher, enregistrer et planifier des requêtes SQL pour vos clusters Amazon Redshift provisionnés. Les requêtes planifiées sont lancées par Amazon EventBridge.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes de l'interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Autorisations de l'éditeur de requêtes

Pour utiliser l'éditeur de requêtes, les utilisateurs doivent disposer d'un ensemble minimum d'autorisations sur Amazon Redshift. Si votre cluster utilise d'autres services AWS, les utilisateurs doivent également disposer d'autorisations sur ces services. Par exemple, les secrets AWS Secrets Manager et les clés AWS Key Management Service (AWS KMS). Pour plus d'informations, consultez la rubrique Autorisations requises pour utiliser l'éditeur de requêtes de la console Amazon Redshift.

Vous pouvez utiliser les politiques gérées par AWS Identity and Access Management (IAM) pour gérer les autorisations en fonction des rôles IAM. Pour plus d'informations, consultez la rubrique Politiques (prédéfinies) gérées par AWS pour Amazon Redshift.

Pour planifier des requêtes, l'utilisateur et le rôle IAM associés à la requête doivent disposer d'autorisations qui leur permettent de gérer l'éditeur de requêtes. Pour obtenir des instructions, consultez la rubrique Configuration des autorisations pour planifier une requête sur la console Amazon Redshift.

Planification des requêtes à l'aide de la console de gestion AWS

Pour planifier la requête à l'aide de la console de gestion AWS, procédez comme suit :

Remarque :

  • Vous devez utiliser l'éditeur de requêtes v1 pour planifier les requêtes.
  • Vous ne pouvez utiliser cet éditeur de requêtes qu'avec des clusters provisionnés.

1.    Ouvrez la console Amazon Redshift.

2.    Dans le panneau de navigation, sélectionnez Éditeur de requêtes.

3.    Suivez les instructions pour vous connecter à une base de données dans votre cluster.

4.    Suivez les instructions pour créer une planification pour exécuter une instruction SQL.

5.    Si vous utilisez AWS Secrets Manager avec Amazon Redshift, choisissez votre secret.

6.    Si vous utilisez des informations d'identification temporaires pour l'utilisateur IAM, choisissez votre cluster, puis renseignez la base de données et les noms d'utilisateur. Remarque : l'autorisation GetClusterCredentials doit être présente pour que l'utilisateur IAM puisse utiliser les informations d'identification temporaires.

7.    Cliquez sur Enregistrer.

Remarque : si vous avez activé Simple Notification Service (Amazon SNS), assurez-vous que l'action d'API « sns:Publish » est présente pour « events.amazonaws.com ». Pour confirmer, ajoutez l'instruction suivante :

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

Planification de requêtes à l'aide d'une instruction SQL avec EventBridge

Vous pouvez planifier des instructions SQL à l'aide d'EventBridge et de l'API de données Amazon Redshift. Dans l'exemple suivant, une planification est configurée pour actualiser les événements en cours toutes les 5 minutes.

1.    Créez une règle d'événement EventBridge intitulée « scheduled-refresh-currentEvents » et planifiez son exécution toutes les 5 minutes à l'aide d'expressions cron ou rate similaires à ce qui suit :

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

2.    Créez et enregistrez un fichier JSON intitulé refreshCurrentEvents.json à l'aide de votre éditeur de texte préféré. Il doit contenir le cluster, le rôle et l'ARN 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.    Créez un événement cible à l'aide du fichier JSON enregistré :

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

4.    Pour supprimer la cible et la règle, exécutez les commandes suivantes :

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

Affichage de l'état et des résultats d'une requête SQL

Pour consulter l'état et le résultat de la requête, procédez comme suit :

1.    Ouvrez la console Amazon Redshift.

2.    Dans le panneau de navigation, sélectionnez Éditeur de requête, puis Requêtes planifiées.

3.    Choisissez le nom de votre requête.

4.    Notez l'ID qui se trouve dans Historique de planification. Vous en aurez besoin lors de l'étape 7.

5.    Pour récupérer les résultats de la requête, endossez le rôle IAM utilisé pour planifier la requête à l'aide de la commande assume-role d'AWS CLI, comme ce qui suit :

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

La sortie renvoi l'ID de clé d'accès, la clé d'accès secrète et le jeton de session.

6.    Configurez les variables d'environnement à l'aide des commandes d'exportation suivantes :

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

7.    Récupérez les résultats à l'aide de la commande redshift-data d'AWS CLI, comme ce qui suit :

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

Informations connexes

Pourquoi ne puis-je pas me connecter à l'éditeur de requêtes Amazon Redshift ?

Utilisation de l'API Amazon Redshift Data pour interagir avec les clusters Amazon Redshift (langue française non garantie)

Création d'une règle Amazon EventBridge qui s'exécute selon une planification

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans