1. Giriş
Genel Bakış
GCP projeniz bir VPC SC çevresindeyse planlanmış işler oluşturmak için ek adımlar atmanız gerekir. Cloud Scheduler, VPC SC çevresindeki 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 bir Cloud Run işinin planlı olarak çalıştırılması
- Cloud Run istemci kitaplıklarını kullanarak Cloud Run işini tetikleyen bir Cloud Run hizmeti oluşturma
- Cloud Scheduler'ı, Cloud Run hizmetini planlı olarak çağıracak şekilde yapılandırma
2. Başlamadan önce
Öncelikle, VPC Hizmet Kontrolleri için Cloud Run'u 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 kod laboratuvarında örnek Cloud Run jobs kapsayıcısı kullanılır.
Öncelikle, Cloud Run 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ş kapsayıcısını VPC SC yapılandırılmış projenizdeki bir Artifact Registry'ye kopyalayın. Bu işlemi yapmak için kurulum talimatlarını uygulayarak gcrane aracını kullanabilirsiniz. gcrane hakkında daha fazla bilgiyi replikalar arasında resim kopyalamayla ilgili belgelerde 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 ile uyumlu 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
İşlev oluşturma hakkında daha fazla bilgi için lütfen Cloud Run işlevleri dokümanlarında 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, aşağıdaki 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 olarak çalışan bir Cloud Run hizmeti dağıtacaksınız.
mkdir job-runner-service && cd $_
Aşağıdaki kodu içeren 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 içeren requirements.txt
adlı bir dosya oluşturun.
google-cloud-run flask
Son olarak, bir 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ı derleyin. 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 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
Artık VPC Hizmet Kontrolleri ile uyumlu Cloud Run hizmetinizi dağıtabilirsiniz.
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
Aşağıdaki 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 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 Planlayıcı 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!
Codelab'i tamamladığınız için tebrikler.
İşlediğimiz konular
- VPC SC çevresinde bir Cloud Run işinin planlı olarak çalıştırılması
- Cloud Run istemci kitaplıklarını kullanarak Cloud Run işini tetikleyen bir Cloud Run hizmeti oluşturma
- Cloud Scheduler'ı, Cloud Run hizmetini planlı olarak çağıracak şekilde yapılandırma
8. Temizleme
Yanlışlıkla yapılan ödemeleri önlemek için (örneğin, Cloud Run hizmetleri yanlışlıkla ücretsiz kademede aylık Cloud Run çağrısı tahsisatınızdan daha fazla kez ç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 adresindeki Cloud Run Cloud Console'a gidip hizmeti silin.
Projenin tamamını silmeyi seçerseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi seçin ve Sil'i tıklayın. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list
komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.