Eventarc ইভেন্ট সহ Kubernetes পরিষেবা ট্রিগার করুন

১. ভূমিকা

cb762f29e9183a3f.png

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

এই কোডল্যাবে, আপনি ইভেন্টআর্ক (Eventarc) ব্যবহার করে পাব/সাব (Pub/Sub), ক্লাউড স্টোরেজ (Cloud Storage) এবং ক্লাউড অডিট লগ (Cloud Audit Logs) থেকে ইভেন্টগুলো পড়বেন এবং সেগুলোকে গুগল কুবারনেটিস ইঞ্জিন (GKE)-এ চলমান একটি কুবারনেটিস সার্ভিসে পাঠাবেন।

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

  • একটি GKE ক্লাস্টার তৈরি করুন।
  • একটি GKE সার্ভিসকে ইভেন্ট সিঙ্ক হিসেবে তৈরি করুন।
  • একটি পাব/সাব ট্রিগার তৈরি করুন।
  • একটি ক্লাউড স্টোরেজ ট্রিগার তৈরি করুন
  • একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করুন।

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

শুরু করার আগে

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রজেক্ট আইডি সেটআপ করা আছে:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

৩. একটি GKE ক্লাস্টার তৈরি করুন

প্রথমে, GKE-এর জন্য প্রয়োজনীয় পরিষেবাগুলি সক্রিয় করুন:

gcloud services enable container.googleapis.com

একটি অটোপাইলট GKE ক্লাস্টার তৈরি করুন:

CLUSTER_NAME=eventarc-cluster
REGION=us-central1

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

পরবর্তী ধাপে যাওয়ার আগে ক্লাস্টার তৈরির কাজটি সম্পন্ন হয়েছে কিনা তা নিশ্চিত করুন।

৪. একটি GKE পরিষেবা স্থাপন করুন

সার্ভিস ডেপ্লয় করার আগে, kubectl ব্যবহার করে ক্লাস্টারের সাথে যোগাযোগ করার জন্য অথেনটিকেশন ক্রেডেনশিয়াল সংগ্রহ করুন:

gcloud container clusters get-credentials $CLUSTER_NAME \
    --region $REGION

এরপর, GKE-তে একটি Kubernetes ডিপ্লয়মেন্ট হিসেবে Cloud Run-এর hello কন্টেইনারটি ডিপ্লয় করুন। এই সার্ভিসটি প্রাপ্ত HTTP রিকোয়েস্ট এবং CloudEvents লগ করে থাকে:

SERVICE_NAME=hello-gke

kubectl create deployment $SERVICE_NAME \
    --image=gcr.io/cloudrun/hello

ডিপ্লয়মেন্টটিকে একটি অভ্যন্তরীণ কুবারনেটিস সার্ভিস হিসেবে প্রকাশ করুন। এর ফলে ক্লাস্টারের মধ্যে থেকে অ্যাক্সেসযোগ্য একটি স্থিতিশীল আইপি সহ সার্ভিস তৈরি হয়:

kubectl expose deployment $SERVICE_NAME \
  --type ClusterIP --port 80 --target-port 8080

পরবর্তী ধাপে যাওয়ার আগে, পডটি চালু আছে কিনা তা নিশ্চিত করুন:

kubectl get pods

NAME                        READY   STATUS
hello-gke-df6469d4b-5vv22   1/1     Running

আপনি পরিষেবাটিও দেখতে পারেন:

kubectl get svc

NAME         TYPE           CLUSTER-IP    EXTERNAL-IP
hello-gke    LoadBalancer   10.51.1.26    <none>

৫. ইভেন্টআর্ক সেটআপ করুন

এই ধাপে, আপনি ইভেন্টআর্ক সেটআপ করার এবং ইভেন্টআর্ক জিকেই ডেস্টিনেশনগুলো ইনিশিয়ালাইজ করার পদক্ষেপগুলো সম্পন্ন করবেন।

প্রথমে, Eventarc এবং Eventarc GKE ডেস্টিনেশনগুলির জন্য প্রয়োজনীয় পরিষেবাগুলি সক্রিয় করুন:

gcloud services enable eventarc.googleapis.com \
  cloudresourcemanager.googleapis.com

এরপরে, GKE ক্লাস্টারগুলি পরিচালনা করার জন্য Eventarc সক্রিয় করুন:

gcloud eventarc gke-destinations init

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

৬. ঘটনা আবিষ্কার

ট্রিগার তৈরি করার আগে, আপনি জেনে নিতে পারেন ইভেন্টের উৎসগুলো কী, সেগুলো থেকে কী ধরনের ইভেন্ট নির্গত হতে পারে এবং সেগুলো গ্রহণ করার জন্য ট্রিগার কীভাবে কনফিগার করতে হয়।

