C# এ Google ক্লাউড ফাংশন

C# এ Google ক্লাউড ফাংশন

এই কোডল্যাব সম্পর্কে

subjectসেপ ২৩, ২০২২-এ শেষবার আপডেট করা হয়েছে
account_circleMete Atamel-এর লেখা

1. ভূমিকা

Google ক্লাউড ফাংশন একটি ইভেন্ট-চালিত সার্ভারহীন গণনা প্ল্যাটফর্ম। ক্লাউড ফাংশন আপনাকে রিসোর্স সরবরাহ বা পরিবর্তনের প্রয়োজনীয়তাগুলি পরিচালনা করার জন্য স্কেলিং সম্পর্কে চিন্তা না করেই আপনার কোড লিখতে দেয়৷

ক্লাউড ফাংশন দুই ধরনের আছে:

  • HTTP ফাংশন HTTP অনুরোধে সাড়া দেয়।
  • ব্যাকগ্রাউন্ড ফাংশনগুলি ইভেন্টগুলির দ্বারা ট্রিগার হয়, যেমন ক্লাউড পাব/সাব -এ একটি বার্তা প্রকাশিত হওয়া বা ক্লাউড স্টোরেজে আপলোড করা ফাইল৷

efb3268e3b74ed4f.png

এই কোডল্যাব আপনাকে C# এ আপনার নিজস্ব ক্লাউড ফাংশন তৈরি করে নিয়ে যাবে। আরও নির্দিষ্টভাবে, আপনি বিভিন্ন Google ক্লাউড উত্স থেকে HTTP এবং ক্লাউড ইভেন্টের প্রতিক্রিয়া জানিয়ে C# ফাংশন স্থাপন করবেন।

আপনি কি শিখবেন

  • .NET এর জন্য ফাংশন ফ্রেমওয়ার্ক।
  • কিভাবে একটি HTTP ফাংশন লিখতে হয়।
  • ক্লাউড স্টোরেজ ইভেন্টগুলিতে প্রতিক্রিয়া জানিয়ে একটি ক্লাউড ইভেন্ট ফাংশন কীভাবে লিখবেন।
  • ক্লাউড পাব/সাব ইভেন্টগুলিতে প্রতিক্রিয়া জানিয়ে একটি ক্লাউড ইভেন্ট ফাংশন কীভাবে লিখবেন।
  • যেকোন ধরণের ইভেন্টে সাড়া দিয়ে একটি ক্লাউড ইভেন্ট ফাংশন কীভাবে লিখবেন।

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

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

ক্লাউড শেল শুরু করুন

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।

Google ক্লাউড কনসোল থেকে, উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:

7ffe5cbb04455448.png

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারে করা যেতে পারে। আপনার কিছু ইন্সটল করার দরকার নেই।

আপনি শুরু করার আগে

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

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  cloudfunctions.googleapis.com \
  eventarc.googleapis.com \
  run.googleapis.com

ক্লাউড স্টোরেজ পরিষেবা অ্যাকাউন্টে pubsub.publisher ভূমিকা মঞ্জুর করুন৷ এই

Eventarc এর GCS ট্রিগারের জন্য প্রয়োজন:

SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p $PROJECT_ID)"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT \
    --role roles/pubsub.publisher

3. .NET এর জন্য ফাংশন ফ্রেমওয়ার্ক

.NET-এর জন্য ফাংশন ফ্রেমওয়ার্ক হল পোর্টেবল .NET ফাংশন লেখার জন্য একটি ওপেন সোর্স FaaS (পরিষেবা হিসাবে ফাংশন) ফ্রেমওয়ার্ক – Google ক্লাউড ফাংশন টিম আপনার কাছে নিয়ে এসেছে৷

ফাংশন ফ্রেমওয়ার্ক আপনাকে লাইটওয়েট ফাংশন লিখতে দেয় যা বিভিন্ন পরিবেশে চলে, যার মধ্যে রয়েছে:

  • গুগল ক্লাউড ফাংশন
  • আপনার স্থানীয় উন্নয়ন মেশিন
  • GKE তে ক্লাউড রান এবং ক্লাউড রান
  • নেটিভ-ভিত্তিক পরিবেশ

এই কোডল্যাবে, আপনি C# এ ক্লাউড ফাংশন তৈরি এবং স্থাপন করতে .NET এবং এর টেমপ্লেটগুলির জন্য ফাংশন ফ্রেমওয়ার্ক ব্যবহার করবেন।

ক্লাউড শেলের ভিতরে, dotnet জন্য ক্লাউড ফাংশন টেমপ্লেট ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

dotnet new --install Google.Cloud.Functions.Templates

এটি dotnet জন্য 3টি টেমপ্লেট ইনস্টল করে। প্রতিটি টেমপ্লেট C#, F# এবং VB-তে উপলব্ধ (কিন্তু আপনি এই ল্যাবে শুধুমাত্র C# ব্যবহার করবেন)। আপনি যাচাই করতে পারেন যে টেমপ্লেটগুলি চালানোর মাধ্যমে ইনস্টল করা হয়েছে:

