Menjadwalkan operasi Workstation menggunakan Cloud Scheduler dan Cloud Run


Tutorial ini menunjukkan cara menggunakan Cloud Scheduler dan Cloud Run untuk melakukan operasi secara otomatis seperti

  • Menjadwalkan peningkatan dan penurunan Ukuran pool mulai cepat otomatis.
  • Memulai workstation secara otomatis sesuai jadwal rutin.

Tutorial ini membantu Anda menambah dan mengurangi Ukuran pool mulai cepat agar sesuai dengan jam buka bisnis pada umumnya.

Tujuan

  1. Tulis dan deploy Layanan Cloud Run yang memperbarui Ukuran pool mulai cepat untuk konfigurasi workstation.
  2. Konfigurasi tugas Cloud Scheduler yang menjadwalkan layanan yang dibuat pada Langkah 1 untuk berjalan pukul 09.00-17.00, Senin-Jumat agar sesuai dengan jam kerja PST.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

  • Cloud Scheduler
  • Cloud Run

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke CLI gcloud dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke CLI gcloud dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  14. Menyiapkan lingkungan

    Tetapkan variabel lingkungan berikut, yang digunakan oleh skrip otomatis yang Anda buat nanti.

    1. Tetapkan variabel PROJECT_ID dan REGION yang ingin Anda gunakan:

      PROJECT_ID=$PROJECT_ID
      REGION=$REGION
      

      Ganti $REGION dengan nama region yang akan Anda gunakan—misalnya, us-central1.

      Untuk mengetahui informasi selengkapnya tentang region yang tersedia, lihat Lokasi Cloud Workstations.

    Arsitektur aplikasi

    Solusi ini mencakup komponen Google Cloud berikut:

    • Cloud Run untuk memperbarui Ukuran kumpulan mulai cepat dari WorkstationConfig.
    • Tugas Cloud Scheduler untuk melakukan panggilan pada jadwal yang ditetapkan untuk memperbarui WorkstationConfig.

    Diagram arsitektur sistem yang menunjukkan penjadwalan operasi Workstation menggunakan Cloud Scheduler dan Cloud Run

    Membuat layanan Cloud Run

    Langkah pertama adalah menyiapkan server web sederhana untuk memproses permintaan HTTP yang Anda terima di port 8080. Karena aplikasi di-container, Anda dapat menulis server dalam bahasa apa pun.

    Untuk menulis aplikasi pemroses server web di Python, lakukan hal berikut:

    1. Buat sebuah direktori baru bernama workstation-config-updater dan ubah ke direktori tersebut:

      mkdir workstation-config-updater
      cd workstation-config-updater
      
    2. Buat file bernama app.py lalu tempelkan kode berikut ke dalamnya:

      import os, subprocess
      from flask import Flask, request, abort
      
      app = Flask(__name__)
      
      @app.route("/", methods=["POST"])
      def update():
          app.logger.info("Update request received.")
          data = request.json
          cluster = data["cluster"]
          region = data["region"]
          pool_size = data["pool-size"]
      
          path = os.path.join(app.root_path, "update_config.sh")
          o = subprocess.run(
              [path, cluster, region, pool_size],
              stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True
          )
          app.logger.info("Sending response:", o.stdout)
          return o.stdout
      
      if __name__ == "__main__":
          app.run(host="0.0.0.0", port=8080, debug=True)
      

      Kode ini menghasilkan server web dasar yang memantau port yang ditentukan oleh PORT variabel lingkungan dan mengeksekusi skrip update_config.sh.

    3. Buat file bernama update_config.sh lalu tempelkan kode berikut ke dalamnya:

      #!/bin/bash
      
      set -e
      
      if [ $# -ne 3 ]
      then
         echo "Usage: update_config.sh CLUSTER REGION POOL_SIZE"
         exit 1
      fi
      
      CLUSTER=$1
      REGION=$2
      POOL_SIZE=$3
      
      # list workstation configs
      echo "Attempting to list workstation configs in cluster $CLUSTER and region $REGION ..."
      for CONFIG in $(gcloud  workstations configs list --cluster $CLUSTER --region $REGION --format="value(NAME)"); do
          echo "Attempting to update Quick Pool Size to $POOL_SIZE for config $CONFIG ..."
          # update the workstation config pool-size
          RET=$(gcloud workstations configs update $CONFIG --cluster $CLUSTER  --region $REGION --pool-size=$POOL_SIZE)
          if [[ $RET -eq 0 ]]; then
              echo "Workstation config $CONFIG updated."
          else
              echo "Workstation config $CONFIG update failed."
          fi
      done
      
      

      Skrip ini menggunakan perintah gcloud untuk mencantumkan semua WorkstationConfig dalam cluster tertentu dan memperbarui Ukuran Kumpulan Mulai Cepat-nya menjadi POOL_SIZE.

    4. Buat file bernama Dockerfile lalu tempelkan kode berikut ke dalamnya:

      FROM google/cloud-sdk
      
      RUN apt-get update && apt-get install -y python3-pip python3
      
      # Copy local code to the container image.
      ENV APP_HOME /app
      WORKDIR $APP_HOME
      COPY . ./
      
      RUN /bin/bash -c 'ls -la; chmod +x ./update_config.sh'
      
      # Install production dependencies.
      RUN pip3 install Flask gunicorn
      
      # Run the web service on container startup
      CMD exec gunicorn --bind :8080 --workers 1 --threads 8 app:app
      

      Kode ini mem-build aplikasi dalam container agar siap di-deploy di Cloud Run.

    Men-deploy ke Cloud Run

    Untuk men-deploy ke Cloud Run, jalankan perintah berikut:

    gcloud run deploy --source . --project $PROJECT_ID --region $REGION
    1. Saat diminta memasukkan nama layanan, tekan Enter untuk menerima nama default workstation-config-updater.

    2. Jika Anda diminta untuk mengaktifkan Artifact Registry API atau mengizinkan pembuatan repositori Artifact Registry, tekan y.

    3. Saat Anda diminta untuk mengizinkan pemanggilan yang tidak diautentikasi, tekan n.

    4. Tunggu hingga deployment selesai.

    5. Saat URL layanan ditampilkan dalam format berikut, salin URL tersebut:

    SERVICE_URL=$SERVICE_URL
    

    Mengonfigurasi akun layanan untuk memanggil Cloud Run

    Layanan workstation-config-updater yang Anda deploy tidak mengizinkan pemanggilan yang tidak diautentikasi.

    Cloud Scheduler memerlukan akun layanan yang memiliki kredensial yang sesuai untuk memanggil layanan workstation-config-updater.

    Menyiapkan akun layanan

    1. Jika Anda belum memiliki akun layanan yang ingin digunakan untuk tugas Cloud Scheduler, buat akun layanan baru.

      gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
          --description="$DESCRIPTION" \
          --display-name="$DISPLAY_NAME"
    2. Tambahkan binding peran IAM yang diperlukan untuk mengizinkan akun layanan Anda memanggil Cloud Run.

      gcloud run services add-iam-policy-binding workstation-config-updater \
          --member=serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --region $REGION \
          --role=roles/run.invoker

    Membuat konfigurasi Cloud Scheduler dengan autentikasi

    1. Buat tugas dan tentukan URL yang Anda salin dari Deploy ke Cloud Run:

      gcloud scheduler jobs create http workstation-pool-increaser-cron \
          --http-method=POST \
          --location=us-central1 \
          --schedule="0 9 * * 1-5" \
          --time-zone="America/Los_Angeles" \
          --headers "Content-Type=application/json" \
          --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "2"}' \
          --uri=$SERVICE_URL \
          --oidc-service-account-email=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Perintah ini menjadwalkan tugas untuk meningkatkan ukuran kumpulan Mulai cepat untuk semua WorkstationConfigs di WorkstationCluster $CLUSTER menjadi 2 pada pukul 09.00 PST dari Senin hingga Jumat.

      Untuk informasi selengkapnya, lihat Mengonfigurasi Jadwal Tugas.

    2. Demikian pula, untuk mengurangi ukuran pool konfigurasi workstation Anda menjadi 0 di akhir hari kerja, jalankan perintah berikut

      gcloud scheduler jobs create http workstation-pool-decreaser-cron \
          --http-method=POST \
          --location=$REGION \
          --schedule="0 17 * * 1-5" \
          --time-zone="America/Los_Angeles" \
          --headers "Content-Type=application/json" \
          --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "0"}' \
          --uri=$SERVICE_URL \
          --oidc-service-account-email=$SERVICE-ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

    Opsional: Verifikasi tugas

    Untuk memastikan bahwa tugas Anda berfungsi seperti yang diharapkan, Anda dapat memverifikasi tugas.

    1. Buka halaman Cloud Scheduler di konsol Google Cloud .

      Buka Cloud Scheduler

      workstation-pool-increaser-cron akan muncul dalam daftar tugas.

    2. Di baris untuk tugas workstation-pool-increaser-cron, klik Actions > Force a job run.

      Tugas pertama yang dibuat dalam project dapat memerlukan waktu beberapa menit untuk dijalankan.

    3. Di kolom Status eksekusi terakhir, status Success menunjukkan bahwa Anda telah berhasil menjalankan tugas.

    Untuk memverifikasi bahwa konfigurasi Workstation telah diupdate, lakukan hal berikut:

    1. Buka halaman Workstation Configurations di konsol Google Cloud .

      Buka Konfigurasi Workstation

    2. Pastikan Ukuran kumpulan mulai cepat adalah 2.

    3. Melihat log untuk layanan Cloud Run Anda.

    Pembersihan

    Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

    Menghapus project pengujian Anda

    Meskipun Cloud Run tidak mengenakan biaya saat layanannya tidak digunakan, Anda mungkin tetap dikenai biaya atas penyimpanan image container di Artifact Registry. Anda dapat menghapus image container atau menghapus project Google Cloud untuk menghindari tagihan. Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Menghapus tugas Cloud Scheduler

    Untuk menghapus resource Cloud Scheduler satu per satu,

    1. Buka halaman Cloud Scheduler di konsol Google Cloud .

      Buka Cloud Scheduler

    2. Klik kotak centang di samping tugas Anda.

    3. Klik tombol Hapus di bagian atas halaman, lalu konfirmasi penghapusan.

    Langkah berikutnya