Questa documentazione è valida AWS CLI solo per la versione 1. Per la documentazione relativa alla versione 2 di AWS CLI, consulta la Guida per l'utente della versione 2.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Impostazione del formato di output in AWS CLI
Questo argomento descrive i diversi formati di output per AWS Command Line Interface (AWS CLI). AWS CLI Supporta i seguenti formati di output:
-
text— L'output è formattato come più righe di valori di stringa separati da tabulazioni. Questo può essere utile per passare l'output a un elaboratore di testi, ad esempio
grep
,sed
o.awk
-
table— L'output viene formattato come tabella utilizzando i caratteri +|- per formare i bordi delle celle. In genere presenta le informazioni in un formato comprensibile molto più semplice da leggere rispetto ad altri, ma non altrettanto utile a livello programmatico.
Come scegliere il formato di output
Come illustrato nell'argomento relativo alla configurazione, puoi specificare il formato di output in tre modi diversi:
-
Utilizzo dell'
output
opzione in un profilo denominato nelconfig
file: l'esempio seguente imposta il formato di output predefinito su.text
[default] output=text
-
Utilizzo della variabile di
AWS_DEFAULT_OUTPUT
ambiente: l'output seguente imposta il formato dei comandi in questa sessione della riga di comando fino alla modifica della variabile o al termine della sessione.table
L'utilizzo di questa variabile di ambiente sostituisce il valore impostato nel fileconfig
.$
export AWS_DEFAULT_OUTPUT="table"
-
Utilizzo dell'
--output
opzione sulla riga di comando: l'esempio seguente imposta l'output di questo solo comando sujson
. L'utilizzo di questa opzione con il comando sostituisce eventuali variabili di ambiente attualmente impostate o il valore nel fileconfig
.$
aws swf list-domains --registration-status REGISTERED --output json
Importante
Il tipo di output specificato modifica il funzionamento dell'--query
opzione:
-
Se si specifica
--output text
, l'output viene impaginato prima dell'applicazione del--query
filtro e quindi AWS CLI esegue la query una volta su ogni pagina dell'output. Per questo motivo, la query include il primo elemento corrispondente in ogni pagina, il che può generare un output aggiuntivo inaspettato. Per filtrare ulteriormente l'output, puoi utilizzare altri strumenti da riga di comando comehead
otail
. -
Se si specifica
--output json
l'output viene completamente elaborato come un'unica struttura nativa prima dell'applicazione del--query
filtro. AWS CLI Esegue la query solo una volta sull'intera struttura, producendo un risultato filtrato che viene quindi emesso.
JSONformato di output
JSON
Per un filtraggio più avanzato che potresti non essere in grado di utilizzare--query
, puoi prendere in considerazione un processore a riga di jq
comando. JSON Il tutorial ufficiale è disponibile per il download all'indirizzo http://stedolan.github.io/jq/
Di seguito è riportato un esempio di JSON output.
$
aws iam list-users --output json
{ "Users": [ { "Path": "/", "UserName": "Admin", "UserId": "AIDA1111111111EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/Admin", "CreateDate": "2014-10-16T16:03:09+00:00", "PasswordLastUsed": "2016-06-03T18:37:29+00:00" }, { "Path": "/backup/", "UserName": "backup-user", "UserId": "AIDA2222222222EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/backup/backup-user", "CreateDate": "2019-09-17T19:30:40+00:00" }, { "Path": "/", "UserName": "cli-user", "UserId": "AIDA3333333333EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/cli-user", "CreateDate": "2019-09-17T19:11:39+00:00" } ] }
Formato di output di testo
Il text
formato organizza l' AWS CLI output in righe delimitate da tabulazioni. Funziona bene con gli strumenti di testo Unix tradizionali comegrep
, e sed
awk
, e con l'elaborazione del testo eseguita da. PowerShell
Il formato di output text
segue la struttura di base riportata di seguito. Le colonne sono ordinate alfabeticamente in base ai nomi chiave corrispondenti dell'oggetto sottostante. JSON
IDENTIFIER sorted-column1 sorted-column2 IDENTIFIER2 sorted-column1 sorted-column2
Segue un esempio di output text
. Ogni campo è una scheda separata dalle altre, con una scheda aggiuntiva dove c'è un campo vuoto.
$
aws iam list-users --output text
USERS arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 / AIDA1111111111EXAMPLE Admin USERS arn:aws:iam::123456789012:user/backup/backup-user 2019-09-17T19:30:40+00:00 /backup/ AIDA2222222222EXAMPLE backup-user USERS arn:aws:iam::123456789012:user/cli-user 2019-09-17T19:11:39+00:00 / AIDA3333333333EXAMPLE cli-user
La quarta colonna è il campo PasswordLastUsed
ed è vuota per le ultime due voci perché gli utenti non accedono mai alla AWS Management Console.
Importante
Se specifichi l'output text
, ti consigliamo di utilizzare sempre l'opzione --query per garantire un comportamento coerente.
Questo perché il formato di testo ordina alfabeticamente le colonne di output in base al nome chiave dell'JSONoggetto sottostante restituito dal AWS servizio e risorse simili potrebbero non avere gli stessi nomi di chiave. Ad esempio, la JSON rappresentazione di un'istanza EC2 Amazon basata su Linux potrebbe contenere elementi che non sono presenti nella JSON rappresentazione di un'istanza basata su Windows o viceversa. Inoltre, negli aggiornamenti futuri delle risorse potrebbero essere aggiunti o eliminati elementi chiave-valore che modificano l'ordinamento della colonna. In questa situazione --query
potenzia la funzionalità dell'output di testo text
per consentire il controllo completo sul formato dell'output.
Nell'esempio seguente, il comando specifica gli elementi da visualizzare e definisce l'ordinamento delle colonne con la notazione elenco [key1, key2, ...]
. In questo modo gli utenti hanno la certezza che i valori chiave siano visualizzati sempre nella colonna prevista. Infine, notate come gli AWS CLI output siano il valore di None
chiavi che non esistono.
$
aws iam list-users --output text --query 'Users[*].[UserName,Arn,CreateDate,PasswordLastUsed,UserId]'
Admin arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 AIDA1111111111EXAMPLE backup-user arn:aws:iam::123456789012:user/backup-user 2019-09-17T19:30:40+00:00 None AIDA2222222222EXAMPLE cli-user arn:aws:iam::123456789012:user/cli-backup 2019-09-17T19:11:39+00:00 None AIDA3333333333EXAMPLE
L'esempio seguente mostra in che modo utilizzare grep
e awk
con l'output text
dal comando aws ec2
describe-instances
. Il primo comando visualizza la zona di disponibilità, lo stato corrente e l'ID istanza di ogni istanza nell'output text
. Il secondo comando elabora l'output per visualizzare solo l'istanza IDs di tutte le istanze in esecuzione nella zona di us-west-2a
disponibilità.
$
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text
us-west-2a running i-4b41a37c us-west-2a stopped i-a071c394 us-west-2b stopped i-97a217a0 us-west-2a running i-3045b007 us-west-2a running i-6fc67758
$
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | grep us-west-2a | grep running | awk '{print $3}'
i-4b41a37c i-3045b007 i-6fc67758
L'esempio seguente fa un passo in più e mostra non solo come filtrare l'output, ma anche come utilizzarlo per automatizzare la modifica dei tipi di istanza per ogni istanza arrestata.
$
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[State.Name, InstanceId]' --output text |
>
grep stopped |
>
awk '{print $2}' |
>
while read line;
>
do aws ec2 modify-instance-attribute --instance-id $line --instance-type '{"Value": "m1.medium"}';
>
done
L'text
output può essere utile anche in PowerShell. Poiché le colonne in text
output sono delimitate da tabulazioni, puoi facilmente dividere l'output in un array utilizzando il PowerShell `t
delimitatore. Il comando seguente mostra il valore della terza colonna (InstanceId
) se la prima colonna (AvailabilityZone
) corrisponde alla stringa us-west-2a
.
PS C:\>
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | %{if ($_.split("`t")[0] -match "us-west-2a") { $_.split("`t")[2]; } }
-4b41a37c i-a071c394 i-3045b007 i-6fc67758
Nota che, sebbene l'esempio precedente mostri come utilizzare il --query
parametro per analizzare JSON gli oggetti sottostanti ed estrarre la colonna desiderata, PowerShell ha una sua capacità di gestioneJSON, se la compatibilità multipiattaforma non è un problema. Invece di gestire l'output come testo, come richiede la maggior parte delle shell di comando, PowerShell consente di utilizzare il ConvertFrom-JSON
cmdlet per produrre un oggetto strutturato gerarchicamente. È quindi possibile accedere direttamente al membro desiderato da tale oggetto.
(aws ec2 describe-instances --output json | ConvertFrom-Json).Reservations.Instances.InstanceId
Suggerimento
Se l'output è di testo e si filtra l'output in un unico campo utilizzando il parametro --query
, l'output è una singola riga di valori separati da tabulazione. Per ottenere ogni valore su una riga separata, puoi inserire il campo di output tra parentesi, come mostrato negli esempi seguenti:
Output a riga singola, separato da tabulazione:
$
aws iam list-groups-for-user --user-name susan --output text --query "Groups[].GroupName"
HRDepartment Developers SpreadsheetUsers LocalAdmins
Ogni valore nella propria riga inserendo [GroupName]
tra parentesi:
$
aws iam list-groups-for-user --user-name susan --output text --query "Groups[].
[
GroupName]
"
HRDepartment Developers SpreadsheetUsers LocalAdmins
Formato di output di tabella
Il formato table
produce rappresentazioni leggibili degli output complessi di AWS CLI
in formato tabulare.
$
aws iam list-users --output table
----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ListUsers | +---------------------------------------------------------------------------------------------------------------------------------------------------------------+ || Users || |+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+| || Arn | CreateDate | PasswordLastUsed | Path | UserId | UserName || |+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+| || arn:aws:iam::123456789012:user/Admin | 2014-10-16T16:03:09+00:00 | 2016-06-03T18:37:29+00:00 | / | AIDA1111111111EXAMPLE | Admin || || arn:aws:iam::123456789012:user/backup/backup-user | 2019-09-17T19:30:40+00:00 | | /backup/ | AIDA2222222222EXAMPLE | backup-user || || arn:aws:iam::123456789012:user/cli-user | 2019-09-17T19:11:39+00:00 | | / | AIDA3333333333EXAMPLE | cli-user || +---------------------------------------------------------------------------------------------------------------------------------------------------------------+
Puoi combinare l'opzione --query
con il formato table
per visualizzare un set di elementi preselezionati dall'output non elaborato. Osserva le differenze di output nelle notazioni dizionario ed elenco: nel primo esempio, i nomi delle colonne sono in ordine alfabetico, mentre nel secondo esempio le colonne senza nome sono ordinate in base a quanto definito dall'utente. Per ulteriori informazioni sull'opzione --query
, consulta Uscita di filtraggio nel AWS CLI.
$
aws ec2 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}' --output table
------------------------------------------------------ | DescribeVolumes | +------------+----------------+--------------+-------+ | AZ | ID | InstanceId | Size | +------------+----------------+--------------+-------+ | us-west-2a| vol-e11a5288 | i-a071c394 | 30 | | us-west-2a| vol-2e410a47 | i-4b41a37c | 8 | +------------+----------------+--------------+-------+
$
aws ec2 describe-volumes --query 'Volumes[*].[VolumeId,Attachments[0].InstanceId,AvailabilityZone,Size]' --output table
---------------------------------------------------- | DescribeVolumes | +--------------+--------------+--------------+-----+ | vol-e11a5288| i-a071c394 | us-west-2a | 30 | | vol-2e410a47| i-4b41a37c | us-west-2a | 8 | +--------------+--------------+--------------+-----+