dotnet new --list

Templates                                                 Short Name            
-----------------------------------------------------------------------
Google Cloud Functions CloudEvent Function                gcf-event
Google Cloud Functions CloudEvent Function (Untyped)      gcf-untyped-event
Google Cloud Functions HttpFunction                       gcf-http

4. HTTP ফাংশন

আপনি HTTP অনুরোধে সাড়া দিয়ে একটি HTTP ফাংশন তৈরি এবং স্থাপন করবেন।

gcf-http টেমপ্লেট ব্যবহার করে একটি HTTP ফাংশন তৈরি করুন:

mkdir HelloHttp
cd HelloHttp
dotnet new gcf-http

এটি একটি প্রকল্প এবং একটি Function.cs ফাইল তৈরি করে যা HTTP অনুরোধে সাড়া দেয়।

.csproj ফাইলে টার্গেট ফ্রেমওয়ার্ককে net6.0 এ পরিবর্তন করুন:

<TargetFramework>net6.0</TargetFramework>

trigger-http পতাকা ব্যবহার করে ফাংশন স্থাপন করুন:

gcloud functions deploy hello-http-function \
    --allow-unauthenticated \
    --entry-point HelloHttp.Function \
    --gen2 \
    --region us-central1 \
    --runtime dotnet6 \
    --trigger-http

এক বা দুই মিনিটের পরে, আপনার ক্লাউড কনসোলে ক্লাউড ফাংশন স্থাপন করা উচিত:

6711b32e72277a5c.png

আপনি gcloud functions call সহ একটি HTTP অনুরোধ পাঠিয়ে ফাংশনটি কল করতে পারেন:

gcloud functions call hello-http-function \
    --gen2 \
    --region us-central1

5. ক্লাউড ইভেন্ট ফাংশন - জিসিএস

আপনি Google ক্লাউড স্টোরেজ (GCS) ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে একটি CloudEvent ফাংশন তৈরি এবং স্থাপন করবেন৷

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

PROJECT_ID=$(gcloud config get-value core/project)
BUCKET_NAME="cloud-functions-bucket-${PROJECT_ID}"
gsutil mb -l us-central1 gs://${BUCKET_NAME}

gcf-event টেমপ্লেট ব্যবহার করে একটি CloudEvent ফাংশন তৈরি করুন:

mkdir HelloGcs
cd HelloGcs
dotnet new gcf-event

এটি একটি প্রকল্প এবং একটি Function.cs ফাইল তৈরি করে যা CloudEvent অনুরোধে সাড়া দেয়। এটি CloudEvent এর ডেটা StorageObjectData এ পার্স করে।

.csproj ফাইলে টার্গেট ফ্রেমওয়ার্ককে net6.0 এ পরিবর্তন করুন:

<TargetFramework>net6.0</TargetFramework>

trigger-event এবং trigger-resource পতাকা ব্যবহার করে ফাংশনটি স্থাপন করুন:

gcloud functions deploy hello-gcs-function \
    --allow-unauthenticated \
    --entry-point HelloGcs.Function \
    --gen2 \
    --region us-central1 \
    --runtime dotnet6 \
    --trigger-event google.storage.object.finalize \
    --trigger-resource ${BUCKET_NAME}

কয়েক মিনিটের পরে, ফাংশনটি ক্লাউড কনসোলে দৃশ্যমান হওয়া উচিত:

c28654d74bb31420.png

স্টোরেজ বালতিতে একটি ফাইল আপলোড করে ফাংশনটি ট্রিগার করুন:

echo "Hello from Storage" > random.txt
gsutil cp random.txt gs://${BUCKET_NAME}

লগগুলি পড়ার মাধ্যমে ফাংশনটি ট্রিগার হয়েছে তা যাচাই করুন:

gcloud functions logs read hello-gcs-function \
    --gen2 \
    --region us-central1

6. ক্লাউড ইভেন্ট ফাংশন - পাব/সাব

আপনি ক্লাউড পাব/সাব ইভেন্টগুলিতে প্রতিক্রিয়া জানিয়ে একটি ক্লাউড ইভেন্ট ফাংশন তৈরি এবং স্থাপন করবেন।

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

TOPIC_NAME=cloud-functions-topic
gcloud pubsub topics create ${TOPIC_NAME}

gcf-event টেমপ্লেট ব্যবহার করে একটি CloudEvent ফাংশন তৈরি করুন:

mkdir HelloPubSub
cd HelloPubSub
dotnet new gcf-event

এটি একটি প্রকল্প এবং একটি Function.cs ফাইল তৈরি করে যা CloudEvent অনুরোধে সাড়া দেয়। এটি ডিফল্টরূপে CloudEvent এর ডেটা StorageObjectData এ পার্স করে।

.csproj ফাইলে টার্গেট ফ্রেমওয়ার্ককে net6.0 এ পরিবর্তন করুন:

<TargetFramework>net6.0</TargetFramework>

