Selain menjalankan perintah Google Cloud CLI dari command line, Anda dapat menjalankannya dari skrip atau otomatisasi lainnya — misalnya, saat menggunakan Jenkins untuk mendorong otomatisasi Google Cloud tugas.
Google Cloud SDK dilengkapi dengan berbagai alat seperti pemfilteran, pemformatan, dan tanda --quiet, yang memungkinkan Anda menangani output dan mengotomatiskan tugas secara efektif.
Dasar-dasar pembuatan skrip dengan Google Cloud SDK
Untuk panduan langkah demi langkah tentang cara membuat skrip dasar dengan gcloud CLI, lihat postingan blog ini: Membuat skrip dengan gcloud: panduan untuk pemula dalam mengotomatiskan Google Cloud tugas.
Otorisasi
Saat membuat skrip dengan Google Cloud SDK, Anda harus mempertimbangkan metode otorisasi. Google Cloud SDK menyediakan dua opsi:
- Otorisasi akun pengguna
- Otorisasi akun layanan
Otorisasi akun pengguna direkomendasikan jika Anda menjalankan skrip atau otomatisasi lainnya di satu mesin.
Untuk mengotorisasi akses dan melakukan langkah-langkah penyiapan Google Cloud SDK umum lainnya:
gcloud init
Otorisasi akun layanan direkomendasikan jika Anda men-deploy skrip atau otomatisasi lainnya di seluruh mesin dalam lingkungan produksi. Metode otorisasi ini juga direkomendasikan jika Anda menjalankan perintah gcloud CLI pada instance mesin virtual Compute Engine tempat semua pengguna memiliki akses ke root.
Untuk menggunakan otorisasi akun layanan, gunakan akun layanan yang ada atau buat akun 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.
Untuk menjalankan otorisasi, jalankan
gcloud auth activate-service-account:
gcloud auth activate-service-account --key-file [KEY_FILE]
Anda dapat melakukan SSH ke instance VM menggunakan
gcloud compute ssh,
yang menangani autentikasi. File konfigurasi SSH dapat dikonfigurasi
menggunakan gcloud compute config-ssh.
Untuk mengetahui petunjuk mendetail terkait cara mengotorisasi alat Google Cloud SDK, lihat Mengotorisasi gcloud CLI.
Menonaktifkan perintah
Beberapa perintah gcloud CLI bersifat interaktif, 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 dalam
konfigurasi ke True atau
dengan menggunakan tanda 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, penting untuk memiliki
output yang dapat diprediksi; di sinilah
--filter dan
--format tanda membantu. Tanda ini memastikan bahwa saat Anda menjalankan perintah menggunakan gcloud CLI, perintah tersebut akan menghasilkan output yang sesuai dengan format (seperti json, yaml, csv, dan teks) dan spesifikasi filter (nama VM yang diawali dengan 'test', tahun pembuatan setelah 2015, dll.).
Contoh berikut menunjukkan penggunaan umum pemformatan dan pemfilteran dengan perintah gcloud CLI:
Mencantumkan instance yang dibuat di zona us-central1-a:
gcloud compute instances list --filter="zone:us-central1-a"
Mencantumkan project dalam format JSON yang labelnya 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"
Mencantumkan project dengan tanggal dan waktu pembuatannya yang ditentukan dalam zona waktu lokal:
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Mencantumkan 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 pada contoh terakhir, proyeksi pada kunci digunakan. Filter diterapkan pada kunci createTime setelah pemformatan tanggal ditetapkan.
Mencantumkan tabel bertingkat kuota suatu region:
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Mencetak daftar kuota global yang diratakan dalam format CSV:
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Mencantumkan resource instance Compute dengan dekorasi dan judul kotak, diurutkan berdasarkan nama, dalam format tabel:
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Mencantumkan alamat email pengguna yang diautentikasi project:
gcloud info --format='value(config.account)'
Untuk mengetahui contoh yang lebih mendalam tentang kemampuan konfigurasi output yang ada di tanda
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, perhatikan hal berikut:
Bergantung pada status keluar perintah.
Jika status keluar bukan nol, terjadi error dan output mungkin tidak lengkap kecuali jika dokumentasi perintah mencatat hal lain. Misalnya, perintah yang membuat beberapa resource mungkin hanya membuat beberapa resource, mencantumkannya di output standar, lalu keluar dengan status bukan nol. Atau, Anda dapat menggunakan properti
show_structured_logsuntuk mengurai log error. Jalankangcloud configuntuk mengetahui detail selengkapnya.Jangan bergantung pada pesan yang dicetak ke error standar.
Kata-kata dalam pesan ini dapat berubah pada versi gcloud CLI mendatang dan merusak otomatisasi Anda.
Jangan bergantung pada output mentah pesan yang dicetak ke output standar.
Output default untuk perintah apa pun dapat berubah dalam rilis mendatang. Anda dapat meminimalkan dampak perubahan tersebut dengan menggunakan
--formattanda untuk memformat output dengan salah satu hal berikut:--format=json|yaml|csv|text|listuntuk menentukan nilai yang akan ditampilkan. Jalankangcloud topic formatsuntuk mengetahui opsi lainnya.Anda dapat mengubah output default dari
--formatmenggunakanprojections. Untuk meningkatkan granularitas, gunakan tanda--filterflag untuk menampilkan subset nilai berdasarkan ekspresi. Kemudian, Anda dapat membuat skrip terhadap nilai yang ditampilkan tersebut.Contoh pemformatan dan pemfilteran output dapat ditemukan di bagian bawah.
Contoh skrip
Dengan menggunakan fungsi 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
Skrip contoh berikut mencantumkan kunci yang terkait dengan semua akun layanan project Anda dengan:
- Melakukan iterasi pada project 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 diproses
Contoh berikut menunjukkan cara mengurai output untuk diproses. Secara khusus, skrip contoh menulis informasi akun layanan ke dalam array dan memisahkan nilai di 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
