1. परिचय
खास जानकारी
अगर आपका GCP प्रोजेक्ट, वीपीसी एससी के दायरे में है, तो आपको शेड्यूल किए गए जॉब सेट अप करने के लिए अतिरिक्त चरण पूरे करने होंगे. Cloud Scheduler, VPC SC पेरीमीटर में सीधे तौर पर जॉब ट्रिगर नहीं कर सकता. इसलिए, आपको किसी अन्य कॉम्पोनेंट के ज़रिए अनुरोध को प्रॉक्सी करना होगा. हमारा सुझाव है कि इस प्रॉक्सी के तौर पर, Cloud Run सेवा का इस्तेमाल करें.
आर्किटेक्चर ऐसा दिखता है:

आपको क्या सीखने को मिलेगा
- VPC SC पेरीमीटर में, शेड्यूल के हिसाब से Cloud Run जॉब चलाने का तरीका
- Cloud Run क्लाइंट लाइब्रेरी का इस्तेमाल करके, Cloud Run सेवा बनाने का तरीका. यह सेवा, Cloud Run जॉब को ट्रिगर करती है
- शेड्यूल के हिसाब से Cloud Run सेवा को शुरू करने के लिए, Cloud Scheduler को कॉन्फ़िगर करने का तरीका
2. शुरू करने से पहले
सबसे पहले, पक्का करें कि आपने VPC सर्विस कंट्रोल के लिए Cloud Run को सेट अप करने के चरणों का पालन किया हो.
इसके बाद, ऐसे एनवायरमेंट वैरिएबल सेट करें जिनका इस्तेमाल इस कोडलैब में किया जाएगा.
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 जॉब बनाना
इस कोडलैब में, Cloud Run jobs के सैंपल कंटेनर का इस्तेमाल किया गया है.
सबसे पहले, Cloud Run जॉब कंटेनर के लिए Artifact Registry रेपो बनाएं.
gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"
इसके बाद, Cloud Run jobs के कंटेनर के सैंपल को, वीपीसी एससी कॉन्फ़िगर किए गए प्रोजेक्ट में मौजूद Artifact Registry में कॉपी करें. इसके लिए, gcrane टूल का इस्तेमाल किया जा सकता है. इसके लिए, इंस्टॉल करने के ये निर्देश अपनाएं. एक से ज़्यादा रिपॉज़िटरी के बीच इमेज कॉपी करने से जुड़े दस्तावेज़ में जाकर, gcrane के बारे में ज़्यादा जानें.
gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest
दूसरा, VPC सर्विस कंट्रोल के साथ काम करने वाला Cloud Run जॉब डिप्लॉय करें.
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
जॉब बनाने के बारे में ज़्यादा जानने के लिए, कृपया Cloud Run jobs के दस्तावेज़ में दिया गया तरीका अपनाएं.
4. सेवा खाता बनाना
इस सेवा खाते का इस्तेमाल Cloud Run, Cloud Run जॉब को कॉल करने के लिए करेगा.
सबसे पहले, यह कमांड चलाकर सेवा खाता बनाएं:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
दूसरा, सेवा खाते को Cloud Run Invoker की भूमिका और Cloud Run Viewer की भूमिका असाइन करें.
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 सेवा बनाना
इस चरण में, आपको एक Cloud Run सेवा डिप्लॉय करनी होगी. यह सेवा प्रॉक्सी के तौर पर काम करेगी.
mkdir job-runner-service && cd $_
यहां दिए गए कोड का इस्तेमाल करके, main.py नाम की फ़ाइल बनाएं.
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)))
नीचे दिए गए कोड का इस्तेमाल करके, requirements.txt नाम की फ़ाइल बनाएं.
google-cloud-run flask
आखिर में, 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"]
इसके बाद, इन डॉकर कमांड का इस्तेमाल करके कंटेनर बनाएं. ध्यान दें कि वीपीसी एससी एनवायरमेंट में, सोर्स के आधार पर डिप्लॉयमेंट सेट अप करना मुश्किल हो सकता है. अगर आपके पास पहले से कोई बिल्ड और डिप्लॉय पाइपलाइन है, तो उसका इस्तेमाल करके सोर्स कोड को कंटेनर में बनाएं. इसके बाद, कंटेनर को 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
अब VPC सर्विस कंट्रोल के साथ काम करने वाली Cloud Run सेवा को डिप्लॉय करें.
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
इस निर्देश को चलाकर, सेवा एंडपॉइंट यूआरएल सेव करें:
SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')
6. सेवा को ट्रिगर करने के लिए, Cloud Schedule की मदद से कोई जॉब बनाएं
# 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 Job बन जाने के बाद, जांच के लिए इसे तुरंत चलाने के लिए, यह कमांड चलाएं:
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
ध्यान दें:
टास्क पूरा होने में कुछ मिनट लग सकते हैं. Cloud Run Scheduler पेज पर जाकर, इसकी स्थिति को ट्रैक किया जा सकता है.
यहां दिए गए निर्देशों को चलाकर पुष्टि करें कि Cloud Run जॉब सही तरीके से चली है:
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
इसके बाद, आपको कुछ ऐसा दिखेगा:
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. बधाई हो!
कोडलैब पूरा करने के लिए बधाई!
हमने क्या-क्या कवर किया है
- VPC SC पेरीमीटर में, Cloud Run जॉब को शेड्यूल के हिसाब से चलाने का तरीका
- Cloud Run क्लाइंट लाइब्रेरी का इस्तेमाल करके, Cloud Run सेवा बनाने का तरीका. यह सेवा, Cloud Run जॉब को ट्रिगर करती है
- शेड्यूल के हिसाब से Cloud Run सेवा को शुरू करने के लिए, Cloud Scheduler को कॉन्फ़िगर करने का तरीका
8. व्यवस्थित करें
अनचाहे शुल्क से बचने के लिए, GCP की सेवाओं को मिटा दें या चरण 2 में बनाए गए प्रोजेक्ट को मिटा दें. उदाहरण के लिए, अगर Cloud Run की सेवाओं को मुफ़्त टियर में, Cloud Run के लिए महीने के तय किए गए कॉल की संख्या से ज़्यादा बार अनजाने में कॉल किया जाता है, तो ऐसा किया जा सकता है.
Cloud Run सेवा और Cloud Run जॉब को मिटाने के लिए, Cloud Run Cloud Console पर जाएं. इसके लिए, https://console.cloud.google.com/run पर जाएं और सेवा को मिटाएं.
अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और मिटाएं को चुनें. प्रोजेक्ट मिटाने पर, आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list कमांड चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.