1. Giriş
Genel Bakış
GCP projeniz bir VPC SC çevresindeyse planlanmış işleri ayarlamak için ek adımlar atmanız gerekir. Cloud Scheduler, VPC SC sınırları içindeki işleri doğrudan tetikleyemediğinden isteği başka bir bileşen üzerinden proxy'lemeniz gerekir. Bu proxy olarak bir Cloud Run hizmeti kullanmanızı öneririz.
Mimari şu şekildedir:

Neler öğreneceksiniz?
- VPC SC çevresinde planlanmış bir Cloud Run işini çalıştırma
- Cloud Run istemci kitaplıklarını kullanarak Cloud Run işini tetikleyen bir Cloud Run hizmeti oluşturma
- Cloud Scheduler'ı, planlı olarak Cloud Run hizmeti çağıracak şekilde yapılandırma
2. Başlamadan önce
Öncelikle, Cloud Run'ı VPC Hizmet Kontrolleri için ayarlama adımlarını uyguladığınızdan emin olun.
Ardından, bu codelab boyunca kullanılacak ortam değişkenlerini ayarlayın.
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. Cloud Run işini oluşturma
Bu codelab'de örnek Cloud Run işleri kapsayıcısı kullanılır.
Öncelikle Cloud Run işi kapsayıcınız için bir Artifact Registry deposu oluşturun.
gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"
Ardından, örnek Cloud Run işleri kapsayıcısını VPC SC yapılandırılmış projenizdeki bir Artifact Registry'ye kopyalayın. Bu işlemi yapmak için gcrane aracını kullanabilir ve yükleme talimatlarını uygulayabilirsiniz. gcrane hakkında daha fazla bilgiyi depolar arasında resim kopyalama belgelerinde bulabilirsiniz.
gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest
İkinci olarak, VPC Hizmet Kontrolleri'ne uygun Cloud Run işinizi dağıtın.
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
İş oluşturma hakkında daha fazla bilgi için lütfen Cloud Run işleri belgelerinde burada listelenen adımları uygulayın.
4. Hizmet hesabı oluşturma
Bu hizmet hesabı, Cloud Run işini çağırmak için Cloud Run tarafından kullanılır.
Öncelikle şu komutu çalıştırarak hizmet hesabını oluşturun:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
İkinci olarak, hizmet hesabına Cloud Run Çağırıcısı rolünü ve Cloud Run Görüntüleyici rolünü verin.
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. Cloud Run hizmetini oluşturma
Bu adımda, proxy görevi gören bir Cloud Run hizmeti dağıtacaksınız.
mkdir job-runner-service && cd $_
Aşağıdaki kodu kullanarak main.py adlı bir dosya oluşturun.
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)))
Aşağıdaki kodu kullanarak requirements.txt adlı bir dosya oluşturun.
google-cloud-run flask
Son olarak, Dockerfile oluşturun.
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"]
Ardından, aşağıdaki Docker komutlarını kullanarak kapsayıcıyı oluşturun. Kaynak tabanlı dağıtımların VPC SC ortamında ayarlanmasının zor olabileceğini unutmayın. Mevcut bir derleme ve dağıtım ardışık düzeniniz varsa kaynak kodu bir kapsayıcıya derlemek ve kapsayıcıyı Cloud Run hizmeti olarak dağıtmak için bu ardışık düzeni kullanın.
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
Şimdi VPC Hizmet Kontrolleri'ne uygun Cloud Run hizmetinizi dağıtın.
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
Şu komutu çalıştırarak hizmet uç noktası URL'sini kaydedin:
SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')
6. Hizmeti tetiklemek için bir Cloud Scheduler işi oluşturun.
# 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
Cloud Scheduler işi oluşturulduktan sonra, test amacıyla Cloud Scheduler işini hemen çalıştırmak için aşağıdaki komutu çalıştırabilirsiniz:
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
NOT:
İşin yürütülmesinin tamamlanması için birkaç dakika beklemeniz gerekebilir. Durumunu Cloud Run Scheduler sayfasından takip edebilirsiniz.
Aşağıdaki komutları çalıştırarak Cloud Run işinin başarıyla çalıştığını doğrulayın:
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
Aşağıdakine benzer bir ifade görürsünüz:
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. Tebrikler!
Tebrikler, codelab'i tamamladınız.
İşlediğimiz konular
- VPC SC çevresinde planlanmış bir Cloud Run işini çalıştırma
- Cloud Run istemci kitaplıklarını kullanarak Cloud Run işini tetikleyen bir Cloud Run hizmeti oluşturma
- Cloud Scheduler'ı, planlı olarak Cloud Run hizmeti çağıracak şekilde yapılandırma
8. Temizleme
Yanlışlıkla ücretlendirilmemek için (örneğin, Cloud Run hizmetleri ücretsiz katmanda aylık Cloud Run çağırma tahsisinizden daha fazla sayıda çağrılırsa) GCP hizmetlerini veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.
Cloud Run hizmetini ve Cloud Run işini silmek için https://console.cloud.google.com/run adresinden Cloud Run Cloud Console'a gidin ve hizmeti silin.
Projenin tamamını silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidebilir, 2. adımda oluşturduğunuz projeyi seçip Sil'i tıklayabilirsiniz. Projeyi silerseniz Cloud SDK'nızda projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak kullanılabilir tüm projelerin listesini görüntüleyebilirsiniz.