Aller au contenu principal
Ce projet est en phase bêta. Tu as trouvé un bug ? Ouvrir un ticket GitHub. Une question ou une idée ? Pose ta question dans Discussions — tes retours sont les bienvenus !
Quelle est la qualité de la traduction sur cette page ?

Utiliser l'API IBM Cloud Resource Controller pour la gestion des instances

Tu peux utiliser l'API REST IBM Cloud® Resource Controller pour obtenir, créer et mettre à jour des instances de manière programmatique.

Tous les points de terminaison du Resource Controller exigent que tu t'authentifies en transmettant un en-tête appelé Authorization avec le jeton porteur. Consulte le guide de configuration de l'API REST.

Obtenir une instance​

Utilise le point de terminaison GET /v2/resource_instances/{crn} pour obtenir des informations sur une instance particulière. Le CRN doit être encodé en URL dans le chemin.

En plus des champs standard du Resource Controller, la réponse inclut des champs spécifiques à quantum à la fois dans parameters et dans extensions. extensions stocke les métadonnées normalisées de l'instance, tandis que parameters ne stocke que la demande de modification la plus récente de l'instance. Par conséquent, tu devrais lire à partir de extensions plutôt que de parameters.

L'objet extensions inclut ces champs :

  • instance_limit_seconds — Entier, ou null. La limite de temps d'utilisation pour l'instance. Voir Définir les limites d'allocation d'instance.

  • usage_allocation_seconds — Entier, ou null. Le temps alloué à cette instance, utilisé par l'ordonnanceur à partage équitable pour déterminer la priorité dans la file d'attente. Voir Définir les limites d'allocation d'instance.

  • backends — Tableau de chaînes. La liste d'autorisation des noms de backends disponibles pour cette instance. ["ANY"] signifie que tous les backends du plan sont disponibles (valeur par défaut). [] signifie qu'aucun backend n'est disponible.

Le champ backends peut être obsolète

Le champ backends de l'objet extensions peut être obsolète. Cela peut se produire lorsque le support IBM Quantum modifie ton compte d'une manière qui affecte les instances. Par exemple, lorsqu'un backend est retiré d'un compte, cela met à jour les backends de l'instance, mais ce changement n'est actuellement pas encore reflété dans l'API Resource Controller.

À la place, la solution de contournement actuelle consiste à utiliser l'API REST IBM Quantum Compute Service avec le point de terminaison GET /v1/backends. (Assure-toi de définir l'en-tête Service-CRN sur le CRN de ton instance.)

Le CRN doit être encodé en URL dans le chemin. Remplace chaque : par %3A et chaque / par %2F. Par exemple, crn:v1:bluemix:... devient crn%3Av1%3Abluemix%3A....

curl \
--request GET \
--url 'https://resource-controller.cloud.ibm.com/v2/resource_instances/<YOUR_INSTANCE_CRN_URL_ENCODED>' \
--header 'Authorization: Bearer <YOUR_BEARER_TOKEN>'

Obtenir une liste de toutes les instances​

Utilise le point de terminaison GET /v2/resource_instances pour obtenir une liste de toutes tes instances. Définis le paramètre de requête resource_id sur b6049020-80f4-11eb-a0f7-e35ec9b4054f pour filtrer les instances IBM Quantum®.

Si ton compte comporte plusieurs plans et que tu souhaites filtrer par plan, définis le paramètre de requête resource_plan_id sur l'une des valeurs suivantes :

Planresource_plan_id
Premium7f666d17-7893-47d8-bf9d-2b2389fc4dfc
Flex53bde9d3-cdbb-46f5-a98f-60ebcadf7260
Pay-As-You-Go5304b575-3cff-4455-90dc-ae4367762093
Open850b21a7-71de-4e53-9441-1abdd202f35d

Chaque résultat inclut le même champ extensions que celui décrit dans Obtenir une instance.

curl \
--request GET \
--url 'https://resource-controller.cloud.ibm.com/v2/resource_instances?resource_id=b6049020-80f4-11eb-a0f7-e35ec9b4054f' \
--header 'Authorization: Bearer <YOUR_BEARER_TOKEN>'

Mettre à jour une instance​

Utilise le point de terminaison PATCH /v2/resource_instances/{crn} pour mettre à jour la limite, l'allocation et les backends autorisés pour une instance. Le CRN doit être encodé en URL dans le chemin.

Transmets un objet JSON parameters dans le corps de la requête avec les champs que tu souhaites modifier, ainsi que l'en-tête "Content-Type: application/json". Les champs omis restent inchangés.

  • instance_limit_seconds — Entier, ou null. La limite de temps d'utilisation pour l'instance. Voir Définir les limites d'allocation d'instance.

  • usage_allocation_seconds — Entier, ou null. Le temps alloué à cette instance, utilisé par l'ordonnanceur à partage équitable pour déterminer la priorité dans la file d'attente. Voir Définir les limites d'allocation d'instance. Ne s'applique pas aux instances Pay-As-You-Go.

  • backends — Tableau de chaînes. La liste d'autorisation des noms de backends disponibles pour cette instance. ["ANY"] signifie que tous les backends du plan sont disponibles. [] signifie qu'aucun backend n'est disponible.

