Mengatur format AWS CLI output - AWS Command Line Interface

Dokumentasi ini AWS CLI hanya untuk Versi 1. Untuk dokumentasi yang terkait dengan Versi 2 AWS CLI, lihat Panduan Pengguna Versi 2.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengatur format AWS CLI output

Topik ini menjelaskan format keluaran yang berbeda untuk AWS Command Line Interface (AWS CLI). AWS CLIMendukung format output berikut:

  • json— Output diformat sebagai string JSON.

  • text- Output diformat sebagai beberapa baris nilai string yang dipisahkan tab. Ini dapat berguna untuk meneruskan output ke prosesor teks, sepertigrep,sed, atauawk.

  • table— Output diformat sebagai tabel menggunakan karakter +|- untuk membentuk batas sel. Ini biasanya menyajikan informasi dalam format “ramah manusia” yang jauh lebih mudah dibaca daripada yang lain, tetapi tidak berguna secara terprogram.

Cara memilih format output

Seperti yang dijelaskan dalam topik konfigurasi, Anda dapat menentukan format output dalam tiga cara:

  • Menggunakan output opsi dalam profil bernama dalam config file - Contoh berikut menetapkan format output default ketext.

    [default] output=text
  • Menggunakan variabel AWS_DEFAULT_OUTPUT lingkungan - Output berikut menetapkan format table untuk perintah dalam sesi baris perintah ini sampai variabel diubah atau sesi berakhir. Menggunakan variabel lingkungan ini mengesampingkan nilai apa pun yang ditetapkan dalam file. config

    $ export AWS_DEFAULT_OUTPUT="table"
  • Menggunakan --output opsi pada baris perintah - Contoh berikut menetapkan output dari hanya satu perintah inijson. Menggunakan opsi ini pada perintah mengesampingkan variabel lingkungan yang saat ini ditetapkan atau nilai dalam file. config

    $ aws swf list-domains --registration-status REGISTERED --output json
penting

Jenis output yang Anda tentukan mengubah cara --query opsi beroperasi:

  • Jika Anda menentukan--output text, output diberi paginasi sebelum --query filter diterapkan, dan AWS CLI menjalankan kueri sekali pada setiap halaman output. Karena ini, kueri menyertakan elemen pencocokan pertama pada setiap halaman yang dapat menghasilkan output tambahan yang tidak terduga. Untuk memfilter output tambahan, Anda dapat menggunakan alat baris perintah lainnya seperti head atautail.

  • Jika Anda menentukan --output json output sepenuhnya diproses sebagai struktur asli tunggal sebelum --query filter diterapkan. AWS CLIMenjalankan kueri hanya sekali terhadap seluruh struktur, menghasilkan hasil yang difilter yang kemudian dikeluarkan.

Format keluaran JSON

JSON adalah format output default dari file. AWS CLI Sebagian besar bahasa pemrograman dapat dengan mudah memecahkan kode string JSON menggunakan fungsi bawaan atau dengan perpustakaan yang tersedia untuk umum. Anda dapat menggabungkan output JSON dengan opsi --query dengan cara yang ampuh untuk memfilter dan memformat output berformat AWS CLI JSON.

Untuk pemfilteran lebih lanjut yang mungkin tidak dapat Anda lakukan--query, Anda dapat mempertimbangkanjq, prosesor JSON baris perintah. Anda dapat mengunduhnya dan menemukan tutorial resminya di http://stedolan.github.io/jq/.

Berikut ini adalah contoh dari output JSON.

$ 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" } ] }

Format keluaran teks

textFormat mengatur AWS CLI output ke dalam baris yang dibatasi tab. Ini bekerja dengan baik dengan alat teks Unix tradisional sepertigrep,sed, danawk, dan pemrosesan teks yang dilakukan oleh PowerShell.

Format text output mengikuti struktur dasar yang ditunjukkan di bawah ini. Kolom diurutkan menurut abjad dengan nama kunci yang sesuai dari objek JSON yang mendasarinya.

IDENTIFIER sorted-column1 sorted-column2 IDENTIFIER2 sorted-column1 sorted-column2

Berikut ini adalah contoh text output. Setiap bidang adalah tab yang terpisah dari yang lain, dengan tab tambahan di mana ada bidang kosong.

$ 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

Kolom keempat adalah PasswordLastUsed bidang, dan kosong untuk dua entri terakhir karena pengguna tersebut tidak pernah masuk keAWS Management Console.

penting

