Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation de l’API de données Amazon Redshift
Vous pouvez accéder à votre base de données Amazon Redshift en utilisant l’API de données Amazon Redshift intégrée. À l'aide de cette API, vous pouvez accéder aux données Amazon Redshift via des applications basées sur des services Web, notamment des blocs-notes AWS Lambda Amazon SageMaker et. AWS Cloud9 Pour plus d'informations sur ces applications AWS Lambda
L’API de données ne nécessite pas de connexion permanente à votre base de données. Au lieu de cela, il fournit un point de terminaison HTTP sécurisé et une intégration avec AWS les SDK. Vous pouvez utiliser le point de terminaison pour exécuter des instructions SQL sans avoir à gérer de connexions. Les appels à l’API de données sont asynchrones.
L'API de données utilise soit des informations d'identification stockées dans la base de données, AWS Secrets Manager soit des informations d'identification temporaires. Il n’est pas nécessaire de transmettre des mots de passe dans les appels d’API avec l’une ou l’autre méthode d’autorisation. Pour plus d'informations AWS Secrets Manager, voir Qu'est-ce que c'est AWS Secrets Manager ? dans le guide de AWS Secrets Manager l'utilisateur.
Pour plus d’informations sur les fonctions de l’API de données, consultez la Référence de l’API de données Amazon Redshift.
Utilisation de l’API de données Amazon Redshift
Avant d’utiliser l’API de données Amazon Redshift, passez en revue les étapes suivantes :
Déterminez si vous, en tant qu’appelant de l’API de données, disposez des autorisations requises. Pour de plus amples informations concernant l’autorisation, consultez Autorisation de l’accès à l’API de données Amazon Redshift.
Déterminez si vous prévoyez d’appeler l’API de données avec les informations d’identification d’authentification de Secrets Manager ou avec des informations d’identification temporaires. Pour plus d’informations, consultez Choix des informations d’authentification de la base de données lors de l’appel de l’API de données Amazon Redshift..
Configurez un secret si vous utilisez Secrets Manager pour les informations d’identification d’authentification. Pour plus d’informations, consultez Stockage des identifiants de base de données dans AWS Secrets Manager.
Passez en revue les considérations et les limitations lors de l’appel de l’API de données. Pour plus d’informations, consultez Considérations relatives à l’appel à l’API de données Amazon Redshift.
Appelez l'API Data depuis AWS Command Line Interface (AWS CLI), depuis votre propre code ou à l'aide de l'éditeur de requêtes de la console Amazon Redshift. Pour des exemples d'appels depuis le AWS CLI, voirAppel à l’API de données.
Considérations relatives à l’appel à l’API de données Amazon Redshift
Tenez compte des éléments suivants lorsque vous appelez l’API de données :
L’API de données Amazon Redshift peut accéder aux bases de données dans les clusters Amazon Redshift provisionnés et les groupes de travail Redshift sans serveur. Pour obtenir la liste des Régions AWS endroits où l'API Redshift Data est disponible, consultez les points de terminaison répertoriés pour l'API Redshift Data dans le. Référence générale d'Amazon Web Services
La durée maximale d’une requête est de 24 heures.
Le nombre maximal de requêtes actives (requêtes
STARTED
etSUBMITTED
) par cluster Amazon Redshift est de 200.La taille maximale du résultat de la requête est de 100 Mo (après compression gzip). Si l’appel renvoie plus de 100 Mo de données de réponse, l’appel est arrêté.
La durée maximale de conservation des résultats de la requête est de 24 heures.
La taille maximale de l’instruction de requête est de 100 Ko.
L’API de données est à même de lancer des requêtes sur des clusters à un ou plusieurs nœuds des types de nœuds suivants :
dc2.large
dc2.8xlarge
ra3.xlplus
ra3.4xlarge
ra3.16xlarge
Le clusters doit être dans un cloud privé virtuel (VPC) basé sur le service Amazon VPC.
Par défaut, les utilisateurs ayant le même rôle IAM ou les mêmes autorisations IAM que l’exécutant d’une fonction API
ExecuteStatement
ouBatchExecuteStatement
peuvent agir sur la même déclaration avec des fonctions APICancelStatement
,DescribeStatement
,GetStatementResult
etListStatements
. Pour agir sur la même instruction SQL provenant d’un autre utilisateur, l’utilisateur doit pouvoir assumer le rôle IAM de l’utilisateur qui a exécuté l’instruction SQL. Pour plus d’informations sur la façon d’assumer un rôle, consultez Autorisation de l’accès à l’API de données Amazon Redshift.-
Les instructions SQL du paramètre
Sqls
de l’opération d’APIBatchExecuteStatement
sont exécutées en tant que transaction unique. Ils s’exécutent en série dans l’ordre du tableau. Les instructions SQL suivantes ne démarrent pas tant que l’instruction précédente du tableau n’est pas terminée. Si une instruction SQL échoue, c’est parce qu’elle est exécutée comme une seule transaction que tout le travail est annulé. La durée de conservation maximale d’un jeton client utilisé dans une opération d’API
ExecuteStatement
ouBatchExecuteStatement
est de 8 heures.-
Chaque API de l’API de données Redshift dispose d’un quota de transactions par seconde avant de limiter les demandes. Pour ce quota, consultez Quotas pour l’API de données Amazon Redshift. Si le taux de demande dépasse le quota, une exception
ThrottlingException
avec le code d’état HTTP : 400 est renvoyée. Pour répondre à la limitation, utilisez une stratégie de nouvelle tentative telle que décrite dans Comportement de nouvelle tentative, dans le Guide de référence des outils et des kits AWS SDK. Cette stratégie est mise en œuvre automatiquement pour limiter les erreurs dans certains AWS SDK.Note
Par défaut AWS Step Functions, les nouvelles tentatives ne sont pas activées. Si vous devez appeler une API de données Redshift dans une machine d’état Step Functions, incluez le paramètre d’idempotence
ClientToken
dans votre appel d’API de données Redshift. La valeur deClientToken
doit être conservée entre les nouvelles tentatives. Dans l’exemple d’extrait suivant d’une demande adressée à l’APIExecuteStatement
, l’expressionStates.ArrayGetItem(States.StringSplit($$.Execution.Id, ':'), 7)
utilise une fonction intrinsèque pour extraire la partie UUID de$$.Execution.Id
, qui est unique pour chaque exécution de la machine d’état. Pour plus d’informations, consultez Fonctions intrinsèques dans le Guide du développeur AWS Step Functions .{ "Database": "dev", "Sql": "select 1;", "ClusterIdentifier": "MyCluster", "ClientToken.$": "States.ArrayGetItem(States.StringSplit($$.Execution.Id, ':'), 7)" }
Choix des informations d’authentification de la base de données lors de l’appel de l’API de données Amazon Redshift.
Lorsque vous appelez l’API de données, vous utilisez l’une des méthodes d’authentification suivantes pour certaines fonctions de l’API. Chaque méthode nécessite une combinaison différente de paramètres.
- AWS Secrets Manager
-
Avec cette méthode, fournissez
secret-arn
le secret stocké dans AWS Secrets Manager lequel ausername
etpassword
. Le secret spécifié contient des informations d’identification pour vous connecter à ladatabase
que vous spécifiez. Lorsque vous vous connectez à un cluster, vous fournissez également le nom de la base de données, Si vous fournissez un identifiant de cluster (dbClusterIdentifier
), il doit correspondre à l’identifiant de cluster stocké dans le secret. Lorsque vous vous connectez à un groupe de travail sans serveur, vous devez également fournir le nom de la base de données. Pour plus d’informations, consultez Stockage des identifiants de base de données dans AWS Secrets Manager. - Informations d’identification temporaires
-
Avec cette méthode, choisissez l’une des options suivantes :
Lors de la connexion à un groupe de travail sans serveur, indiquez le nom du groupe de travail et le nom de la base de données. Le nom de l’utilisateur de la base de données est dérivé de l’identité IAM. Par exemple,
arn:iam::123456789012:user:foo
a le nom d’utilisateur de la base de donnéesIAM:foo
. De plus, l’autorisation d’appeler l’opérationredshift-serverless:GetCredentials
est requise.Lorsque vous vous connectez à un cluster en tant qu’identité IAM, indiquez l’identifiant du cluster et le nom de la base de données. Le nom de l’utilisateur de la base de données est dérivé de l’identité IAM. Par exemple,
arn:iam::123456789012:user:foo
a le nom d’utilisateur de la base de donnéesIAM:foo
. De plus, l’autorisation d’appeler l’opérationredshift:GetClusterCredentialsWithIAM
est requise.Lorsque vous vous connectez à un cluster en tant qu’utilisateur de base de données, indiquez l’identifiant du cluster, le nom de la base de données et le nom de l’utilisateur de la base de données. De plus, l’autorisation d’appeler l’opération
redshift:GetClusterCredentials
est requise. Pour savoir comment rejoindre des groupes de base de données lors de la connexion avec cette méthode, consultez Rejoindre des groupes de base de données lors de la connexion à un cluster.
Avec ces méthodes, vous pouvez également fournir une region
valeur qui indique l' Région AWS emplacement de vos données.
Mappage de types de données JDBC lors de l’appel à l’API de données Amazon Redshift
Le tableau suivant associe les types de données Java Database Connectivity (JDBC) aux types de données que vous spécifiez dans les appels d’API de données.
Type de données JDBC |
Type de données API de données |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Autres types (y compris les types liés à la date et à l’heure) |
|
Les valeurs de chaîne de caractères sont transmises à la base de données Amazon Redshift et implicitement converties en un type de données de base de données.
Note
Actuellement, l’API de données ne prend pas en charge les tableaux d’identificateurs uniques universels (UUID).
Exécution d’instructions SQL avec des paramètres lors de l’appel à l’API de données Amazon Redshift
Vous pouvez contrôler le texte SQL soumis au moteur de la base de données en appelant la fonction de l’API de données tout en utilisant des paramètres pour les parties de l’instruction SQL. Les paramètres nommés constituent un moyen flexible de passer des paramètres sans les coder en dur dans le texte. Ils vous aident à réutiliser le texte SQL et à éviter les problèmes d’injection SQL.
L'exemple suivant montre les paramètres nommés d'un parameters
champ d'une execute-statement
AWS CLI commande.
--parameters "[{\"name\": \"id\", \"value\": \"1\"},{\"name\": \"address\", \"value\": \"Seattle\"}]"
Tenez compte des éléments suivants lorsque vous utilisez des paramètres nommés :
-
Les paramètres nommés ne peuvent être utilisés que pour remplacer des valeurs dans les instructions SQL.
Vous pouvez remplacer les valeurs d’une instruction INSERT, telle que
INSERT INTO mytable VALUES(:val1)
.Les paramètres nommés peuvent être dans n’importe quel ordre et ils peuvent être utilisés plusieurs fois dans le texte SQL. L’option de paramétrage présentée dans un précédent exemple, les valeurs
1
etSeattle
sont insérées dans les colonnesid
etaddress
de la table. Dans le texte SQL, vous spécifiez les paramètres nommés comme suit :--sql "insert into mytable values (:id, :address)"
Vous pouvez remplacer les valeurs dans une clause de condition, telle que
WHERE attr >= :val1
,WHERE attr BETWEEN :val1 AND :val2
etHAVING COUNT(attr) > :val
.Vous ne pouvez pas remplacer les noms de colonnes dans une instruction SQL, tels que
SELECT column-name
,ORDER BY column-name
, ouGROUP BY column-name
.Par exemple, l’instruction SELECT suivante échoue en raison d’une syntaxe non valide.
--sql "SELECT :colname, FROM event" --parameters "[{\"name\": \"colname\", \"value\": \"eventname\"}]"
Si vous décrivez (opération
describe-statement
) l’instruction avec l’erreur de syntaxe, la commandeQueryString
renvoyée ne remplace pas le nom de la colonne par le paramètre ("QueryString": "SELECT :colname, FROM event"
) et une erreur est signalée (ERREUR : erreur de syntaxe à ou près de « FROM » Position : 12
).Vous ne pouvez pas remplacer les noms de colonnes dans une fonction d’agrégation, tels que
COUNT(column-name)
,AVG(column-name)
, ouSUM(column-name)
.Vous ne pouvez pas remplacer les noms de colonnes dans une clause JOIN.
Lorsque le SQL s’exécute, les données sont implicitement converties en un type de données. Pour plus d’informations sur le moulage des types de données, consultez Types de données dans le Manuel du développeur de base de données Amazon Redshift.
Vous ne pouvez pas définir une valeur sur NULL. L’API de données l’interprète comme la chaîne littérale
NULL
. L’exemple suivant remplaceid
par la chaîne littéralenull
. Pas la valeur SQL NULL.--parameters "[{\"name\": \"id\", \"value\": \"null\"}]"
Vous ne pouvez pas définir une valeur de longueur de zéro. L’instruction SQL de l’API de données échoue. L’exemple suivant tente de définir
id
avec une valeur de longueur de zéro et se solde par un échec de l’instruction SQL.--parameters "[{\"name\": \"id\", \"value\": \"\"}]"
Vous ne pouvez pas définir un nom de table dans l’instruction SQL avec un paramètre. L’API de données suit la règle du JDBC
PreparedStatement
.La sortie de l’opération
describe-statement
renvoie les paramètres de requête d’une instruction SQL.Seule l’opération
execute-statement
prend en charge les instructions SQL avec des paramètres.
Exécution d’instructions SQL avec un jeton d’idempotence lors de l’appel à l’API de données Amazon Redshift
Lorsque vous effectuez une demande d’API de mutation, la demande renvoie généralement un résultat avant la fin des flux de travail asynchrones de l’opération. Les opérations peuvent également expirer ou rencontrer d’autres problèmes de serveur avant d’être terminées, même si la demande a déjà renvoyé un résultat. Par conséquent, il peut être difficile de déterminer si la demande a abouti ou non et de multiples tentatives peuvent être déclenchées pour s’assurer que l’opération se termine correctement. Toutefois, si la demande initiale et les tentatives suivantes aboutissent, l’opération est terminée plusieurs fois. Vous pouvez ainsi mettre à jour plus de ressources que prévu.
L’idempotence garantit qu’une demande d’API se termine correctement. Avec une demande idempotente, si la demande d’origine se termine avec succès, toutes les tentatives suivantes se terminent avec succès, sans aucune action supplémentaire. Les opérations ExecuteStatement
et BatchExecuteStatement
de l’API de données ont un paramètre idempotent ClientToken
facultatif. Le ClientToken
expire au bout de 8 heures.
Important
Si vous appelez ExecuteStatement
et effectuez BatchExecuteStatement
des opérations à partir d'un AWS SDK, celui-ci génère automatiquement un jeton client à utiliser lors d'une nouvelle tentative. Dans ce cas, nous ne recommandons pas d’utiliser le paramètre client-token
avec les opérations ExecuteStatement
et BatchExecuteStatement
. Consultez le CloudTrail journal pour voir leClientToken
. Pour un exemple de CloudTrail journal, voirExemples d’API de données Amazon Redshift.
La execute-statement
AWS CLI commande suivante illustre le client-token
paramètre facultatif pour l'idempotentie.
aws redshift-data execute-statement
--region us-west-2
--secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn
--cluster-identifier mycluster-test
--sql "select * from stl_query limit 1"
--database dev
--client-token b855dced-259b-444c-bc7b-d3e8e33f94g1
La table suivante présente certaines réponses courantes que vous pouvez obtenir pour les demandes d’API idempotentes et fournit des recommandations pour réessayer.
Réponse | Recommandation | Commentaires |
---|---|---|
200 (OK) |
Ne pas réessayer |
La demande d’origine s’est terminée avec succès. Toutes les tentatives suivantes sont renvoyées avec succès. |
Codes de réponse de la série 400 |
Ne pas réessayer |
La demande présente un problème, parmi les suivants :
Si la demande concerne une ressource en train de changer d’état, il est possible que la nouvelle tentative aboutisse. |
Codes de réponse de la série 500 |
Réessayer |
L'erreur est due à un problème AWS côté serveur et est généralement transitoire. Répétez la demande avec une stratégie de backoff appropriée. |
Pour plus d’informations sur les codes de réponse Amazon Redshift, consultez Common Errors (Erreurs courantes) dans la référence d’API Amazon Redshift.