আপনি Eventarc দ্বারা সমর্থিত ইভেন্টগুলির ডকুমেন্টেশন পৃষ্ঠাটি দেখতে পারেন। এছাড়াও আপনি gcloud ব্যবহার করে ইভেন্টগুলি অন্বেষণ করতে পারেন।

বিভিন্ন ধরনের ইভেন্টের তালিকা দেখতে:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

প্রতিটি ইভেন্টের ধরণ সম্পর্কে আরও তথ্য পেতে:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

যেসব সার্ভিস একটি নির্দিষ্ট ধরনের ইভেন্ট নির্গত করে, তাদের তালিকা দেখতে:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

প্রতিটি সার্ভিস যে মেথডের নামগুলো (সাব-ইভেন্টগুলো) নির্গত করতে পারে, তার তালিকা দেখতে:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

৭. একটি পাব/সাব ট্রিগার তৈরি করুন

ইভেন্ট গ্রহণ করার একটি উপায় হলো পাব/সাব (Pub/Sub)। যেকোনো অ্যাপ্লিকেশন পাব/সাব-এ বার্তা প্রকাশ করতে পারে এবং এই বার্তাগুলো ইভেন্টআর্ক (Eventarc)-এর মাধ্যমে বিভিন্ন সার্ভিসে পৌঁছে দেওয়া যায়।

সেটআপ

যেকোনো ট্রিগার তৈরি করার আগে, ট্রিগার দ্বারা ব্যবহৃত হওয়ার জন্য আপনার একটি সার্ভিস অ্যাকাউন্ট প্রয়োজন।

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

SERVICE_ACCOUNT=eventarc-gke-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

GKE ডেস্টিনেশনযুক্ত ট্রিগারগুলির জন্য সার্ভিস অ্যাকাউন্টকে অবশ্যই নিম্নলিখিত রোলগুলি প্রদান করতে হবে:

  • roles/pubsub.subscriber
  • roles/monitoring.metricWriter
  • roles/eventarc.eventReceiver (শুধুমাত্র AuditLog ট্রিগারের জন্য। এটি পরবর্তী ধাপে যোগ করা হবে)

ভূমিকাগুলো মঞ্জুর করুন:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \
  --role roles/pubsub.subscriber

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \
  --role roles/monitoring.metricWriter

তৈরি করুন

আপনার সার্ভিসে পাব/সাব মেসেজ রাউট করার জন্য একটি ট্রিগার তৈরি করুন:

TRIGGER_NAME=trigger-pubsub-gke

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-gke-cluster=$CLUSTER_NAME \
  --destination-gke-location=$REGION \
  --destination-gke-namespace=default \
  --destination-gke-service=$SERVICE_NAME \
  --destination-gke-path=/ \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

পরীক্ষা

সমস্ত ট্রিগার তালিকাভুক্ত করে আপনি যাচাই করতে পারেন যে ট্রিগারটি তৈরি হয়েছে কিনা:

gcloud eventarc triggers list

পাব/সাব ট্রিগার আড়ালে একটি পাব/সাব টপিক তৈরি করে। চলুন, এটি খুঁজে বের করে একটি ভেরিয়েবলে অ্যাসাইন করি:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

টপিকে একটি মেসেজ পাবলিশ করতে gcloud ব্যবহার করুন:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

ইভেন্টটি গৃহীত হয়েছে কিনা তা পরীক্ষা করতে, প্রথমে পডের নামটি খুঁজুন:

kubectl get pods

NAME                        READY   STATUS
hello-gke-df6469d4b-5vv22   1/1     Running

এবং এটিকে একটি ভেরিয়েবলে সংরক্ষণ করুন:

POD_NAME=hello-gke-df6469d4b-5vv22 

প্রাপ্ত ইভেন্টটি যাচাই করতে পডের লগগুলো পরীক্ষা করুন:

kubectl logs $POD_NAME

{
  "severity": "INFO",
  "eventType": "google.cloud.pubsub.topic.v1.messagePublished",
  "message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World",
  "event": {
    "data": {
      "subscription": "projects/atamel-eventarc-gke/subscriptions/eventarc-us-central1-trigger-pubsub-gke-sub-270",
      "message": {
        "data": "SGVsbG8gV29ybGQ=",
        "messageId": "6031025573654834",
        "publishTime": "2022-10-19T14:13:07.990Z"
      }
    },
    "datacontenttype": "application/json",
    "id": "6031025573654834",
    "source": "//pubsub.googleapis.com/projects/atamel-eventarc-gke/topics/eventarc-us-central1-trigger-pubsub-gke-729",
    "specversion": "1.0",
    "time": "2022-10-19T14:13:07.99Z",
    "type": "google.cloud.pubsub.topic.v1.messagePublished"
  }
}

