ল্যাব: মিডিয়া CDN-এ পরিষেবা এক্সটেনশন

1. ভূমিকা

শেষ আপডেট: 2024-05-01

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

মিডিয়া CDN, স্ট্রিমিং মিডিয়ার জন্য GCP-এর গ্লোবাল এজ নেটওয়ার্ক, অনেকগুলি অন্তর্নির্মিত বা "কোর" ক্ষমতা প্রদান করে৷ মূল ক্ষমতাগুলি সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে মোকাবেলা করার উদ্দেশ্যে তৈরি করা হয়, তবে আপনার এমন প্রয়োজনীয়তাও থাকতে পারে যেগুলি এই মূল বৈশিষ্ট্য দ্বারা সম্বোধন করা হয় না৷ সেট

মিডিয়া CDN-এর জন্য পরিষেবা এক্সটেনশন, কখনও কখনও এজ প্রোগ্রামেবিলিটি হিসাবেও উল্লেখ করা হয়, আপনাকে মিডিয়া CDN-এর আচরণ কাস্টমাইজ করতে প্রান্তে আপনার নিজস্ব কোড চালানোর অনুমতি দেয়। এটি ক্যাশে কী, কাস্টম টোকেন প্রমাণীকরণ এবং টোকেন প্রত্যাহার, অতিরিক্ত কাস্টম লগ ক্ষেত্র, A/B পরীক্ষা এবং কাস্টম ত্রুটি পৃষ্ঠা থেকে শুরু করে অতিরিক্ত ব্যবহারের ক্ষেত্রে আনলক করে।

আপনি কি নির্মাণ করবেন

এই কোড ল্যাবে, আমরা মিডিয়া সিডিএন (সিডিএন) + সার্ভিস এক্সটেনশন (এজ প্রোগ্রামেবিলিটি) + ক্লাউড স্টোরেজ (সিডিএন-এর উত্স) সহ একটি এজ কম্পিউট-সক্ষম CDN ডেলিভারি পরিবেশ স্থাপনের ধাপগুলি অতিক্রম করব।

1f19151bdd96acb0.png

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

  • অরিজিন হিসাবে সেট করা একটি ক্লাউড স্টোরেজ বাকেটের সাথে মিডিয়া সিডিএন কীভাবে সেট আপ করবেন
  • কীভাবে কাস্টম HTTP প্রমাণীকরণ সহ একটি পরিষেবা এক্সটেনশন প্লাগইন তৈরি করবেন এবং মিডিয়া CDN এর সাথে এটি সংযুক্ত করবেন
  • পরিষেবা এক্সটেনশন প্লাগইনটি প্রত্যাশিত হিসাবে কাজ করছে তা কীভাবে যাচাই করবেন
  • (ঐচ্ছিক) কীভাবে একটি পরিষেবা এক্সটেনশন প্লাগইন পরিচালনা করবেন যেমন আপডেট করা, রেফারেন্স করা, রোল ব্যাক করা এবং একটি নির্দিষ্ট প্লাগইন সংস্করণ মুছে ফেলা

আপনি কি প্রয়োজন হবে

  • বেসিক নেটওয়ার্কিং এবং HTTP এর জ্ঞান
  • মৌলিক ইউনিক্স/লিনাক্স কমান্ড লাইন জ্ঞান

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

মিডিয়া সিডিএন অ্যালোলিস্ট এবং সার্ভিস এক্সটেনশন অ্যালোলিস্টের জন্য অনুরোধ

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

  • মিডিয়া CDN এবং মিডিয়া CDN-এর জন্য পরিষেবা এক্সটেনশন উভয় অ্যাক্সেসের অনুরোধ করতে, মিডিয়া CDN এবং পরিষেবা এক্সটেনশনগুলির জন্য আপনার পক্ষ থেকে অ্যাক্সেসের অনুরোধ তৈরি করতে অনুগ্রহ করে আপনার Google অ্যাকাউন্ট টিমের সাথে যোগাযোগ করুন

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

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

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

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

1dec6f9683153af0.png

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

de496bb88f9a0b10.png

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

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

আইএএম ভূমিকা এবং অ্যাক্সেস

মিডিয়া CDN এবং আর্টিফ্যাক্ট রেজিস্ট্রি সংস্থান তৈরি করার জন্য প্রয়োজনীয় আইডেন্টিটি অ্যান্ড অ্যাকসেস ম্যানেজমেন্ট (IAM) অনুমতিগুলি নিম্নরূপ:

  • roles/networkservices.edgeCacheAdmin
  • roles/networkservices.edgeCacheUser
  • roles/networkservices.edgeCacheViewer
  • roles/artifactregistry.repoAdmin

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার project_id , project_num , অবস্থান এবং রিপোজিটরি এনভায়রনমেন্ট ভেরিয়েবল সেট আপ করা আছে।

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
PROJECT_NUM=[YOUR-PROJECT-NUMBER]
LOCATION=us-central1
REPOSITORY=service-extension-$PROJECT_ID

