ক্লাউড ডিপ্লোয়ের সাথে ক্লাউড রান অ্যাপ্লিকেশন স্থাপন করা হচ্ছে

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

এই ল্যাবে, আপনি ক্লাউড ডিপ্লয় ব্যবহার করে ক্লাউড রান-এ একটি .Net অ্যাপ্লিকেশন ডিপ্লয় করবেন। আপনি ডকারফাইল ব্যবহার না করে ক্লাউড বিল্ড দিয়ে একটি কন্টেইনার ইমেজ তৈরি করবেন। আপনি ক্লাউড ডিপ্লয় দিয়ে তিনটি টার্গেট এনভায়রনমেন্ট সহ একটি পাইপলাইন সেট আপ করবেন এবং এনভায়রনমেন্টগুলোর মধ্যে রিলিজটি প্রমোট করার ধাপগুলো অনুসরণ করবেন। সবশেষে, আপনি প্রোডাকশন এনভায়রনমেন্টে ডিপ্লয় করার জন্য রিলিজটি অনুমোদন করবেন।

916a54f51af5ee54.png

ক্লাউড বিল্ড কী?

ক্লাউড বিল্ডের সাহায্যে আপনি সব প্রোগ্রামিং ভাষায় দ্রুত সফটওয়্যার তৈরি করতে পারেন।

ক্লাউড ডিপ্লয় কী?

ক্লাউড ডিপ্লয় একটি সম্পূর্ণভাবে পরিচালিত কন্টিনিউয়াস ডেলিভারি পরিষেবা। ক্লাউড ডিপ্লয়ের মাধ্যমে আপনি GKE, Anthos এবং Cloud Run-এর জন্য ডিপ্লয়মেন্ট পাইপলাইন তৈরি করতে পারেন।

ক্লাউড রান কী?

Cloud Run- এর মাধ্যমে আপনি যেকোনো ভাষায় (Go, Python, Java, Node.js, .NET, এবং Ruby সহ) লেখা স্কেলেবল কন্টেইনারাইজড অ্যাপ্লিকেশন একটি সম্পূর্ণ পরিচালিত প্ল্যাটফর্মে ডেপ্লয় করতে পারেন।

স্ক্যাফোল্ড কী?

স্ক্যাফোল্ড একটি কমান্ড-লাইন টুল যা কুবারনেটিস-নেটিভ অ্যাপ্লিকেশনগুলির নিরবচ্ছিন্ন উন্নয়ন সক্ষম করে। ক্লাউড ডিপ্লয় রেন্ডার এবং ডিপ্লয় অপারেশনের জন্য স্ক্যাফোল্ড ব্যবহার করে।

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

এই ল্যাবে, আপনারা নিম্নলিখিত বিষয়গুলো করতে শিখবেন:

  • ক্লাউড ডিপ্লয় পাইপলাইন তৈরি করুন
  • ডকারফাইল ব্যবহার না করে ক্লাউড বিল্ডের মাধ্যমে .Net অ্যাপ্লিকেশনের জন্য কন্টেইনার ইমেজ তৈরি করুন
  • Cloud Deploy ব্যবহার করে Cloud Run-এ অ্যাপ্লিকেশন স্থাপন করুন।
  • ক্লাউড ডিপ্লয় রিলিজ প্রচার করুন

পূর্বশর্ত

  • এই ল্যাবটি করার জন্য ক্লাউড কনসোল এবং শেল এনভায়রনমেন্ট সম্পর্কে পূর্বজ্ঞান থাকা আবশ্যক।

২. সেটআপ এবং প্রয়োজনীয়তা

ক্লাউড প্রজেক্ট সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

পরিবেশ সেটআপ

সার্চ বারের ডানদিকে থাকা আইকনটিতে ক্লিক করে ক্লাউড শেল সক্রিয় করুন।

eb0157a992f16fa3.png

ক্লাউড শেল থেকে, প্রোজেক্ট এনভায়রনমেন্ট ভেরিয়েবল সেট করতে নিম্নলিখিত কমান্ডটি চালান:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1

এপিআই সক্রিয় করুন:

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  clouddeploy.googleapis.com \
  artifactregistry.googleapis.com

অ্যাপ্লিকেশন কন্টেইনার ইমেজ সংরক্ষণের জন্য আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করুন:

gcloud artifacts repositories create containers-repo \
  --repository-format=docker \
  --location=${REGION} \
  --description="Containers repository"

৩. কনফিগারেশন ফাইলগুলো পর্যালোচনা করুন

29c2533441779de0.png

ক্লোন অ্যাপ্লিকেশন সোর্স কোড:

git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy

ক্লাউড ডিপ্লয় পাইপলাইন কনফিগারেশন পর্যালোচনা করুন:

clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
 stages:
 - targetId: dev-env
   profiles: [dev]
 - targetId: qa-env
   profiles: [qa]
 - targetId: prod-env
   profiles: [prod]
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: dev-env
description: Cloud Run development service
run:
 location: projects/_PROJECT_ID/locations/us-west1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: qa-env
description: Cloud Run QA service
run:
 location: projects/_PROJECT_ID/locations/us-central1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: prod-env
description: Cloud Run PROD service
run:
 location: projects/_PROJECT_ID/locations/us-south1

skaffold.yaml ফাইলটি পর্যালোচনা করুন, যেখানে তিনটি এনভায়রনমেন্ট সংজ্ঞায়িত করা হয়েছে এবং টার্গেট সার্ভিস হিসেবে ক্লাউড রান ব্যবহার করা হয়েছে।

skaffold.yaml

apiVersion: skaffold/v3alpha1
kind: Config
metadata: 
  name: cloud-run-app
profiles:
- name: dev
  manifests:
    rawYaml:
    - deploy-dev.yaml