৮. একটি ক্লাউড স্টোরেজ ট্রিগার তৈরি করুন

ইভেন্ট গ্রহণ করার আরেকটি উপায় হলো ক্লাউড স্টোরেজ। উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন কোনো বাকেটে একটি ফাইল আপলোড করতে পারে এবং সেই ইভেন্টটি ইভেন্টআর্কের মাধ্যমে সার্ভিসগুলোতে পৌঁছে দেওয়া যেতে পারে।

সেটআপ

ক্লাউড স্টোরেজ ট্রিগার তৈরি করার আগে, ইভেন্ট গ্রহণ করার জন্য একটি বাকেট তৈরি করুন:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID
gcloud storage buckets update gs://$BUCKET_NAME --location=$REGION

ক্লাউড স্টোরেজ ট্রিগারের জন্য আপনাকে ক্লাউড স্টোরেজ সার্ভিস অ্যাকাউন্টে pubsub.publisher রোলটিও যোগ করতে হবে:

SERVICE_ACCOUNT_STORAGE=$(gcloud storage service-agent --project=$PROJECT_ID)
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

তৈরি করুন

বাকেট থেকে আপনার সার্ভিসে নতুন ফাইল তৈরির ইভেন্টগুলো পাঠানোর জন্য একটি ট্রিগার তৈরি করুন:

TRIGGER_NAME=trigger-storage-gke

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-gke-cluster=$CLUSTER_NAME \
  --destination-gke-location=$REGION \
  --destination-gke-namespace=default \
  --destination-gke-service=$SERVICE_NAME \
  --destination-gke-path=/ \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

পরীক্ষা

সমস্ত ট্রিগার তালিকাভুক্ত করে আপনি যাচাই করতে পারেন যে ট্রিগারটি তৈরি হয়েছে কিনা:

gcloud eventarc triggers list

একটি ফাইল তৈরি করুন এবং gcloud storage ব্যবহার করে ফাইলটি বাকেটে আপলোড করুন:

echo "Hello World" > random.txt
gcloud storage cp random.txt gs://$BUCKET_NAME/random.txt

প্রাপ্ত ইভেন্টটি যাচাই করতে পডের লগগুলো পরীক্ষা করুন:

kubectl logs $POD_NAME

{
  "severity": "INFO",
  "eventType": "google.cloud.storage.object.v1.finalized",
  "message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: {\n  \"kind\": \"storage#object\",\n  \"id\": \"eventarc-gcs-atamel-eventarc-gke/random.txt/1666190425669022\",\n  \"selfLink\": \"https://www.googleapis.com/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt\",\n  \"name\": \"random.txt\",\n  \"bucket\": \"eventarc-gcs-atamel-eventarc-gke\",\n  \"generation\": \"1666190425669022\",\n  \"metageneration\": \"1\",\n  \"contentType\": \"text/plain\",\n  \"timeCreated\": \"2022-10-19T14:40:25.678Z\",\n  \"updated\": \"2022-10-19T14:40:25.678Z\",\n  \"storageClass\": \"STANDARD\",\n  \"timeStorageClassUpdated\": \"2022-10-19T14:40:25.678Z\",\n  \"size\": \"12\",\n  \"md5Hash\": \"5Z/5eUEET4XfUpfhwwLSYA==\",\n  \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt?generation=1666190425669022\u0026alt=media\",\n  \"contentLanguage\": \"en\",\n  \"crc32c\": \"R1jUOQ==\",\n  \"etag\": \"CJ77zIPD7PoCEAE=\"\n}\n",
  "event": {
    "bucket": "eventarc-gcs-atamel-eventarc-gke",
    "data": {
      "kind": "storage#object",
      "id": "eventarc-gcs-atamel-eventarc-gke/random.txt/1666190425669022",
      "selfLink": "https://www.googleapis.com/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt",
      "name": "random.txt",
      "bucket": "eventarc-gcs-atamel-eventarc-gke",
      "generation": "1666190425669022",
      "metageneration": "1",
      "contentType": "text/plain",
      "timeCreated": "2022-10-19T14:40:25.678Z",
      "updated": "2022-10-19T14:40:25.678Z",
      "storageClass": "STANDARD",
      "timeStorageClassUpdated": "2022-10-19T14:40:25.678Z",
      "size": "12",
      "md5Hash": "5Z/5eUEET4XfUpfhwwLSYA==",
      "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt?generation=1666190425669022\u0026alt=media",
      "contentLanguage": "en",
      "crc32c": "R1jUOQ==",
      "etag": "CJ77zIPD7PoCEAE="
    },
    "datacontenttype": "application/json",
    "id": "6031255652220627",
    "source": "//storage.googleapis.com/projects/_/buckets/eventarc-gcs-atamel-eventarc-gke",
    "specversion": "1.0",
    "subject": "objects/random.txt",
    "time": "2022-10-19T14:40:25.678152Z",
    "type": "google.cloud.storage.object.v1.finalized"
  }
}