এপিআই সক্ষম করুন

নীচের কমান্ডের মাধ্যমে মিডিয়া CDN এবং পরিষেবা এক্সটেনশন API সক্রিয় করুন৷

gcloud services enable networkservices.googleapis.com
gcloud services enable networkactions.googleapis.com
gcloud services enable edgecache.googleapis.com
gcloud services enable artifactregistry.googleapis.com

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

মিডিয়া CDN বিষয়বস্তু একটি ক্লাউড স্টোরেজ বালতি, একটি তৃতীয় পক্ষের স্টোরেজ অবস্থান, বা যেকোনো পাবলিক অ্যাক্সেসযোগ্য HTTP(HTTPS) এন্ডপয়েন্টের মতো অবস্থান থেকে উদ্ভূত হতে পারে।

এই কোডল্যাবে, আমরা একটি ক্লাউড স্টোরেজ বালতিতে সামগ্রী সংরক্ষণ করব।

আমরা বালতি তৈরি করতে gsutil mb কমান্ড ব্যবহার করব

gsutil mb gs://mediacdn-bucket-$PROJECT_ID

ঐচ্ছিকভাবে, আপনি নিম্নলিখিত হিসাবে GUI ব্যবহার করে একটি ক্লাউড স্টোরেজ বালতি তৈরি করতে পারেন:

  1. Google ক্লাউড কনসোলে, ক্লাউড স্টোরেজ পৃষ্ঠায় যান।
  2. CREATE বাটনে ক্লিক করুন।
  3. বালতি জন্য একটি নাম লিখুন. - যেমন "mediacdn-bucket-$PROJECT_ID"।
  4. বাকি সেটিংস ডিফল্ট হিসাবে ছেড়ে দিন।
  5. CREATE বাটনে ক্লিক করুন।

50475e01c5a3adbe.png

5. ক্লাউড স্টোরেজ বালতিতে একটি পরীক্ষামূলক বস্তু আপলোড করুন

এখন আমরা ক্লাউড স্টোরেজ বালতিতে একটি বস্তু আপলোড করব।

  1. ক্লাউড শেলে একটি ফাইল তৈরি করুন তারপর gsutil ব্যবহার করে বালতিতে আপলোড করুন
echo media-cdn-service-extensions-test > file.txt

gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
  1. বালতিতে মিডিয়া CDN অ্যাক্সেস মঞ্জুর করুন৷
gsutil iam ch \
serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID

6. মিডিয়া CDN কনফিগার করুন

এরপরে আমরা একটি মিডিয়া CDN কনফিগারেশন তৈরি করব।

প্রতিটি মিডিয়া CDN কনফিগারেশন দুটি প্রধান সম্পদ নিয়ে গঠিত:

  • EdgeCacheService , ক্লায়েন্ট-ফেসিং কনফিগারেশন (TLS, IP অ্যাড্রেসিং), রাউটিং, CDN কনফিগারেশন (ক্যাশ মোড, TTL, সাইনিং) এবং নিরাপত্তা নীতির জন্য দায়ী।
  • EdgeCacheOrigin , যে কোনো HTTP-ভিত্তিক উত্সের জন্য প্রতি-অরিজিন কনফিগারেশনের জন্য দায়ী, সেইসাথে যখন বিষয়বস্তু পাওয়া যায় না বা নাগাল পাওয়া যায় না তখন পুনরায় চেষ্টা করুন।

একটি এজ ক্যাশে মূল কনফিগার করুন

এখন চলুন একটি অরিজিন তৈরি করি যা আপনার তৈরি করা ক্লাউড স্টোরেজ বাকেটের দিকে নির্দেশ করে।

  1. Google ক্লাউড কনসোলে, মিডিয়া CDN পৃষ্ঠাতে যান।
  2. ORIGINS ট্যাবে ক্লিক করুন।
  3. CREATE ORIGIN এ ক্লিক করুন।
  4. প্রান্ত ক্যাশে মূলের নাম হিসাবে 'ক্লাউড-স্টোরেজ-অরিজিন' লিখুন।
  5. মূল ঠিকানার অধীনে:
  6. 'একটি Google ক্লাউড স্টোরেজ বাকেট নির্বাচন করুন' নির্বাচন করুন৷
  7. 'mediacdn-bucket-$PROJECT_ID' নামের ক্লাউড স্টোরেজ বাকেটটিতে ব্রাউজ করুন৷
  8. SELECT এ ক্লিক করুন।
  9. বাকি সেটিংস ডিফল্ট হিসাবে ছেড়ে দিন।
  10. CREATE ORIGIN এ ক্লিক করুন।

e6eb0faa94838c4.png

নতুন তৈরি EdgeCacheOrigin রিসোর্সটি অরিজিন পৃষ্ঠায় আপনার প্রোজেক্টের উত্সের তালিকায় উপস্থিত হয়।