- name: qa
  manifests:
    rawYaml:
    - deploy-qa.yaml
- name: prod
  manifests:
    rawYaml:
    - deploy-prod.yaml
deploy:
  cloudrun: {}

পরিষেবা কনফিগারেশন ফাইলগুলো পর্যালোচনা করুন।

deploy-dev.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app
        resources:
          limits:
            cpu: 1000m
            memory: 128Mi

deploy-qa.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app

deploy-prod.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: app-prod
spec:
  template:
    spec:
      containers:
      - image: app

কন্টেইনার ইমেজ তৈরি করতে এবং ক্লাউড ডিপ্লয় রিলিজ তৈরি করার ধাপগুলো জানতে cloudbuild.yaml ফাইলটি পর্যালোচনা করুন:

cloudbuild.yaml

steps:
- name: 'gcr.io/k8s-skaffold/pack'
  entrypoint: 'pack'
  args: ['build',
         '--builder=gcr.io/buildpacks/builder',
         '--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
  id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
  args: 
      [
        "deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
        "--delivery-pipeline", "cloud-run-pipeline",
        "--region", "${_REGION}",
        "--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
      ]
  entrypoint: gcloud

৪. ক্লাউড ডিপ্লয় পাইপলাইন তৈরি করুন

clouddeploy.yaml-এ _PROJECT_ID মানটি প্রতিস্থাপন করুন:

sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml

ক্লাউড ডিপ্লয় পাইপলাইন তৈরি করুন:

gcloud deploy apply \
  --file=clouddeploy.yaml \
  --region=${REGION} \
  --project=${PROJECT_ID}

Cloud Deploy- এ তৈরি করা পাইপলাইনটি পর্যালোচনা করুন।

৫. কন্টেইনার ইমেজ তৈরি করুন এবং একটি রিলিজ তৈরি করুন।

ক্লাউড বিল্ড পরিষেবা অ্যাকাউন্টে ক্লাউড ডিপ্লয় অপারেটরের অনুমতি যোগ করুন:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/clouddeploy.operator

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/iam.serviceAccountUser

কন্টেইনার ইমেজ তৈরি করুন এবং ক্লাউড ডিপ্লয় রিলিজ:

export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud builds submit \
  --config cloudbuild-plus.yaml \
  --substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}

Cloud Deploy- এ তৈরি করা রিলিজটি পর্যালোচনা করুন। Dev এনভায়রনমেন্টে ডেপ্লয়মেন্ট সম্পূর্ণ হওয়া পর্যন্ত অপেক্ষা করুন।

৬. QA এবং PROD পরিবেশে রিলিজটি উন্নীত করুন

ক্লাউড কনসোল বা ক্লাউড শেল ব্যবহার করে রিলিজটিকে পরবর্তী টার্গেটে (qa-env) উন্নীত করুন।

ক্লাউড শেল ব্যবহার করে রিলিজটি প্রমোট করুন, এর জন্য gcloud কমান্ডটি চালান।

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

QA এনভায়রনমেন্টে ডেপ্লয়মেন্ট সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন। রিলিজটিকে পরবর্তী টার্গেটে (প্রোডাকশন-এনভায়রনমেন্ট) উন্নীত করুন।

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

ক্লাউড কনসোলে ক্লাউড ডিপ্লয় খুলুন এবং প্রোডাকশন ডিপ্লয়মেন্টের জন্য রিলিজটি অনুমোদন করুন।

4c838b60770e9691.png

Cloud Deploy পাইপলাইনের অবস্থা এবং উপলব্ধ DORA মেট্রিকগুলো ('deployment count', 'deployment frequency', 'deployment failure rate') পর্যালোচনা করুন।

মেট্রিক

বর্ণনা

মোতায়েনের সংখ্যা

আপনার ডেলিভারি পাইপলাইনে চূড়ান্ত লক্ষ্যে সফল এবং ব্যর্থ ডেপ্লয়মেন্টের মোট সংখ্যা।

মোতায়েন ফ্রিকোয়েন্সি

আপনার ডেলিভারি পাইপলাইন কত ঘন ঘন চূড়ান্ত লক্ষ্যে ডেপ্লয় করে। এটি ডেভঅপস রিসার্চ অ্যান্ড অ্যাসেসমেন্ট (DORA) প্রোগ্রাম দ্বারা সংজ্ঞায়িত চারটি মূল মেট্রিকের মধ্যে একটি।

স্থাপনা ব্যর্থতার হার

আপনার ডেলিভারি পাইপলাইনে চূড়ান্ত লক্ষ্যে পৌঁছাতে ব্যর্থ হওয়া রোলআউটের শতাংশ।

ক্লাউড রান- এ ডেপ্লয় করা অ্যাপ্লিকেশনগুলো পর্যালোচনা করুন:

d6372b5350f10875.png

৭. অভিনন্দন!

অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!

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

  • ক্লাউড ডিপ্লয় পাইপলাইন কীভাবে তৈরি করবেন
  • ক্লাউড বিল্ড ব্যবহার করে .Net অ্যাপ্লিকেশনের জন্য কীভাবে কন্টেইনার ইমেজ তৈরি করবেন
  • Cloud Deploy ব্যবহার করে Cloud Run-এ অ্যাপ্লিকেশন কীভাবে ডেপ্লয় করবেন
  • ক্লাউড ডিপ্লয় রিলিজ কীভাবে প্রচার করবেন

পরিষ্কার করা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।

প্রকল্পটি মুছে ফেলা হচ্ছে

বিলিং বন্ধ করার সবচেয়ে সহজ উপায় হলো টিউটোরিয়ালের জন্য তৈরি করা প্রজেক্টটি ডিলিট করে দেওয়া।

৮. এরপর কী?