৯. একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করুন

যদিও ক্লাউড স্টোরেজ ইভেন্ট শোনার জন্য ক্লাউড স্টোরেজ ট্রিগার একটি উত্তম উপায়, এই ধাপে আপনি একই কাজ করার জন্য একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করবেন।

সেটআপ

কোনো পরিষেবা থেকে ইভেন্ট পেতে, আপনাকে অডিট লগ চালু করতে হবে। গুগল ক্লাউড কনসোল থেকে, উপরের বাম দিকের মেনু থেকে IAM & Admin এবং Audit Logs নির্বাচন করুন। পরিষেবাগুলির তালিকায়, Google Cloud Storage চেক করুন।

91d1bcef8f953fe3.png

ডানদিকে, Admin , Read এবং Write নির্বাচিত আছে কিনা তা নিশ্চিত করুন এবং Save ক্লিক করুন:

ccb31db1e55fd2e3.png

ক্লাউড অডিট লগস ট্রিগারগুলির জন্য আপনাকে ট্রিগার সার্ভিস অ্যাকাউন্টে eventarc.eventReceiver রোলটিও যোগ করতে হবে:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \
  --role roles/eventarc.eventReceiver

তৈরি করুন

বাকেট থেকে আপনার সার্ভিসে নতুন ফাইল তৈরির ইভেন্টগুলো পাঠানোর জন্য একটি ট্রিগার তৈরি করুন:

TRIGGER_NAME=trigger-auditlog-storage-gke

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-gke-cluster=$CLUSTER_NAME \
  --destination-gke-location=$REGION \
  --destination-gke-namespace=default \
  --destination-gke-service=$SERVICE_NAME \
  --destination-gke-path=/ \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

পরীক্ষা

অডিট লগ ট্রিগারগুলো চালু হতে কিছুটা সময় লাগে। সমস্ত ট্রিগারের তালিকা দেখে আপনি যাচাই করতে পারেন যে ট্রিগারটি তৈরি হয়েছে কিনা:

gcloud eventarc triggers list

আপনাকে দেখতে হবে যে Active ফিল্ডটি Yes আছে:

NAME                          TYPE                                           DESTINATION     ACTIVE
trigger-auditlog-storage-gke  google.cloud.audit.log.v1.written              GKE: hello-gke  Yes

একটি ফাইল তৈরি করুন এবং gcloud storage ব্যবহার করে ফাইলটি বাকেটে আপলোড করুন:

echo "Hello World" > random.txt
gcloud storage cp random.txt gs://$BUCKET_NAME/random.txt

প্রাপ্ত ইভেন্টটি যাচাই করতে পডের লগগুলো পরীক্ষা করুন:

kubectl logs $POD_NAME

