ভিপিসি সার্ভিস কন্ট্রোল পরিধির মধ্যে কীভাবে একটি ক্লাউড রান কাজের সময়সূচী করবেন

১. ভূমিকা

সংক্ষিপ্ত বিবরণ

আপনার GCP প্রজেক্টটি যদি একটি VPC SC পেরিমিটারের মধ্যে থাকে, তাহলে শিডিউলড জব সেট আপ করার জন্য আপনাকে অতিরিক্ত কিছু পদক্ষেপ নিতে হবে। যেহেতু ক্লাউড শিডিউলার সরাসরি VPC SC পেরিমিটারের মধ্যে জব ট্রিগার করতে পারে না, তাই আপনাকে অন্য একটি কম্পোনেন্টের মাধ্যমে রিকোয়েস্টটি প্রক্সি করতে হবে। আমরা এই প্রক্সি হিসেবে একটি ক্লাউড রান সার্ভিস ব্যবহার করার পরামর্শ দিই।

স্থাপত্যটি দেখতে এইরকম:

ক্লাউড শিডিউলার দ্বারা একটি ক্লাউড রান সার্ভিস ট্রিগার করার ডায়াগ্রাম, যা একটি ক্লাউড রান জব সম্পাদন করে।

আপনি যা শিখবেন

  • একটি VPC SC পেরিমিটারের ভিতরে সময়সূচী অনুযায়ী কীভাবে একটি ক্লাউড রান জব চালানো যায়
  • ক্লাউড রান ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কীভাবে একটি ক্লাউড রান সার্ভিস তৈরি করবেন যা একটি ক্লাউড রান জব ট্রিগার করে।
  • একটি নির্দিষ্ট সময়সূচী অনুযায়ী ক্লাউড রান পরিষেবা চালু করার জন্য ক্লাউড শিডিউলার কীভাবে কনফিগার করবেন

২. শুরু করার আগে

প্রথমে, নিশ্চিত করুন যে আপনি Cloud Run for VPC Service Controls সেট আপ করার ধাপগুলো অনুসরণ করেছেন।

এরপরে, এই কোডল্যাব জুড়ে ব্যবহৃত হবে এমন এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করুন।

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

৩. ক্লাউড রান জবটি তৈরি করুন

এই কোডল্যাবটিতে নমুনা ক্লাউড রান জবস কন্টেইনার ব্যবহার করা হয়েছে।

প্রথমে, আপনার ক্লাউড রান জব কন্টেইনারের জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপো তৈরি করুন।

gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"

এরপরে, নমুনা ক্লাউড রান জবস কন্টেইনারটি আপনার VPC SC-কনফিগার করা প্রোজেক্টের মধ্যে একটি আর্টিফ্যাক্ট রেজিস্ট্রি-তে কপি করুন। এই ইনস্টলেশন নির্দেশাবলী অনুসরণ করে আপনি gcrane টুলটি ব্যবহার করে এটি করতে পারেন। রিপোজিটরিগুলোর মধ্যে ইমেজ কপি করার ডকুমেন্টেশন থেকে আপনি gcrane সম্পর্কে আরও জানতে পারবেন।

gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest

দ্বিতীয়ত, আপনার ক্লাউড রান জবটি স্থাপন করুন যা ভিপিসি সার্ভিস কন্ট্রোলস- এর সাথে সামঞ্জস্যপূর্ণ।

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

জব তৈরি করার বিষয়ে আরও তথ্যের জন্য, অনুগ্রহ করে ক্লাউড রান জবস ডকুমেন্টেশনে এখানে তালিকাভুক্ত ধাপগুলো অনুসরণ করুন।

৪. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

এই সার্ভিস অ্যাকাউন্টটি ক্লাউড রান জব কল করার জন্য ক্লাউড রান ব্যবহার করবে।

প্রথমে, এই কমান্ডটি চালিয়ে সার্ভিস অ্যাকাউন্টটি তৈরি করুন:

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run to run a Cloud Run job"

দ্বিতীয়ত, সার্ভিস অ্যাকাউন্টটিকে ক্লাউড রান ইনভোকার রোল এবং ক্লাউড রান ভিউয়ার রোল প্রদান করুন।

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