একটি এজ ক্যাশে পরিষেবা কনফিগার করুন

  1. Google ক্লাউড কনসোলে, মিডিয়া CDN পৃষ্ঠাতে যান।
  2. SERVICES ট্যাবে ক্লিক করুন।
  3. CREATE SERVICE এ ক্লিক করুন।
  4. আপনার পরিষেবার জন্য একটি অনন্য নাম লিখুন - যেমন 'media-cdn' - এবং তারপরে পরবর্তী ক্লিক করুন।

d2f9ac837bc5d45a.png

  1. রাউটিং বিভাগে, হোস্ট নিয়ম যোগ করুন ক্লিক করুন।
  2. হোস্ট ফিল্ডে ওয়াইল্ডকার্ড - "*" লিখুন।

25d3e25000934e59.png

  1. রুট নিয়ম যোগ করুন ক্লিক করুন.
  2. অগ্রাধিকারের জন্য, "1" উল্লেখ করুন।
  3. একটি ম্যাচ শর্ত যোগ করুন ক্লিক করুন, পাথ ম্যাচের জন্য, ম্যাচের ধরন হিসাবে "প্রিফিক্স ম্যাচ" নির্বাচন করুন, পাথ ম্যাচ ক্ষেত্রে "/" উল্লেখ করুন এবং তারপরে সম্পন্ন ক্লিক করুন৷
  4. প্রাথমিক কর্মের অধীনে একটি উত্স থেকে আনুন নির্বাচন করুন এবং তারপরে ড্রপ ডাউন তালিকায় আপনি যে উত্সটি কনফিগার করেছেন সেটি নির্বাচন করুন৷

d1975f366233521a.png

  1. আরও কনফিগারেশন বিকল্পগুলি প্রসারিত করতে অ্যাডভান্সড কনফিগারেশনগুলিতে ক্লিক করুন৷
  2. রুট অ্যাকশনে, একটি আইটেম যোগ করুন ক্লিক করুন। তারপর, নিম্নলিখিত করুন:
  3. প্রকারের জন্য, "CDN নীতি" নির্বাচন করুন।
  4. ক্যাশে মোডের জন্য, "সব ক্যাশে জোর করুন" নির্বাচন করুন।
  5. বাকিটা ডিফল্ট হিসেবে রেখে দিন
  6. সম্পন্ন ক্লিক করুন.
  7. Save এ ক্লিক করুন।

b7e77d059db84ab6.png

  1. CREATE SERVICE এ ক্লিক করুন।

নতুন তৈরি EdgeCacheService সংস্থান আপনার প্রকল্পের পরিষেবার তালিকায় পরিষেবা পৃষ্ঠায় প্রদর্শিত হবে।

মিডিয়াসিডিএন আইপি ঠিকানা এবং পরীক্ষা পুনরুদ্ধার করুন

  1. Google ক্লাউড কনসোলে, মিডিয়া CDN পৃষ্ঠাতে যান।
  2. মিডিয়া CDN-এ যান
  3. পরিষেবা ট্যাবে ক্লিক করুন।
  4. আপনার পরিষেবার জন্য, ঠিকানা কলাম দেখুন।

4031b6d1eac89041.png

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

curl -svo /dev/null "http://MEDIA_CDN_IP_ADDRESS/file.txt"

কমান্ড নিম্নলিখিত অনুরূপ আউটপুট উত্পাদন করা উচিত:

< HTTP/2 200 OK
...
media-cdn-service-extensions-test
...

এখন আপনি মূল হিসাবে ক্লাউড স্টোরেজ সহ একটি মিডিয়াসিডিএন স্থাপনা সফলভাবে তৈরি করেছেন৷

7. সার্ভিস এক্সটেনশনের জন্য আর্টিফ্যাক্ট রেজিস্ট্রি কনফিগার করুন

একটি সার্ভিস এক্সটেনশন তৈরি করার আগে, আমাদের আর্টিফ্যাক্ট রেজিস্ট্রি কনফিগার করতে হবে। আর্টিফ্যাক্ট রেজিস্ট্রি হল বিল্ড আর্টিফ্যাক্টগুলি পরিচালনা করার জন্য Google ক্লাউডের সর্বজনীন প্যাকেজ ম্যানেজার৷ সার্ভিস এক্সটেনশন (প্রক্সি-ওয়াসম) প্লাগইনগুলি আর্টিফ্যাক্ট রেজিস্ট্রিতে প্রকাশিত হয়। একবার আর্টিফ্যাক্ট রেজিস্ট্রিতে প্রকাশিত হলে, প্রক্সি-ওয়াসম প্লাগইনগুলি আপনার মিডিয়া সিডিএন স্থাপনায় স্থাপন করা যেতে পারে।

আমরা সংগ্রহস্থল তৈরি করতে gcloud artifacts repositories create কমান্ড ব্যবহার করব

gcloud artifacts repositories create service-extension-$PROJECT_ID \
    --repository-format=docker \
    --location=$LOCATION \
    --description="Repo for Service Extension" \
    --async