{
  "severity": "INFO",
  "eventType": "google.cloud.audit.log.v1.written",
  "message": "Received event of type google.cloud.audit.log.v1.written. Event data: {\"protoPayload\":{\"status\":{},\"authenticationInfo\":{\"principalEmail\":\"atameldev@gmail.com\"},\"requestMetadata\":{\"callerIp\":\"149.71.143.227\",\"callerSuppliedUserAgent\":\"apitools Python/3.10.4 gsutil/5.14 (darwin) analytics/disabled interactive/True command/cp google-cloud-sdk/405.0.1,gzip(gfe)\",\"requestAttributes\":{\"time\":\"2022-10-19T15:05:54.144615670Z\",\"auth\":{}},\"destinationAttributes\":{}},\"serviceName\":\"storage.googleapis.com\",\"methodName\":\"storage.objects.create\",\"authorizationInfo\":[{\"resource\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"permission\":\"storage.objects.delete\",\"granted\":true,\"resourceAttributes\":{}},{\"resource\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"permission\":\"storage.objects.create\",\"granted\":true,\"resourceAttributes\":{}}],\"resourceName\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"serviceData\":{\"@type\":\"type.googleapis.com/google.iam.v1.logging.AuditData\",\"policyDelta\":{\"bindingDeltas\":[{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"projectOwner:atamel-eventarc-gke\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"projectEditor:atamel-eventarc-gke\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"user:atameldev@gmail.com\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectReader\",\"member\":\"projectViewer:atamel-eventarc-gke\"}]}},\"resourceLocation\":{\"currentLocations\":[\"us-central1\"]}},\"insertId\":\"-8vmrbve7pol2\",\"resource\":{\"type\":\"gcs_bucket\",\"labels\":{\"project_id\":\"atamel-eventarc-gke\",\"bucket_name\":\"eventarc-gcs-atamel-eventarc-gke\",\"location\":\"us-central1\"}},\"timestamp\":\"2022-10-19T15:05:54.138732321Z\",\"severity\":\"INFO\",\"logName\":\"projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access\",\"receiveTimestamp\":\"2022-10-19T15:05:54.839604461Z\"}",
  "event": {
    "data": {
      "protoPayload": {
        "status": {
        },
        "authenticationInfo": {
          "principalEmail": "atameldev@gmail.com"
        },
        "requestMetadata": {
          "callerIp": "149.71.143.227",
          "callerSuppliedUserAgent": "apitools Python/3.10.4 gsutil/5.14 (darwin) analytics/disabled interactive/True command/cp google-cloud-sdk/405.0.1,gzip(gfe)",
          "requestAttributes": {
            "time": "2022-10-19T15:05:54.144615670Z",
            "auth": {
            }
          },
          "destinationAttributes": {
          }
        },
        "serviceName": "storage.googleapis.com",
        "methodName": "storage.objects.create",
        "authorizationInfo": [
          {
            "resource": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
            "permission": "storage.objects.delete",
            "granted": true,
            "resourceAttributes": {
            }
          },
          {
            "resource": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
            "permission": "storage.objects.create",
            "granted": true,
            "resourceAttributes": {
            }
          }
        ],
        "resourceName": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
        "serviceData": {
          "@type": "type.googleapis.com/google.iam.v1.logging.AuditData",
          "policyDelta": {
            "bindingDeltas": [
              {
                "action": "ADD",
                "role": "roles/storage.legacyObjectOwner",
                "member": "projectOwner:atamel-eventarc-gke"
              },
              {
                "action": "ADD",
                "role": "roles/storage.legacyObjectOwner",
                "member": "projectEditor:atamel-eventarc-gke"
              },
              {
                "action": "ADD",
                "role": "roles/storage.legacyObjectOwner",
                "member": "user:atameldev@gmail.com"
              },
              {
                "action": "ADD",
                "role": "roles/storage.legacyObjectReader",
                "member": "projectViewer:atamel-eventarc-gke"
              }
            ]
          }
        },
        "resourceLocation": {
          "currentLocations": [
            "us-central1"
          ]
        }
      },
      "insertId": "-8vmrbve7pol2",
      "resource": {
        "type": "gcs_bucket",
        "labels": {
          "project_id": "atamel-eventarc-gke",
          "bucket_name": "eventarc-gcs-atamel-eventarc-gke",
          "location": "us-central1"
        }
      },
      "timestamp": "2022-10-19T15:05:54.138732321Z",
      "severity": "INFO",
      "logName": "projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access",
      "receiveTimestamp": "2022-10-19T15:05:54.839604461Z"
    },
    "datacontenttype": "application/json; charset=utf-8",
    "dataschema": "https://googleapis.github.io/google-cloudevents/jsonschema/google/events/cloud/audit/v1/LogEntryData.json",
    "id": "projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access-8vmrbve7pol21666191954138732",
    "methodname": "storage.objects.create",
    "recordedtime": "2022-10-19T15:05:54.138732321Z",
    "resourcename": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
    "servicename": "storage.googleapis.com",
    "source": "//cloudaudit.googleapis.com/projects/atamel-eventarc-gke/logs/data_access",
    "specversion": "1.0",
    "subject": "storage.googleapis.com/projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
    "time": "2022-10-19T15:05:54.839604461Z",
    "type": "google.cloud.audit.log.v1.written"
  }
}

১০. অভিনন্দন!

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

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

  • একটি GKE ক্লাস্টার তৈরি করুন।
  • একটি GKE সার্ভিসকে ইভেন্ট সিঙ্ক হিসেবে তৈরি করুন।
  • একটি পাব/সাব ট্রিগার তৈরি করুন।
  • একটি ক্লাউড স্টোরেজ ট্রিগার তৈরি করুন।
  • একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করুন।