Inclus toujours un horodatage unique

L'API ignore silencieusement la requête si parameters est identique à la requête précédente. Dans l'objet parameters, inclus toujours un champ timestamp défini sur l'heure actuelle afin que chaque requête soit traitée comme unique.

La réponse du point de terminaison est similaire à celle de l'obtention d'une instance, y compris la façon dont elle gère l'objet extensions.

Le CRN doit être encodé en URL dans le chemin. Remplace chaque : par %3A et chaque / par %2F. Par exemple, crn:v1:bluemix:... devient crn%3Av1%3Abluemix%3A....

curl \
--request PATCH \
--url 'https://resource-controller.cloud.ibm.com/v2/resource_instances/<YOUR_INSTANCE_CRN_URL_ENCODED>' \
--header 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
--header 'Content-Type: application/json' \
--data "{
\"parameters\": {
\"timestamp\": \"$(date -u +"%Y-%m-%dT%H:%M:%SZ")\",
\"usage_allocation_seconds\": 220
}
}"

Créer une nouvelle instance​

Utilise le point de terminaison POST /v2/resource_instances pour créer (provisionner) une nouvelle instance. Transmets un corps JSON avec l'en-tête "Content-Type: application/json".

Champs obligatoires :

  • name — Un nom lisible par un humain pour l'instance.

  • target — La région, par exemple us-east ou eu-de.

  • resource_plan_id — Le plan pour cette instance. Voir le tableau des ID de plan.

  • resource_group — Le groupe de ressources à utiliser.

Tu peux également inclure un objet parameters pour définir des valeurs spécifiques à quantum :

  • instance_limit_seconds — Entier, ou null. La limite de temps d'utilisation pour l'instance. Voir Définir les limites d'allocation d'instance.

  • usage_allocation_seconds — Entier, ou null. Le temps alloué à cette instance, utilisé par l'ordonnanceur à partage équitable pour déterminer la priorité dans la file d'attente. Voir Définir les limites d'allocation d'instance. Ne s'applique pas aux instances Pay-As-You-Go.

  • backends — Tableau de chaînes. La liste d'autorisation des noms de backends disponibles pour cette instance. ["ANY"] signifie que tous les backends du plan sont disponibles. [] signifie qu'aucun backend n'est disponible.

curl \
--request POST \
--url 'https://resource-controller.cloud.ibm.com/v2/resource_instances' \
--header 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"name": "my-new-instance",
"target": "us-east",
"resource_plan_id": "7f666d17-7893-47d8-bf9d-2b2389fc4dfc",
"resource_group": "<YOUR_RESOURCE_GROUP_ID>",
"parameters": {
"instance_limit_seconds": 300,
"usage_allocation_seconds": 220
}
}'

Configurer l'accès aux Qiskit Functions sur une instance​

Utilise ces instructions pour configurer l'accès aux Qiskit Functions sur une instance IBM Quantum Compute Service existante à l'aide de l'API IBM Cloud Resource Controller. Suis les instructions dans l'ordre, car les commandes s'appuient les unes sur les autres. Par exemple, des variables telles que le jeton et l'URL sont définies à une étape et réutilisées dans les étapes suivantes.

Prérequis​

  • Une clé API IBM Cloud (aussi appelée jeton). Si nécessaire, crée ta clé API sur le tableau de bord.

  • Le CRN de l'instance que tu souhaites configurer. Le CRN de l'instance est répertorié sur ta page Instances.

Étape 1 : Obtenir un jeton porteur​

Échange ta clé API contre un jeton porteur. Tu transmettras ce jeton dans l'en-tête d'autorisation de toutes les requêtes du Resource Controller. Exécute le code suivant pour générer un jeton porteur :

curl --request POST \
--url 'https://iam.cloud.ibm.com/identity/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data 'apikey=<YOUR_API_KEY>&grant_type=urn%3Aibm%3Aparams%3Aoauth%3Agrant-type%3Aapikey'
--silent | jq .

La réponse inclut un champ access_token, qui est ton jeton porteur. Copie cette valeur.

Étape 2 : Vérifier l'accès​

Avant d'apporter des modifications, confirme que ton jeton fonctionne et vérifie la configuration actuelle de l'instance.

Important

Le CRN doit être encodé manuellement en URL dans le chemin. Remplace chaque : par %3A et chaque / par %2F. Par exemple, crn:v1:bluemix:... devient crn%3Av1%3Abluemix%3A....