ঐচ্ছিকভাবে, আপনি নিম্নলিখিত হিসাবে GUI ব্যবহার করে একটি সংগ্রহস্থল তৈরি করতে পারেন:

  1. Google ক্লাউড কনসোলে, আর্টিফ্যাক্ট রেজিস্ট্রি পৃষ্ঠায় যান।
  2. + সংগ্রহস্থল তৈরি করুন বোতামে ক্লিক করুন।
  3. সংগ্রহস্থলের জন্য একটি নাম লিখুন। যেমন 'সার্ভিস-এক্সটেনশন-$PROJECT_ID'।
  4. ফর্ম্যাট - 'ডকার,' মোড - 'স্ট্যান্ডার্ড', অবস্থানের ধরন - 'অঞ্চল', এবং 'us-central1 (আইওয়া)' বেছে নিন
  5. CREATE বাটনে ক্লিক করুন।

b525b3bc0867dc42.png

সদ্য নির্মিত আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি রিসোর্স রিপোজিটরি পৃষ্ঠায় উপস্থিত হওয়া উচিত।

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

gcloud auth configure-docker $LOCATION-docker.pkg.dev

আউটপুট:

...
Adding credentials for: us-central1-docker.pkg.dev
Docker configuration file updated.

8. মিডিয়া CDN-এ পরিষেবা এক্সটেনশন কনফিগার করুন

এখন, আমরা দেখাব কিভাবে একটি সার্ভিস এক্সটেনশন (প্রক্সি-ওয়াসম) প্লাগইন লিখতে এবং তৈরি করতে হয় যা মিডিয়া সিডিএন-এ স্থাপন করা যেতে পারে, রাস্ট প্রোগ্রামিং ভাষা ব্যবহার করে।

এই উদাহরণে, আমরা একটি Proxy-Wasm প্লাগইন তৈরি করব যা প্রতিটি HTTP অনুরোধে "গোপন" মান সহ একটি অনুমোদন শিরোনাম রয়েছে তা যাচাই করে। অনুরোধে এই শিরোনামটি না থাকলে, প্লাগইনটি একটি HTTP 403 নিষিদ্ধ প্রতিক্রিয়া তৈরি করবে।

সার্ভিস এক্সটেনশনে একটি দ্রুত রিফ্রেশার- তিনটি মূল সংস্থান রয়েছে: WasmAction, WasmPlugin, এবং WasmPluginVersion।

  • একটি WasmAction সম্পদ হল যা আপনার মিডিয়া CDN EdgeCacheService-এর সাথে সংযুক্ত থাকে। একটি WasmAction একটি WasmPlugin সম্পদ উল্লেখ করে।
  • একটি WasmPlugin সম্পদের একটি প্রধান-সংস্করণ রয়েছে যা বর্তমান সক্রিয় WasmPluginVersion-এর সাথে মিলে যায়।
  • একটি WasmPluginVersions আর্টিফ্যাক্ট রেজিস্ট্রি থেকে একটি ধারক চিত্র উল্লেখ করে। আপনি আপনার প্রক্সি-ওয়াসম প্লাগইনগুলিতে পরিবর্তন করার সাথে সাথে আপনি বিভিন্ন WasmPlugin ভার্সন তৈরি করেন।

এই সংস্থানগুলির মধ্যে সম্পর্ক আরও ভালভাবে বোঝার জন্য অনুগ্রহ করে নীচের চিত্রটি উল্লেখ করুন।

22b3548b3a61c379.png

একটি সার্ভিস এক্সটেনশন প্লাগইন লিখুন এবং তৈরি করুন

  1. https://www.rust-lang.org/tools/install- এ নির্দেশাবলী অনুসরণ করে মরিচা টুলচেন ইনস্টল করুন।
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. এরপরে, নিম্নলিখিত কমান্ডটি চালিয়ে আপনার মরিচা টুলচেইনে Wasm সমর্থন যোগ করুন:
rustup target add wasm32-wasi
  1. my-wasm-plugin নামে একটি মরিচা প্যাকেজ তৈরি করুন:
cargo new --lib my-wasm-plugin

আউটপুট:

Created library `my-wasm-plugin` package
  1. my-wasm-plugin ডিরেক্টরিটি লিখুন এবং আপনার একটি Cargo.toml ফাইল এবং একটি src ডিরেক্টরি দেখতে হবে।
cd my-wasm-plugin
ls

আউটপুট:

Cargo.toml  src
  1. এরপর, Cargo.toml ফাইলটি সম্পাদনা করে আপনার মরিচা প্যাকেজ কনফিগার করুন। Cargo.toml ফাইলে [dependencies] লাইনের পরে, নিম্নলিখিত যোগ করুন:
proxy-wasm = "0.2"
log = "0.4"

[lib]
crate-type = ["cdylib"]