৫. ক্লাউড রান পরিষেবা তৈরি করুন

এই ধাপে, আপনি একটি ক্লাউড রান সার্ভিস ডেপ্লয় করবেন যা প্রক্সি হিসেবে কাজ করবে।

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"]

এরপর, নিম্নলিখিত ডকার কমান্ডগুলো ব্যবহার করে কন্টেইনারটি বিল্ড করুন। উল্লেখ্য যে, একটি VPC SC পরিবেশে সোর্স-ভিত্তিক ডেপ্লয়মেন্ট সেট আপ করা চ্যালেঞ্জিং হতে পারে। যদি আপনার আগে থেকেই কোনো বিল্ড এবং ডেপ্লয় পাইপলাইন থাকে, তবে সেটি ব্যবহার করে সোর্স কোডটিকে একটি কন্টেইনারে বিল্ড করুন এবং কন্টেইনারটিকে একটি ক্লাউড রান সার্ভিস হিসেবে ডেপ্লয় করুন।

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

এখন আপনার Cloud Run পরিষেবাটি স্থাপন করুন যা 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

এই কমান্ডটি চালিয়ে সার্ভিস এন্ডপয়েন্ট URL সংরক্ষণ করুন:

SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')

৬. পরিষেবাটি চালু করার জন্য একটি ক্লাউড শিডিউল জব তৈরি করুন।

# 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

ক্লাউড শিডিউলার জবটি তৈরি হয়ে গেলে, পরীক্ষার উদ্দেশ্যে তাৎক্ষণিকভাবে এটি চালানোর জন্য আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION

দ্রষ্টব্য:

কাজটি সম্পন্ন হতে আপনাকে কয়েক মিনিট অপেক্ষা করতে হতে পারে। আপনি ক্লাউড রান শিডিউলার পেজে এর অবস্থা জানতে পারবেন।

নিম্নলিখিত কমান্ডগুলো চালিয়ে ক্লাউড রান জবটি সফলভাবে চলেছে কিনা তা যাচাই করুন:

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

৭. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!

আমরা যা আলোচনা করেছি

  • একটি VPC SC পেরিমিটারের ভিতরে সময়সূচী অনুযায়ী কীভাবে একটি ক্লাউড রান জব চালানো যায়
  • ক্লাউড রান ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কীভাবে একটি ক্লাউড রান সার্ভিস তৈরি করবেন যা একটি ক্লাউড রান জব ট্রিগার করে।
  • একটি নির্দিষ্ট সময়সূচী অনুযায়ী ক্লাউড রান পরিষেবা চালু করার জন্য ক্লাউড শিডিউলার কীভাবে কনফিগার করবেন

৮. পরিষ্কার করুন

অনিচ্ছাকৃত চার্জ এড়ানোর জন্য, (উদাহরণস্বরূপ, যদি ফ্রি টিয়ারে আপনার মাসিক ক্লাউড রান ব্যবহারের বরাদ্দের চেয়ে ক্লাউড রান পরিষেবাগুলো অনিচ্ছাকৃতভাবে বেশিবার চালু হয়ে যায়), আপনি হয় GCP পরিষেবাগুলো ডিলিট করে দিতে পারেন অথবা ধাপ ২-এ তৈরি করা প্রজেক্টটি ডিলিট করে দিতে পারেন।

Cloud Run সার্ভিস এবং Cloud Run জব ডিলিট করতে, https://console.cloud.google.com/run-এ অবস্থিত Cloud Run ক্লাউড কনসোলে যান এবং সার্ভিসটি ডিলিট করে দিন।

আপনি যদি পুরো প্রজেক্টটি মুছে ফেলতে চান, তাহলে আপনি https://console.cloud.google.com/cloud-resource-manager -এ গিয়ে, ধাপ ২-এ তৈরি করা প্রজেক্টটি নির্বাচন করে 'ডিলিট' (Delete) বিকল্পটি বেছে নিতে পারেন। প্রজেক্টটি মুছে ফেললে, আপনাকে আপনার ক্লাউড এসডিকে (Cloud SDK)-তে প্রজেক্ট পরিবর্তন করতে হবে। আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।