1. Pengantar
Ringkasan
Jika project GCP Anda berada di dalam perimeter VPC SC, Anda harus melakukan langkah-langkah tambahan untuk menyiapkan tugas terjadwal. Karena Cloud Scheduler tidak dapat langsung memicu tugas dalam perimeter VPC SC, Anda harus melakukan proxy permintaan melalui komponen lain. Sebaiknya gunakan layanan Cloud Run sebagai proxy ini.
Arsitekturnya terlihat seperti ini:
Yang akan Anda pelajari
- Cara menjalankan Tugas Cloud Run sesuai jadwal di dalam perimeter VPC SC
- Cara membuat layanan Cloud Run yang memicu tugas Cloud Run menggunakan library klien Cloud Run
- Cara mengonfigurasi Cloud Scheduler untuk memanggil layanan Cloud Run sesuai jadwal
2. Sebelum memulai
Pertama, pastikan Anda telah mengikuti langkah-langkah untuk menyiapkan Cloud Run untuk Kontrol Layanan VPC.
Selanjutnya, tetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION> AR_REPO=sample-job-repo CLOUD_RUN_SERVICE=job-runner-service CLOUD_RUN_JOB=sample-job CLOUD_SCHEDULER=job-scheduler SERVICE_ACCOUNT="cloud-run-invoker-sa" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com NETWORK=default SUBNET=default
3. Membuat tugas Cloud Run
Codelab ini menggunakan contoh penampung tugas Cloud Run.
Pertama, buat repo Artifact Registry untuk penampung tugas Cloud Run Anda.
gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"
Selanjutnya, salin contoh penampung tugas Cloud Run ke Artifact Registry dalam project yang dikonfigurasi dengan VPC SC. Anda dapat menggunakan alat gcrane untuk melakukannya dengan mengikuti petunjuk penginstalan ini. Anda dapat mempelajari gcrane lebih lanjut di dokumentasi untuk menyalin image antar-repositori.
gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest
Kedua, deploy tugas Cloud Run yang mematuhi Kontrol Layanan VPC.
gcloud run jobs create $CLOUD_RUN_JOB --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic
Untuk informasi selengkapnya tentang cara membuat Tugas, ikuti langkah-langkah yang tercantum di sini dalam dokumentasi tugas Cloud Run.
4. Membuat Akun layanan
Akun layanan ini akan digunakan oleh Cloud Run untuk memanggil tugas Cloud Run.
Pertama, buat akun layanan dengan menjalankan perintah ini:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
Kedua, berikan peran Cloud Run Invoker dan peran Cloud Run Viewer ke akun layanan.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.viewer
5. Membuat layanan Cloud Run
Pada langkah ini, Anda akan men-deploy layanan Cloud Run yang bertindak sebagai proxy.
mkdir job-runner-service && cd $_
Buat file bernama main.py
dengan kode berikut.
import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Buat file bernama requirements.txt
dengan kode berikut.
google-cloud-run flask
Terakhir, buat Dockerfile
.
FROM python:3.9-slim-buster # for logging purposes ENV PYTHONUNBUFFERED=True WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["python3", "main.py"]
Selanjutnya, build container menggunakan perintah docker berikut. Perhatikan bahwa deployment berbasis Sumber dapat sulit disiapkan di lingkungan VPC SC. Jika Anda sudah memiliki pipeline build dan deployment, gunakan pipeline tersebut untuk mem-build kode sumber ke dalam container dan men-deploy container sebagai layanan Cloud Run.
docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE
Sekarang, deploy layanan Cloud Run Anda yang mematuhi Kontrol Layanan VPC.
gcloud run deploy $CLOUD_RUN_SERVICE --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic \ --no-allow-unauthenticated \ --ingress internal
Simpan URL endpoint layanan dengan menjalankan perintah ini:
SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')
6. Membuat tugas Cloud Scheduler untuk memicu layanan
# create the Cloud Scheduler job gcloud scheduler jobs create http $CLOUD_SCHEDULER \ --location=$REGION \ --schedule="0 0 1 * *" \ --uri=$SERVICE_URL \ --http-method=GET \ --oidc-service-account-email=$SERVICE_ACCOUNT_ADDRESS
Setelah Tugas Cloud Scheduler dibuat, Anda dapat menjalankan perintah berikut untuk segera menjalankan Tugas Cloud Scheduler untuk tujuan pengujian:
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
CATATAN:
Anda mungkin perlu menunggu beberapa menit hingga eksekusi tugas selesai. Anda dapat melacak statusnya di halaman Cloud Run Scheduler.
Pastikan tugas Cloud Run berhasil berjalan dengan menjalankan perintah berikut:
EXECUTION_NAME=$(gcloud run jobs describe $CLOUD_RUN_JOB --region $REGION --format 'value(status.latestCreatedExecution.name)') gcloud run jobs executions describe $EXECUTION_NAME --region $REGION
dan Anda akan melihat tampilan seperti berikut:
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. Selamat!
Selamat, Anda telah menyelesaikan codelab.
Yang telah kita bahas
- Cara menjalankan Tugas Cloud Run sesuai jadwal di dalam perimeter VPC SC
- Cara membuat layanan Cloud Run yang memicu tugas Cloud Run menggunakan library klien Cloud Run
- Cara mengonfigurasi Cloud Scheduler untuk memanggil layanan Cloud Run sesuai jadwal
8. Pembersihan
Untuk menghindari tagihan yang tidak disengaja, (misalnya, jika layanan Cloud Run tidak sengaja dipanggil lebih dari alokasi pemanggilan Cloud Run bulanan Anda di paket gratis), Anda dapat menghapus layanan GCP atau menghapus project yang Anda buat di Langkah 2.
Untuk menghapus layanan Cloud Run dan tugas Cloud Run, buka Konsol Cloud Cloud Run di https://console.cloud.google.com/run, lalu hapus layanan tersebut.
Jika memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list
.