[profile.release]
lto = true
opt-level = 3
codegen-units = 1
panic = "abort"
strip = "debuginfo"
  1. আপনার সম্পাদনা করার পরে, Cargo.toml ফাইলটি মোটামুটি এরকম দেখতে হবে:
[package]
name = "my-wasm-plugin"
version = "0.1.0"
edition = "2021"

[dependencies]
proxy-wasm = "0.2"
log = "0.4"

[lib]
crate-type = ["cdylib"]

[profile.release]
lto = true
opt-level = 3
codegen-units = 1
panic = "abort"
strip = "debuginfo"
  1. । ক্লাউড শেলের src ডিরেক্টরির lib.rs ফাইলে sample_code ফাইলের সম্পূর্ণ বিষয়বস্তু অনুলিপি করুন।
  1. আপনার সম্পাদনা করার পরে, lib.rs ফাইলটি মোটামুটি এরকম দেখতে হবে:
use log::info;
use proxy_wasm::traits::*;
use proxy_wasm::types::*;

...

struct DemoPlugin;

impl HttpContext for DemoPlugin {
    fn on_http_request_headers(&mut self, _: usize, _: bool) -> Action {
        if self.get_http_request_header("Authorization") == Some(String::from("secret")) {
            info!("Access granted.");
            Action::Continue
        } else {
            self.send_http_response(403, vec![], Some(b"Access forbidden.\n"));
            Action::Pause
        }
    }
}

impl Context for DemoPlugin {}
  1. এখন যেহেতু আমরা Cargo.toml ম্যানিফেস্ট ফাইলটি কনফিগার করেছি এবং lib.rs ফাইলে আমাদের Proxy-Wasm কোড লিখেছি, আমরা আমাদের Proxy-Wasm প্লাগইন তৈরি করতে পারি।
cargo build --release --target wasm32-wasi

একবার বিল্ড সফলভাবে সম্পন্ন হলে, আপনি নীচের মত একটি বার্তা দেখতে পাবেন:

Finished release [optimized] target(s) in 1.01s

আসুন target ডিরেক্টরিটি যাচাই করি এবং তৈরি করা ফাইলগুলি পরীক্ষা করি:

ls ./target

আপনি নীচে দেখানো হিসাবে আউটপুট দেখতে পাবেন:

CACHEDIR.TAG release wasm32-wasi

আর্টিফ্যাক্ট রেজিস্ট্রিতে একটি প্রক্সি-ওয়াসম প্লাগইন প্রকাশ করুন

এখন, আমরা আমাদের প্রক্সি-ওয়াসম প্লাগইনটি আপনার তৈরি করা আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরিতে প্রকাশ করব যাতে এটি মিডিয়া CDN-এ স্থাপন করা যায়।

আমরা প্রথমে একটি কন্টেইনার ইমেজে প্রক্সি-ওয়াসম প্লাগইনগুলি প্যাকেজ করি।

  1. নিম্নলিখিত বিষয়বস্তু সহ একই ডিরেক্টরি my-wasm-pluginDockerfile নামে একটি ফাইল তৈরি করুন:
FROM scratch 
COPY target/wasm32-wasi/release/my_wasm_plugin.wasm plugin.wasm
  1. পরবর্তী, ধারক চিত্র তৈরি করুন:
docker build --no-cache --platform wasm -t my-wasm-plugin .

(শুধুমাত্র নন-x86 প্রসেসর) এর পরে, কন্টেইনার ইমেজ তৈরি করুন:

docker build --no-cache --platform wasm --provenance=false -t my-wasm-plugin . 

আউটপুট

[+] Building 0.2s (5/5) FINISHED                                     docker:default
...
  1. এরপরে, আপনার প্রক্সি-ওয়াসম প্লাগইনটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে প্রকাশ করুন বা "পুশ করুন"৷ আমরা আমাদের কন্টেইনার ইমেজকে 'prod' ট্যাগ দিয়ে ট্যাগ করব।
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

এখন আমরা এগিয়ে যাই এবং ট্যাগ করা 'prod' কন্টেইনার ইমেজটিকে রিপোজিটরিতে পুশ করি।

docker push $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

আউটপুট:

The push refers to repository 
...
8564ddd9910a: Pushed 
prod: digest: sha256:f3ae4e392eb45393bfd9c200cf8c0c261762f7f39dde5c7cd4b9a8951c6f2812 size: 525

এখন প্রক্সি-ওয়াসম প্লাগইনের কন্টেইনার ইমেজটি যাচাই করা যাক আর্টিফ্যাক্ট রেজিস্ট্রিতে সফলভাবে পুশ করা হয়েছে, আপনি একটি অনুরূপ আউটপুট দেখতে পাবেন:

gcloud artifacts docker images list $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin --include-tags

আউটপুট:

Listing items under project 
...
IMAGE                                         DIGEST           TAGS  CREATE_TIME          UPDATE_TIME
<LOCATION>-docker.pkg.dev/.../my-wasm-plugin  sha256:08c12...  prod  2021-11-10T23:31:27  2021-11-10T23:31:27

