Membuat skrip perintah gcloud CLI

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, format, dan flag --quiet, yang memungkinkan Anda menangani output secara efektif dan mengotomatiskan tugas.

Dasar-dasar pembuatan skrip dengan gcloud CLI

Untuk panduan langkah demi langkah dalam membuat skrip dasar dengan gcloud CLI, lihat postingan blog ini: Membuat 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 di satu komputer.

Untuk memberikan otorisasi 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 di instance virtual machine Compute Engine tempat semua pengguna memiliki akses ke root.

Untuk menggunakan otorisasi akun layanan, gunakan akun layanan yang ada atau buat akun layanan baru di halaman Akun Layanan:

Buka halaman Service Accounts

Untuk membuat dan mendownload kunci pribadi terkait sebagai file kunci berformat JSON, pilih Kelola Kunci 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 menggunakan 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 tentang cara memberikan otorisasi pada alat gcloud CLI, lihat Memberi otorisasi pada 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 dalam konfigurasi ke True atau menggunakan flag --quiet atau -q global. 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 saat Anda menjalankan perintah menggunakan gcloud CLI, perintah tersebut akan menghasilkan output yang mematuhi spesifikasi format (seperti json, yaml, csv, dan teks) dan filter (nama VM yang diawali dengan 'test', tahun pembuatan setelah 2015, dsb.).

Jika Anda ingin mengikuti tutorial interaktif tentang penggunaan flag filter dan format, luncurkan tutorial menggunakan tombol berikut:

Buka di Cloud Shell

Contoh berikut menunjukkan penggunaan umum pemformatan dan pemfilteran dengan perintah gcloud CLI:

Buat daftar instance yang dibuat di zona us-central1-a:

gcloud compute instances list --filter="zone:us-central1-a"

Cantumkan 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))"

Cantumkan 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 dari kuota suatu region:

gcloud compute regions describe us-central1 \
  --format="table(quotas:format='table(metric,limit,usage)')"

Cetak daftar kuota global yang di-flatten dalam format CSV:

gcloud compute project-info describe --flatten='quotas[]' \
  --format='csv(quotas.metric,quotas.limit,quotas.usage)'

Cantumkan 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)'

Cantumkan alamat email pengguna terautentikasi project:

gcloud info --format='value(config.account)'

Untuk contoh yang lebih rumit tentang kemampuan konfigurasi output yang di-build ke dalam flag filters, formats, dan projections gcloud CLI, lihat postingan blog ini tentang pemfilteran dan pemformatan.

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, akan terjadi error dan output mungkin tidak lengkap kecuali jika dokumentasi perintah menyatakan sebaliknya. Misalnya, perintah yang membuat beberapa resource mungkin hanya membuat beberapa, mencantumkannya di output standar, lalu keluar dengan status bukan nol. Atau, Anda dapat menggunakan properti show_structured_logs untuk mengurai log error. Jalankan gcloud config untuk mengetahui detail selengkapnya.

  • Jangan bergantung pada pesan yang dicetak ke error standar.

    Kata-kata 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 tanda --format untuk memformat output dengan salah satu hal berikut: --format=json|yaml|csv|text|list untuk menentukan nilai yang akan ditampilkan. Jalankan gcloud topic formats untuk opsi lainnya.

    Anda dapat mengubah output default dari --format menggunakan projections. Untuk meningkatkan granularitas, gunakan flag --filter untuk menampilkan subset nilai berdasarkan ekspresi. Kemudian, Anda dapat membuat skrip untuk nilai yang ditampilkan tersebut.

    Contoh output pemformatan dan pemfilteran dapat ditemukan di bagian di 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

Contoh skrip berikut mencantumkan kunci yang terkait dengan semua akun layanan project Anda berdasarkan:

  • Melakukan iterasi pada project
  • 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, 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