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 kumpulan mulai cepat secara otomatis.
  • Memulai workstation secara otomatis sesuai jadwal reguler.

Tutorial ini membantu Anda meningkatkan dan menurunkan Ukuran kumpulan mulai cepat agar sesuai dengan jam kerja standar.

Tujuan

  1. Menulis dan men-deploy Layanan Cloud Run yang memperbarui Ukuran kumpulan mulai cepat untuk konfigurasi workstation.
  2. Mengonfigurasi 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 Cloud yang dapat ditagih berikut Google Cloud:

  • Cloud Scheduler
  • Cloud Run

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

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

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

Sebelum memulai

  1. Login ke akun Anda. Google Cloud Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instal Google Cloud CLI.

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

  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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instal Google Cloud CLI.

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

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

    gcloud init

Menyiapkan lingkungan

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

  1. Tetapkan variabel PROJECT_ID dan REGION yang akan 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 berikut: Google Cloud

  • 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-kan, 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 membuat server web dasar yang memproses port yang ditentukan oleh variabel lingkungan PORT dan menjalankan 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 ke 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 meng-container-kan aplikasi 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 Men-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 kumpulan untuk konfigurasi workstation Anda menjadi 0 pada 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: Memverifikasi tugas

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

  1. Buka halaman Cloud Scheduler di Google Cloud konsol.

    Buka Cloud Scheduler

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

  2. Di baris untuk tugas workstation-pool-increaser-cron, klik Tindakan > Paksa tugas dijalankan.

    Tugas pertama yang dibuat dalam project mungkin 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 diperbarui, lakukan hal berikut:

  1. Buka halaman Konfigurasi Workstation di Google Cloud konsol.

    Buka Konfigurasi Workstation

  2. Verifikasi bahwa Ukuran kumpulan mulai cepat adalah 2.

  3. Lihat 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

Agar akun Anda tidak dikenai biaya tambahan, hapus semua resource yang Anda deploy dengan panduan memulai ini. Google Cloud

Menghapus repositori

Cloud Run tidak mengenakan biaya saat layanan yang Anda deploy tidak digunakan. Namun, Anda mungkin masih dikenai biaya untuk menyimpan image container di Artifact Registry. Untuk menghapus repositori Artifact Registry, ikuti langkah-langkah di Menghapus repositori dalam dokumentasi Artifact Registry.

Menghapus layanan

Layanan Cloud Run tidak dikenai biaya hingga menerima permintaan. Untuk menghapus layanan Cloud Run, ikuti salah satu langkah berikut:

Konsol

Untuk menghapus layanan:

  1. Di Google Cloud konsol, buka halaman Layanan Cloud Run:

    Buka Cloud Run

  2. Temukan layanan yang ingin Anda hapus dalam daftar layanan, lalu klik kotak centang layanan tersebut untuk memilihnya.

  3. Klik Hapus. Tindakan ini akan menghapus semua revisi layanan.

gcloud

Untuk menghapus layanan, jalankan perintah berikut:

gcloud run services delete SERVICE --region REGION

Ganti kode berikut:

  • SERVICE: nama layanan Anda.
  • REGION: Google Cloud region layanan.

Menghapus project pengujian Anda

Menghapus project Anda akan menghentikan penagihan untuk semua resource dalam project tersebut. Google Cloud Untuk melepaskan semua Google Cloud resource dalam project Anda, ikuti langkah-langkah berikut:

  1. Di Google Cloud konsol, buka halaman Kelola resource.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Hapus.
  3. Pada dialog, ketik project ID, lalu klik Nonaktifkan untuk menghapus project.

Menghapus tugas Cloud Scheduler

Untuk menghapus resource Cloud Scheduler satu per satu,

  1. Buka halaman Cloud Scheduler di Google Cloud konsol.

    Buka Cloud Scheduler

  2. Klik kotak centang di samping tugas Anda.

  3. Klik tombol Hapus di bagian atas halaman dan konfirmasi penghapusan Anda.

Langkah berikutnya