আপনার মিডিয়া CDN স্থাপনার সাথে একটি প্রক্সি-ওয়াসম প্লাগইন সংযুক্ত করুন৷

এখন আমরা আপনার মিডিয়া CDN স্থাপনার সাথে Proxy-Wasm প্লাগইন সংযুক্ত করতে প্রস্তুত।

Proxy-Wasm প্লাগইনগুলি EdgeCacheService রিসোর্সে মিডিয়া CDN রুটের সাথে যুক্ত।

  1. প্রথমত, আমরা আমাদের প্রক্সি-ওয়াসম প্লাগইনের জন্য একটি ওয়াসম-প্লাগইন রিসোর্স তৈরি করি।
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
  1. এর পরে, আমরা একটি WasmPluginVersion তৈরি করি।
gcloud alpha service-extensions wasm-plugin-versions create my-version-1 \
    --wasm-plugin=my-wasm-plugin-resource \
    --image="$LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod"
  1. এর পরে, আমরা আমাদের প্রক্সি-ওয়াসম প্লাগইনের মূল সংস্করণটি নির্দিষ্ট করি।
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version=my-version-1

এখন আসুন যাচাই করি যে প্রক্সি-ওয়াসম প্লাগইনটি সফলভাবে কনটেইনার ইমেজের সাথে যুক্ত ছিল আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরিতে থাকে, আপনি একটি অনুরূপ আউটপুট দেখতে পাবেন:

gcloud alpha service-extensions wasm-plugin-versions list --wasm-plugin=my-wasm-plugin-resource

আউটপুট:

NAME   WASM_IMAGE WASM_IMAGE_DIGEST CONFIG_SIZE  CONFIG_IMAGE CONFIG_IMAGE_DIGEST UPDATE_TIME                                            
c7cfa2 <LOCATION>-docker.pkg.dev/.../my-wasm-plugin@sha256:6d663... ... ... 
...
  1. এরপরে, আমরা একটি WasmAction রিসোর্স তৈরি করি যা আমাদের Wasm প্লাগইন রিসোর্সকে উল্লেখ করে।
gcloud alpha service-extensions wasm-actions create my-wasm-action-resource \
    --wasm-plugin=my-wasm-plugin-resource

আসুন WasmAction রিসোর্সটি সফলভাবে প্রক্সি-ওয়াসম প্লাগইনের সাথে যুক্ত ছিল তাও যাচাই করি, আপনার অনুরূপ আউটপুট দেখতে হবে:

gcloud alpha service-extensions wasm-actions list

আউটপুট:

NAME                                     WASMPLUGIN                                            
my-wasm-action-resource                  projects/805782461588/locations/global/wasmPlugins/myenvoyfilter-resource
...
  1. এখন, আমাদের মিডিয়া CDN EdgeCacheService-এর কনফিগারেশন রপ্তানি করতে হবে:
gcloud edge-cache services export media-cdn --destination=my-service.yaml
  1. তারপর, my-service.yaml ফাইলটি খুলুন এবং প্রদত্ত রুটের জন্য routeAction- এ একটি wasmAction যোগ করুন, যা আগে তৈরি করা WasmPlugin সম্পদের উল্লেখ করে।
wasmAction: "my-wasm-action-resource"
  1. আপনার সম্পাদনা করার পরে, my-service.yaml ফাইলটি মোটামুটি এরকম দেখতে হবে:
...

pathMatchers:
  - name: routes
    routeRules:
    - headerAction: {}
      matchRules:
      - prefixMatch: /
      origin: projects/<PROJECT_NUM>/locations/global/edgeCacheOrigins/cloud-storage-origin
      priority: '1'
      routeAction:
        cdnPolicy:
          cacheKeyPolicy: {}
          cacheMode: FORCE_CACHE_ALL
          defaultTtl: 3600s
          signedRequestMode: DISABLED
        wasmAction: "my-wasm-action-resource"
...
  1. তারপর, আমরা প্রক্সি-ওয়াসম কনফিগারেশনের সাথে আপডেট করা কনফিগারেশনটিকে my-service-with-wasm.yaml ফাইলে সংরক্ষণ করি।
  1. অবশেষে, আমরা উত্পাদন মিডিয়া CDN পরিবেশের জন্য আপডেট করা কনফিগারেশন আমদানি করি:
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml

9. মিডিয়া CDN-এ পরিষেবা এক্সটেনশন প্রক্সি-ওয়াসম প্লাগইন যাচাই করুন

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

curl -svo /dev/null "http://IP_ADDRESS/file.txt"

কমান্ড নিম্নলিখিত অনুরূপ আউটপুট উত্পাদন করা উচিত:

< HTTP/2 403 Forbidden
...
Access forbidden.
...

এখন, একটি অনুমোদন শিরোনাম এবং গোপনীয়তার মান দিয়ে অনুরোধটি আবার জারি করুন