পাব/সাব মেসেজ পার্স করতে StorageObjectData কে MessagePublishedData এ পরিবর্তন করুন। শেষ পর্যন্ত, আপনার ফাংশন এই মত হওয়া উচিত:

using CloudNative.CloudEvents;
using Google.Cloud.Functions.Framework;
using Google.Events.Protobuf.Cloud.PubSub.V1;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace HelloPubSub
{
    public class Function : ICloudEventFunction<MessagePublishedData>
    {
        public Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken)
        {
            var nameFromMessage = data.Message?.TextData;
            var name = string.IsNullOrEmpty(nameFromMessage) ? "world" : nameFromMessage;
            Console.WriteLine($"Hello {name}");
            return Task.CompletedTask;
        }
    }
}

trigger-topic পতাকা ব্যবহার করে ফাংশনটি স্থাপন করুন:

gcloud functions deploy hello-pubsub-function \
    --allow-unauthenticated \
    --entry-point HelloPubSub.Function \
    --gen2 \
    --region us-central1 \
    --runtime dotnet6 \
    --trigger-topic ${TOPIC_NAME}

কয়েক মিনিটের পরে, ফাংশনটি ক্লাউড কনসোলে দৃশ্যমান হওয়া উচিত:

3443808da7caf3bc.png

বিষয়টিতে একটি বার্তা প্রকাশ করে ফাংশনটি ট্রিগার করুন:

gcloud pubsub topics publish ${TOPIC_NAME} --message="World"

লগগুলি পড়ার মাধ্যমে ফাংশনটি ট্রিগার হয়েছে তা যাচাই করুন:

gcloud functions logs read hello-pubsub-function \
    --gen2 \
    --region us-central1

7. ক্লাউড ইভেন্ট ফাংশন - টাইপ করা হয়নি

আপনি যদি CloudEvents নিয়ে পরীক্ষা-নিরীক্ষা করে থাকেন এবং এখনও আপনার কাছে কোনো পেলোড ডেটা মডেল না থাকে যা আপনি প্রতিশ্রুতিবদ্ধ করতে চান, বা আপনি চান যে আপনার ফাংশন কোনো ক্লাউড ইভেন্ট পরিচালনা করতে সক্ষম হোক, আপনি একটি টাইপ না করা CloudEvent ফাংশন ব্যবহার করতে পারেন।

gcf-untyped-event টেমপ্লেট ব্যবহার করে একটি CloudEvent ফাংশন তৈরি করুন:

mkdir HelloUntyped
cd HelloUntyped
dotnet new gcf-untyped-event

এটি একটি প্রকল্প এবং একটি Function.cs ফাইল তৈরি করে যা CloudEvent এর ডেটা পার্স করার কোনো প্রচেষ্টা ছাড়াই CloudEvent অনুরোধে সাড়া দেয়।

.csproj ফাইলে টার্গেট ফ্রেমওয়ার্ককে net6.0 এ পরিবর্তন করুন:

<TargetFramework>net6.0</TargetFramework>

trigger-event এবং trigger-resource ফ্ল্যাগ ব্যবহার করে ফাংশনটি স্থাপন করুন:

gcloud functions deploy hello-untyped-function \
    --allow-unauthenticated \
    --entry-point HelloUntyped.Function \
    --gen2 \
    --region us-central1 \
    --runtime dotnet6 \
    --trigger-event google.storage.object.finalize \
    --trigger-resource ${BUCKET_NAME}

একটি ফাইল একটি স্টোরেজ বাকেট আপলোড করা হলে ফাংশন ট্রিগার হবে.

কয়েক মিনিটের পরে, ফাংশনটি ক্লাউড কনসোলে দৃশ্যমান হওয়া উচিত:

afe56530826787c6.png

স্টোরেজ বালতিতে একটি ফাইল আপলোড করে ফাংশনটি ট্রিগার করুন:

echo "Hello from Storage" > random.txt
gsutil cp random.txt gs://${BUCKET_NAME}

লগগুলি পড়ার মাধ্যমে ফাংশনটি ট্রিগার হয়েছে তা যাচাই করুন:

gcloud functions logs read hello-untyped-function \
    --gen2 \
    --region us-central1

8. অভিনন্দন!

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন।

আমরা কভার করেছি কি

  • .NET এর জন্য ফাংশন ফ্রেমওয়ার্ক।
  • কিভাবে একটি HTTP ক্লাউড ফাংশন লিখতে হয়।
  • ক্লাউড স্টোরেজ ইভেন্টগুলিতে প্রতিক্রিয়া জানিয়ে একটি ক্লাউড ইভেন্ট ফাংশন কীভাবে লিখবেন।
  • ক্লাউড পাব/সাব ইভেন্টগুলিতে প্রতিক্রিয়া জানিয়ে একটি ক্লাউড ইভেন্ট ফাংশন কীভাবে লিখবেন।
  • যেকোন ধরণের ইভেন্টে সাড়া দিয়ে একটি ক্লাউড ইভেন্ট ফাংশন কীভাবে লিখবেন।