Les commandes Alibaba Cloud CLI renvoient les résultats au format JSON. Utilisez l'option --cli-query pour extraire des champs spécifiques à l'aide d'expressions JMESPath (la sortie reste au format JSON), ou l'option --output pour afficher les résultats sous forme de tableau. Vous pouvez également combiner les deux : filtrez d'abord, puis présentez les données dans un tableau.
Avant d'exécuter les commandes présentées dans cette rubrique, assurez-vous qu'Alibaba Cloud CLI est installé et configuré. Pour plus d'informations, consultez les rubriques Install, update, and uninstall Alibaba Cloud CLI et Configure and manage credentials.
Filtrer la sortie JSON avec --cli-query
L'option --cli-query accepte une expression JMESPath et l'applique à la réponse de l'API. Le résultat filtré reste au format JSON, ce qui permet aux scripts et aux outils en aval, tels que jq, de le traiter directement.
Syntaxe :
aliyun <product> <operation> --cli-query "<JMESPath expression>"
Les exemples suivants s'appuient sur la réponse de l'opération DescribeInstances d'ECS pour illustrer des modèles de filtrage courants.
Exemple 1 : Extraire une liste de valeurs
Extrayez tous les ID d'instance.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].InstanceId"
Exemple de sortie :
[
"i-1234567891234567****",
"i-abcdefghijklmnop****"
]
Exemple 2 : Extraire plusieurs champs
Extrayez les champs InstanceId et Status de chaque instance.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].[InstanceId,Status]"
Exemple de sortie :
[
[
"i-1234567891234567****",
"Stopped"
],
[
"i-abcdefghijklmnop****",
"Running"
]
]
Exemple 3 : Filtrer selon une condition
Extrayez uniquement les ID des instances en cours d'exécution.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[?Status=='Running'].InstanceId"
Exemple de sortie :
[
"i-abcdefghijklmnop****"
]
Exemple 4 : Restructurer la sortie
Utilisez une expression de hachage multisélection JMESPath pour restructurer la réponse en un tableau d'objets avec des noms de clé personnalisés.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].{id:InstanceId,status:Status}"
Exemple de sortie :
[
{
"id": "i-1234567891234567****",
"status": "Stopped"
},
{
"id": "i-abcdefghijklmnop****",
"status": "Running"
}
]
Les exemples précédents couvrent uniquement la syntaxe courante. JMESPath prend également en charge les expressions pipe, les fonctions intégrées et d'autres fonctionnalités avancées. Pour consulter la syntaxe complète, reportez-vous au JMESPath Tutorial.
Si --cli-query renvoie null, vérifiez que les noms de champ dans votre expression correspondent exactement aux clés de la réponse de l'API (les noms de champ sont sensibles à la casse).
Choisir la bonne option
Utilisez le tableau suivant pour déterminer quelle option correspond le mieux à votre scénario :
|
Scénario |
Option |
Description |
|
Extraire des valeurs dans un script |
|
La sortie est au format JSON, que des outils tels que |
|
Parcourir les résultats dans un terminal |
|
Un tableau est plus facile à lire qu'un fichier JSON brut. |
|
Filtrer et afficher sous forme de tableau |
Les deux |
L'option |
Paramètres de l'option --output
Alibaba Cloud CLI propose l'option --output pour extraire des champs spécifiques de la réponse et les afficher sous forme de tableau.
L'option --output prend en charge les paramètres suivants :
|
Paramètre |
Description |
Exemple |
|
cols |
Colonnes à afficher dans le tableau. Format :
|
|
|
rows |
Chemin de la source de données pour les lignes du tableau. Utilise la syntaxe JMESPath pour spécifier l'emplacement des données dans la réponse JSON. |
rows="Instances.Instance[]" |
|
num |
Indique s'il faut afficher une colonne de numéros de ligne. Lorsque ce paramètre est défini sur |
num="true" |
Exemples
Contexte
Les opérations de requête de l'API Alibaba Cloud renvoient des données structurées au format JSON, qui peuvent être difficiles à lire.
-
Prenons l'exemple de toutes les instances ECS. Exécutez la commande suivante.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou -
Exemple de réponse (partiel) :
{ "PageNumber": 1, "TotalCount": 2, "PageSize": 10, "RequestId": "2B76ECBD-A296-407E-BE17-7E668A609DDA", "Instances": { "Instance": [ { "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd", "InstanceTypeFamily": "ecs.xn4", "VlanId": "", "InstanceId": "i-1234567891234567****", "Status": "Stopped", "SecurityGroupIds": { "SecurityGroupId": [ "sg-bp12345678912345****", "sg-bp98765432198765****" ] } }, { "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd", "InstanceTypeFamily": "ecs.xn4", "VlanId": "", "InstanceId": "i-abcdefghijklmnop****", "Status": "Running", "SecurityGroupIds": { "SecurityGroupId": [ "sg-bp1abcdefghijklm****", "sg-bp1zyxwvutsrqpon****" ] } } ] } }
Exemple 1 : Extraire un champ de niveau racine
-
Exécutez la commande suivante pour extraire le champ
RequestId. Étant donné que ce champ se trouve au niveau racine de la réponse, vous n'avez pas besoin du paramètrerows.aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols=RequestId -
Exemple de sortie :
RequestId --------- 2B76ECBD-A296-407E-BE17-7E668A609DDA
Exemple 2 : Extraire des champs imbriqués
-
Exécutez la commande suivante pour extraire les champs
InstanceIdetStatus. Le chemin JMESPath pour ces champs estInstances.Instance[]; définissez donc le paramètrerowssurrows="Instances.Instance[]". Pour plus d'informations sur la syntaxe JMESPath, consultez le JMESPath Tutorial.aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="InstanceId,Status" rows="Instances.Instance[]" -
Exemple de sortie :
InstanceId | Status ---------- | ------ i-12345678912345678123 | Stopped i-abcdefghijklmnopqrst | Running -
Pour afficher les numéros de ligne, définissez le paramètre
numsurtrue. Exemple de sortie :Num | InstanceId | Status --- | ---------- | ------ 0 | i-12345678912345678123 | Stopped 1 | i-abcdefghijklmnopqrst | Running
Exemple 3 : Extraire des éléments d'un tableau
-
Exécutez la commande suivante pour extraire des éléments spécifiques du tableau
SecurityGroupId. Le chemin JMESPath pour ce tableau estInstances.Instance[].SecurityGroupIds.SecurityGroupId.aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="sg1:0,sg2:1" rows="Instances.Instance[].SecurityGroupIds.SecurityGroupId" -
Exemple de sortie :
sg1 | sg2 --- | --- sg-bp12345678912345**** | sg-bp98765432198765**** sg-bp1abcdefghijklm**** | sg-bp1zyxwvutsrqpon****