curl -svo /dev/null "http://IP_ADDRESS/file.txt" -H "Authorization: secret"

কমান্ড নিম্নলিখিত অনুরূপ আউটপুট উত্পাদন করা উচিত:

< HTTP/2 200 OK
...
media-cdn-service-extensions-test
...

10. ঐচ্ছিক: প্রক্সি-ওয়াসম প্লাগইন পরিচালনা করা

একটি প্রক্সি-ওয়াসম প্লাগইন আপডেট করা হচ্ছে

আপনি যখন উন্নতি করবেন বা আপনার প্রক্সি-ওয়াসম প্লাগইনগুলিতে নতুন কার্যকারিতা যোগ করবেন, তখন আপনাকে আপনার আপডেট করা প্লাগইনগুলিকে মিডিয়া CDN-এ স্থাপন করতে হবে। নীচে, আমরা একটি প্লাগইনের একটি আপডেট সংস্করণ স্থাপন করার জন্য ধাপগুলি অতিক্রম করি৷

উদাহরণ স্বরূপ, নিচের মত কোড পরিবর্তন করে অনুমোদনের জন্য অন্য মানের বিপরীতে অনুমোদনের শিরোনাম মূল্যায়ন করতে আপনি নমুনা প্লাগইন কোড আপডেট করতে পারেন।

প্রথমে, নীচে দেখানো কোড দিয়ে src/lib.rs সোর্স ফাইলটি আপডেট করুন:

use log::{info, warn};
use proxy_wasm::traits::*;
use proxy_wasm::types::*;

...

struct DemoPlugin;

impl HttpContext for DemoPlugin {
    fn on_http_request_headers(&mut self, _: usize, _: bool) -> Action {
        if self.get_http_request_header("Authorization") == Some(String::from("another_secret")) {
            info!("Access granted.");
            Action::Continue
        } else {
            warn!("Access forbidden.");
            self.send_http_response(403, vec![], Some(b"Access forbidden.\n"));
            Action::Pause
        }
    }
}

impl Context for DemoPlugin {}

পরবর্তী, আপডেট করা প্লাগইন তৈরি, প্যাকেজ এবং প্রকাশ করুন:

cargo build --release --target wasm32-wasi
docker build --no-cache --platform wasm -t my-wasm-plugin .
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY/my-wasm-plugin:prod
docker push $LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY>/my-wasm-plugin:prod

কনটেইনার ইমেজটি আর্টিফ্যাক্ট রেজিস্ট্রিতে আপডেট হয়ে গেলে, আমাদের একটি নতুন WasmPluginVersion তৈরি করতে হবে এবং তারপরে নতুন সংস্করণটি উল্লেখ করতে WasmPlugin-এর প্রধান-সংস্করণ আপডেট করতে হবে।

gcloud alpha service-extensions wasm-plugin-versions create my-version-2 \
    --wasm-plugin=my-wasm-plugin-resource \
   --image="$LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY>/my-wasm-plugin:prod"
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version=my-version-2

এখন, আপনি আর্টিফ্যাক্ট রেজিস্ট্রি থেকে আমদানি করা কন্টেইনার ইমেজের সংস্করণটি সফলভাবে আপডেট করেছেন এবং আপনার মিডিয়া CDN স্থাপনায় লাইভ পুশ করেছেন।

পূর্ববর্তী সংস্করণে ফিরে আসছে৷

একটি প্লাগইনের পূর্ববর্তী সংস্করণে ফিরে যেতে, আপনি পূর্ববর্তী সংস্করণের উল্লেখ করতে Wasm প্লাগইন সংস্থান আপডেট করতে পারেন।

প্রথমত, আমরা উপলব্ধ সংস্করণগুলি তালিকাভুক্ত করি:

gcloud alpha service-extensions wasm-plugin-versions list --wasm-plugin=my-wasm-plugin-resource

আপনি আউটপুট দেখতে হবে:

NAME   WASM_IMAGE WASM_IMAGE_DIGEST CONFIG_SIZE  CONFIG_IMAGE CONFIG_IMAGE_DIGEST UPDATE_TIME                                            
c7cfa2 <LOCATION>-docker.pkg.dev/.../my-wasm-plugin@sha256:6d663... ... ... 
a2a8ce <LOCATION>-docker.pkg.dev/.../my-wasm-plugin@sha256:08c12... ... ... 

এর পরে, আমরা পূর্ববর্তী সংস্করণ "a2a8ce" উল্লেখ করতে Wasm প্লাগইন সংস্থান আপডেট করি:

$ gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version="a2a8ce"

অপারেশন সফল হলে, আপনি এই আউটপুট দেখতে হবে:

✓ WASM Plugin [my-wasm-plugin-resource] is now serving version "a2a8ce"

যেহেতু মিডিয়া CDN প্রতিবার একটি নতুন Wasm-প্লাগইন রিসোর্স তৈরি করার সময় আপনার ডকার ইমেজের ইমেজ ডাইজেস্ট সংরক্ষণ করে, রোলব্যাক আপনার কোডের সংস্করণ ব্যবহার করবে যা শেষ রোলআউটের আগে চলছিল।

