Selain menjalankan perintah Google Cloud CLI dari command line, Anda dapat menjalankannya dari skrip atau otomatisasi lainnya. Misalnya, saat menggunakan Jenkins untuk mendorong otomatisasi tugas Google Cloud.
gcloud CLI dilengkapi dengan berbagai alat seperti pemfilteran, pemformatan, dan flag --quiet
, sehingga Anda dapat menangani output dan mengotomatiskan tugas secara efektif.
Dasar-dasar pembuatan skrip dengan gcloud CLI
Guna mengetahui panduan langkah demi langkah untuk membuat skrip dasar dengan gcloud CLI, baca postingan blog ini: Pembuatan skrip dengan gcloud: panduan pemula untuk mengotomatiskan tugas Google Cloud.
Otorisasi
Saat membuat skrip dengan gcloud CLI, Anda harus mempertimbangkan metode otorisasi. gcloud CLI menyediakan dua opsi:
- Otorisasi akun pengguna
- Otorisasi akun layanan
Otorisasi akun pengguna direkomendasikan jika Anda menjalankan skrip atau otomatisasi lainnya pada satu komputer.
Untuk mengizinkan akses dan melakukan langkah-langkah penyiapan gcloud CLI umum lainnya:
gcloud init
Otorisasi akun layanan direkomendasikan jika Anda men-deploy skrip atau otomatisasi lainnya di seluruh mesin dalam lingkungan produksi. Ini juga merupakan metode otorisasi yang direkomendasikan jika Anda menjalankan perintah gcloud CLI pada instance virtual machine Compute Engine yang semua pengguna memiliki akses ke root
.
Untuk menggunakan otorisasi akun layanan, gunakan akun layanan yang ada atau buat yang baru di halaman Akun Layanan:
Untuk membuat dan mendownload kunci pribadi terkait sebagai file kunci berformat JSON, pilih Manage Keys dari menu tindakan untuk akun layanan tersebut.
Untuk menjalankan otorisasi, jalankan
gcloud auth activate-service-account
:
gcloud auth activate-service-account --key-file [KEY_FILE]
Anda dapat menerapkan SSH ke instance VM menggunakan gcloud compute ssh
, yang menangani autentikasi. File konfigurasi SSH dapat dikonfigurasi
menggunakan gcloud compute config-ssh
.
Untuk mendapatkan petunjuk mendetail terkait cara memberi otorisasi pada alat gcloud CLI, lihat Memberi otorisasi gcloud CLI.
Menonaktifkan perintah
Beberapa perintah gcloud CLI bersifat interaktif, yang meminta pengguna untuk mengonfirmasi operasi atau meminta input tambahan untuk perintah yang dimasukkan.
Dalam sebagian besar kasus, hal ini tidak diinginkan saat menjalankan perintah dalam skrip atau
otomatisasi lainnya. Anda dapat menonaktifkan perintah dari perintah gcloud CLI dengan menetapkan properti disable_prompts
di konfigurasi Anda ke True
atau dengan menggunakan flag global --quiet
atau -q
. Sebagian besar
perintah interaktif memiliki nilai default saat konfirmasi atau input tambahan
diperlukan. Jika perintah dinonaktifkan, nilai default ini akan digunakan.
Contoh:
gcloud debug targets list --quiet
Memfilter dan memformat output
Untuk membuat skrip dengan gcloud CLI, Anda harus memiliki output yang dapat diprediksi; di sinilah flag --filter
dan --format
dapat membantu. Alat ini memastikan bahwa ketika Anda menjalankan perintah menggunakan gcloud CLI, gcloud CLI akan menghasilkan output yang sesuai dengan format Anda (seperti json, yaml, csv, dan teks) dan filter (nama VM yang diawali dengan spesifikasi 'test', tahun pembuatan setelah 2015, dll.).
Jika Anda ingin mengikuti tutorial interaktif tentang penggunaan flag filter dan format, luncurkan tutorial menggunakan tombol berikut:
Contoh berikut menunjukkan penggunaan umum pemformatan dan pemfilteran dengan perintah gcloud CLI:
Cantumkan instance yang dibuat di zona us-central1-a:
gcloud compute instances list --filter="zone:us-central1-a"
Daftar dalam format JSON adalah project dengan label yang cocok dengan nilai tertentu (misalnya, label.env adalah 'test' dan label.version adalah alpha):
gcloud projects list --format="json" \
--filter="labels.env=test AND labels.version=alpha"
Buat daftar project dengan tanggal dan waktu pembuatannya yang ditentukan dalam zona waktu lokal:
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Tampilkan daftar project yang dibuat setelah tanggal tertentu dalam format tabel:
gcloud projects list \
--format="table(projectNumber,projectId,createTime)" \
--filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"
Perhatikan bahwa dalam contoh terakhir, digunakan proyeksi pada kunci. Filter
diterapkan pada kunci createTime
setelah format tanggal ditetapkan.
Tampilkan tabel bertingkat untuk kuota region:
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Cetak daftar kuota global yang disatukan dalam format CSV:
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Daftar resource instance komputasi dengan dekorasi dan judul kotak, yang diurutkan berdasarkan nama, dalam format tabel:
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Tampilkan daftar alamat email pengguna yang diautentikasi untuk project:
gcloud info --format='value(config.account)'
Untuk mengetahui lebih lanjut contoh lengkap tentang output yang mengonfigurasi kemampuan bawaan di dalam flag filters
, formats
, dan projections
gcloud CLI, lihat postingan blog tentang pemfilteran dan pemformatan ini.
Praktik terbaik
Jika Anda ingin skrip atau otomatisasi lainnya melakukan tindakan secara kondisional berdasarkan output perintah gcloud CLI, amati hal berikut:
Bergantung pada status keluar perintah.
Jika status keluar bukan nol, terjadi error dan output mungkin tidak lengkap kecuali jika dokumentasi perintah mencatat sebaliknya. Misalnya, perintah yang membuat beberapa resource hanya dapat membuat beberapa resource, mencantumkannya pada output standar, lalu keluar dengan status bukan nol. Atau, Anda dapat menggunakan properti
show_structured_logs
untuk mengurai log error. Jalankangcloud config
untuk detail selengkapnya.Jangan bergantung pada pesan yang dicetak ke error standar.
Kata-kata dalam pesan ini dapat berubah di versi gcloud CLI mendatang dan merusak otomatisasi Anda.
Jangan bergantung pada output mentah dari pesan yang dicetak ke output standar.
Output default untuk perintah apa pun dapat berubah dalam rilis mendatang. Anda dapat meminimalkan dampak perubahan tersebut menggunakan flag
--format
untuk memformat output dengan salah satu hal berikut:--format=json|yaml|csv|text|list
untuk menentukan nilai yang akan ditampilkan. Jalankangcloud topic formats
untuk opsi lainnya.Anda dapat mengubah output default dari
--format
menggunakanprojections
. Agar lebih detail, gunakan tanda--filter
untuk menampilkan subset nilai berdasarkan ekspresi. Anda kemudian dapat menulis skrip berdasarkan nilai-nilai yang dikembalikan tersebut.Contoh pemformatan dan output pemfilteran dapat ditemukan di bagian di bawah ini.
Contoh skrip
Dengan menggunakan fungsionalitas format dan filter, Anda dapat menggabungkan perintah gcloud CLI ke dalam skrip untuk mengekstrak informasi tersemat dengan mudah.
Mencantumkan kunci untuk semua akun layanan project Anda
Contoh skrip berikut mencantumkan kunci yang terkait dengan semua akun layanan project Anda berdasarkan:
- Melakukan iterasi pada proyek Anda
- Untuk setiap project, mendapatkan akun layanan terkait
Untuk setiap akun layanan, mendapatkan kunci terkait
Bash
#!/bin/bash
for project in $(gcloud projects list --format="value(projectId)")
do
echo "ProjectId: $project"
for robot in $(gcloud iam service-accounts list --project $project --format="value(email)")
do
echo " -> Robot $robot"
for key in $(gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
do
echo " $key"
done
done
done
Windows PowerShell
Atau sebagai Windows PowerShell:
foreach ($project in gcloud projects list --format="value(projectId)")
{
Write-Host "ProjectId: $project"
foreach ($robot in gcloud iam service-accounts list --project $project --format="value(email)")
{
Write-Host " -> Robot $robot"
foreach ($key in gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
{
Write-Host " $key"
}
}
}
Mengurai output untuk pemrosesan
Contoh berikut menunjukkan penguraian output untuk pemrosesan. Secara khusus,
contoh skrip menulis informasi akun layanan ke dalam array dan
memisahkan nilai dalam kolom serviceAccounts.scope()
berformat CSV
multi-nilai:
#!/bin/bash
for scopesInfo in $(
gcloud compute instances list --filter=name:instance-1 \
--format="csv[no-heading](name,id,serviceAccounts[].email.list(),
serviceAccounts[].scopes[].map().list(separator=;))")
do
IFS=',' read -r -a scopesInfoArray<<< "$scopesInfo"
NAME="${scopesInfoArray[0]}"
ID="${scopesInfoArray[1]}"
EMAIL="${scopesInfoArray[2]}"
SCOPES_LIST="${scopesInfoArray[3]}"
echo "NAME: $NAME, ID: $ID, EMAIL: $EMAIL"
echo ""
IFS=';' read -r -a scopeListArray<<< "$SCOPES_LIST"
for SCOPE in "${scopeListArray[@]}"
do
echo " SCOPE: $SCOPE"
done
done