curl --request GET \
--url 'https://resource-controller.cloud.ibm.com/v2/resource_instances/<YOUR_INSTANCE_CRN_URL_ENCODED>' \
--header 'Authorization: Bearer <YOUR_BEARER_TOKEN>'

Une réponse 200 OK confirme que ton jeton est valide. La configuration actuelle de l'instance se trouve dans le champ extensions de la réponse. Utilise celui-ci plutôt que parameters, qui pourrait être obsolète.

Étape 3 : Rechercher la configuration des fonctions au niveau du compte​

Une instance ne peut se voir accorder l'accès qu'à ce à quoi le compte a droit. Avant de configurer l'instance, recherche la configuration du compte afin de connaître les fonctions, modèles économiques et autorisations disponibles à accorder. C'est la source de vérité pour les valeurs que tu enverras à l'étape 4.

Appelle GET /accounts/{id} sur l'API Qiskit Runtime avec ta clé API. {id} est ton ID de compte sans le préfixe a/. Tu peux le trouver à partir du CRN de l'instance (crn:v1:bluemix:public:quantum-computing:...:a/<ACCOUNT_ID>:...).

curl --request GET \
--url 'https://quantum.cloud.ibm.com/api/v1/accounts/<ACCOUNT_ID>' \
--header 'Authorization: apikey <YOUR_API_KEY>'

Chaque plan de la réponse inclut un tableau functions et, si configuré, un objet custom_functions. Ceux-ci répertorient le nom exact, le fournisseur, le modèle économique et les valeurs d'autorisations que tu peux accorder à une instance dans le cadre de ce plan.

remarque

GET /accounts/{id} montre ce qui peut être accordé au niveau du compte. GET /functions (voir Vérifier le résultat) montre ce qui a déjà été accordé à une instance spécifique. Utilise le point de terminaison account pour découvrir les valeurs valides, et le point de terminaison functions pour confirmer le résultat.

Étape 4 : Configurer l'accès aux fonctions​

Mets à jour l'instance pour accorder l'accès aux Catalog Functions et Custom Functions.

Remarques importantes
  • Les valeurs name, provider et business_model dans functions doivent correspondre exactement aux entrées configurées au niveau du compte (voir l'étape précédente). Les autorisations doivent être un sous-ensemble non vide des autorisations du compte pour cette fonction. De même, custom_functions.permissions doit être un sous-ensemble non vide des autorisations custom_functions du compte.
  • Inclus un horodatage dans parameters à chaque PATCH. Le Resource Controller déduplique les requêtes PATCH en comparant les parameters entrants à la dernière valeur qu'il a stockée. S'ils correspondent, la requête est abandonnée silencieusement avec 200 OK sans atteindre le service. Inclus une valeur d'horodatage changeante pour éviter cela.
curl --request PATCH \
--url 'https://resource-controller.cloud.ibm.com/v2/resource_instances/<YOUR_INSTANCE_CRN_URL_ENCODED>' \
--header 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"parameters": {
"timestamp": "2026-06-30T00:00:00Z",
"functions": [
{
"name": "<FUNCTION_NAME>",
"provider": "<PROVIDER>",
"business_model": "<BUSINESS_MODEL>",
"permissions": [
"function.read",
"function.run",
"function-files.read",
"function-files.write"
]
}
],
"custom_functions": {
"permissions": [
"function-custom.write",
"function-custom.run"
]
}
}
}'

Une réponse 200 OK indique le succès. La configuration mise à jour apparaît dans le champ extensions de la réponse.

Supprimer l'accès aux fonctions​

Catalog Functions​

Pour supprimer les Catalog Functions d'une instance, envoie un PATCH avec "functions": null :

--data '{
"parameters": {
"timestamp": "2026-06-30T00:00:01Z",
"functions": null
}
}'

Définir "functions": [] (un tableau vide) efface également les Catalog Functions de manière équivalente. null est la forme canonique.

Custom Functions​

Pour supprimer les Custom Functions d'une instance, envoie un PATCH avec "custom_functions": null :

--data '{
"parameters": {
"timestamp": "2026-06-30T00:00:02Z",
"custom_functions": null
}
}'

Définir "custom_functions": {"permissions": []} efface également les fonctions personnalisées de manière équivalente. null est la forme canonique.

Vérifier le résultat​

Pour confirmer que l'instance dispose de la configuration Qiskit Functions correcte, utilise GET /functions de l'API Qiskit Runtime plutôt que le Resource Controller. L'état stocké du Resource Controller peut être obsolète si des modifications au niveau du compte ont mis à jour l'instance en dehors du Resource Controller.

curl --request GET \
--url 'https://quantum.cloud.ibm.com/api/v1/functions' \
--header 'Authorization: apikey <YOUR_API_KEY>' \
--header 'Service-CRN: <YOUR_INSTANCE_CRN>'

La réponse répertorie les fonctions auxquelles l'instance a actuellement accès.