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 memicu tugas secara langsung 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. Buat tugas Cloud Run
Codelab ini menggunakan container tugas Cloud Run contoh.
Pertama, buat repositori Artifact Registry untuk container 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 container tugas Cloud Run contoh ke Artifact Registry dalam project yang dikonfigurasi SC VPC Anda. Anda dapat menggunakan alat gcrane untuk melakukannya dengan mengikuti petunjuk penginstalan ini. Anda dapat mempelajari lebih lanjut gcrane 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 Anda yang sesuai untuk 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 mengetahui 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. Buat 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, bangun container menggunakan perintah docker berikut. Perhatikan bahwa deployment berbasis Sumber mungkin sulit disiapkan di lingkungan VPC SC. Jika Anda memiliki pipeline build dan deployment yang sudah ada, gunakan pipeline tersebut untuk membangun 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 sesuai untuk 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. Buat 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 menjalankan Tugas Cloud Scheduler segera 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.
Verifikasi bahwa tugas Cloud Run berhasil dijalankan 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 sesuatu yang mirip dengan 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 dipanggil secara tidak sengaja lebih banyak daripada alokasi pemanggilan Cloud Run bulanan Anda di tingkat 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 Run di https://console.cloud.google.com/run, lalu hapus layanan.
Jika Anda 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.