gcloud alpha service-extensions wasm-plugins describe my-wasm-plugin-resource \
  --expand-config

"a2a8ce" সংস্করণের জন্য, এটি ডাইজেস্ট sha256:08c12 সহ সংস্করণ...:

name: "my-wasm-plugin-resource"
mainVersion: "a2a8ce"
mainVersionDetails:
  image: "<LOCATION>-docker.pkg.dev/<PROJECT>/<REPOSITORY>/my-wasm-plugin"
  imageDigest: "<LOCATION>-docker.pkg.dev/<PROJECT>/<REPOSITORY>/my-wasm-plugin@sha256:08c121dd7fd1e4d3a116a28300e9fc1fa41b2e9775620ebf3d96cb7119bd9976"

একটি WasmAction এবং WasmPlugin মুছে ফেলা হচ্ছে

একটি WasmAction, WasmPlugin এবং সংশ্লিষ্ট WasmPluginVersions মুছতে, অনুগ্রহ করে এই ধাপগুলি অনুসরণ করুন।

প্রথমে, আপনার মিডিয়া CDN EdgeCacheService কনফিগারেশনে WasmAction এর রেফারেন্সটি সরিয়ে দিন।

রেফারেন্স লাইন সরানো হবে:

wasmAction: "my-wasm-action-resource"

তারপরে, আমরা সম্পাদিত EdgeCacheService কনফিগারেশন আপডেট করি।

gcloud alpha edge-cache services import prod-media-service --source=my-service.yaml

এরপরে, আপনার WasmPlugin-এর প্রধান-সংস্করণ একটি খালি স্ট্রিং "" এ আপডেট করুন।

gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource --main-version=
""

অবশেষে, ক্রমানুসারে নীচের মুছে ফেলার পদক্ষেপগুলি সম্পাদন করুন।

gcloud alpha service-extensions wasm-actions delete my-wasm-action-resource

gcloud alpha service-extensions wasm-plugin-versions delete my-version \ --wasm-plugin=my-wasm-plugin-resource

gcloud alpha service-extensions wasm-plugins delete my-wasm-plugin-resource

11. ল্যাবের পরিবেশ পরিষ্কার করুন

আপনি কোডল্যাব সম্পূর্ণ করার পরে, ল্যাব সংস্থানগুলি পরিষ্কার করতে ভুলবেন না - অন্যথায় সেগুলি চলতে থাকবে এবং খরচ সংগ্রহ করতে থাকবে৷

নিম্নলিখিত কমান্ডগুলি মিডিয়া CDN EdgeCache পরিষেবা, EdgeCache কনফিগ এবং পরিষেবা এক্সটেনশন প্লাগইন মুছে ফেলবে৷ ক্রমানুসারে নীচের মুছে ফেলার পদক্ষেপগুলি সম্পাদন করুন।

gcloud edge-cache services delete media-cdn

gcloud edge-cache origins delete cloud-storage-origin

gcloud alpha service-extensions wasm-actions delete my-wasm-action-resource

gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource --main-version=""

gcloud alpha service-extensions wasm-plugin-versions delete my-version-1 --wasm-plugin=my-wasm-plugin-resource

gcloud alpha service-extensions wasm-plugins delete my-wasm-plugin-resource

gcloud artifacts repositories delete service-extension-$PROJECT_ID --location=$LOCATION

উপরের প্রতিটি কমান্ড আপনাকে সম্পদ মুছে ফেলার বিষয়টি নিশ্চিত করতে বলবে।

12. অভিনন্দন!

অভিনন্দন, আপনি মিডিয়া CDN কোডল্যাবে পরিষেবা এক্সটেনশন সম্পূর্ণ করেছেন!

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

  • অরিজিন হিসাবে সেট করা একটি ক্লাউড স্টোরেজ বাকেটের সাথে মিডিয়া সিডিএন কীভাবে সেট আপ করবেন
  • কীভাবে কাস্টম HTTP প্রমাণীকরণ সহ একটি পরিষেবা এক্সটেনশন প্লাগইন তৈরি করবেন এবং মিডিয়া CDN এর সাথে এটি সংযুক্ত করবেন
  • পরিষেবা এক্সটেনশন প্লাগইনটি প্রত্যাশিত হিসাবে কাজ করছে তা কীভাবে যাচাই করবেন
  • (ঐচ্ছিক) কীভাবে একটি পরিষেবা এক্সটেনশন প্লাগইন পরিচালনা করবেন যেমন আপডেট করা, রেফারেন্স করা, রোল ব্যাক করা এবং একটি নির্দিষ্ট প্লাগইন সংস্করণ মুছে ফেলা

এরপর কি?

এই কোডল্যাবগুলির কিছু পরীক্ষা করে দেখুন...

আরও পড়া

রেফারেন্স ডক্স