Kami sangat menyarankan bahwa jika Anda menentukan text output, Anda juga selalu menggunakan --queryopsi untuk memastikan perilaku yang konsisten.

Ini karena format teks menurut abjad mengurutkan kolom keluaran dengan nama kunci objek JSON yang mendasari yang dikembalikan oleh AWS layanan, dan sumber daya serupa mungkin tidak memiliki nama kunci yang sama. Misalnya, representasi JSON dari instans Amazon EC2 berbasis Linux mungkin memiliki elemen yang tidak ada dalam representasi JSON dari instance berbasis Windows, atau sebaliknya. Selain itu, sumber daya mungkin memiliki elemen nilai kunci yang ditambahkan atau dihapus di pembaruan masa depan, mengubah urutan kolom. Di sinilah --query menambah fungsionalitas text output untuk memberi Anda kontrol penuh atas format output.

Dalam contoh berikut, perintah menentukan elemen mana yang akan ditampilkan dan mendefinisikan urutan kolom dengan notasi daftar. [key1, key2, ...] Ini memberi Anda keyakinan penuh bahwa nilai kunci yang benar selalu ditampilkan di kolom yang diharapkan. Akhirnya, perhatikan bagaimana AWS CLI output None sebagai nilai untuk kunci yang tidak ada.

$ 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

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan grep dan awk dengan text output dari aws ec2 describe-instances perintah. Perintah pertama menampilkan Availability Zone, status saat ini, dan ID instance dari setiap instance dalam text output. Perintah kedua memproses output yang hanya menampilkan ID instance dari semua instance yang berjalan di us-west-2a Availability Zone.

$ 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

Contoh berikut melangkah lebih jauh dan menunjukkan tidak hanya cara memfilter output, tetapi bagaimana menggunakan output itu untuk mengotomatiskan jenis instance yang berubah untuk setiap instance yang dihentikan.

$ 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

textOutputnya juga bisa berguna di PowerShell. Karena kolom dalam text output dibatasi tab, Anda dapat dengan mudah membagi output menjadi array dengan menggunakan PowerShell pembatas. `t Perintah berikut menampilkan nilai kolom ketiga (InstanceId) jika kolom pertama (AvailabilityZone) cocok dengan stringus-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

Perhatikan bahwa meskipun contoh sebelumnya menunjukkan cara menggunakan --query parameter untuk mengurai objek JSON yang mendasarinya dan mengeluarkan kolom yang diinginkan, PowerShell memiliki kemampuannya sendiri untuk menangani JSON, jika kompatibilitas lintas platform tidak menjadi perhatian. Alih-alih menangani output sebagai teks, seperti yang dibutuhkan kebanyakan shell perintah, PowerShell memungkinkan Anda menggunakan ConvertFrom-JSON cmdlet untuk menghasilkan objek yang terstruktur secara hierarkis. Anda kemudian dapat langsung mengakses anggota yang Anda inginkan dari objek itu.

(aws ec2 describe-instances --output json | ConvertFrom-Json).Reservations.Instances.InstanceId
Tip

Jika Anda mengeluarkan teks, dan memfilter output ke satu bidang menggunakan --query parameter, outputnya adalah satu baris dari nilai yang dipisahkan tab. Untuk mendapatkan setiap nilai ke baris terpisah, Anda dapat menempatkan bidang output dalam tanda kurung, seperti yang ditunjukkan pada contoh berikut.

Tab dipisahkan, output satu baris:

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].GroupName"
HRDepartment Developers SpreadsheetUsers LocalAdmins

Setiap nilai pada barisnya sendiri dengan memasukkan [GroupName] tanda kurung:

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].[GroupName]"
HRDepartment Developers SpreadsheetUsers LocalAdmins

Format keluaran tabel

tableFormat ini menghasilkan representasi yang dapat dibaca manusia dari AWS CLI output kompleks dalam bentuk tabel.

$ 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 || +---------------------------------------------------------------------------------------------------------------------------------------------------------------+

Anda dapat menggabungkan --query opsi dengan table format untuk menampilkan satu set elemen yang telah dipilih sebelumnya dari output mentah. Perhatikan perbedaan output antara notasi kamus dan daftar: pada contoh pertama, nama kolom diurutkan menurut abjad, dan pada contoh kedua, kolom yang tidak disebutkan namanya diurutkan seperti yang ditentukan oleh pengguna. Untuk informasi selengkapnya tentang --query opsi, lihatFilter AWS CLI keluaran.

$ 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 | +--------------+--------------+--------------+-----+