Lab: मीडिया सीडीएन पर सेवा एक्सटेंशन

1. परिचय

पिछली बार अपडेट किए जाने की तारीख: 01-05-2024

कॉन्टेंट डिलीवरी नेटवर्क (सीडीएन) से उपयोगकर्ताओं की परफ़ॉर्मेंस बेहतर होती है. इसके लिए, उपयोगकर्ताओं के अक्सर इस्तेमाल किए जाने वाले कॉन्टेंट को कैश मेमोरी में सेव किया जाता है. साथ ही, उपयोगकर्ताओं के सबसे करीब मौजूद कॉन्टेंट को कैश मेमोरी में सेव किया जाता है, क्लाइंट के साथ कनेक्शन को खत्म किया जाता है, ऑरिजिन से कनेक्शन फिर से इस्तेमाल किया जाता है, और आधुनिक नेटवर्किंग प्रोटोकॉल और कस्टमाइज़ेशन के ज़रिए ऐसा किया जाता है.

मीडिया सीडीएन, मीडिया स्ट्रीमिंग के लिए GCP का ग्लोबल एज नेटवर्क है. यह कई बिल्ट-इन या "कोर" सुविधाएं देता है सुविधाएं.मुख्य सुविधाएं, इस्तेमाल के सामान्य मामलों में काम आती हैं. हालांकि, ऐसा भी हो सकता है कि आपकी कुछ ऐसी शर्तें पूरी न की गई हों जो इस मुख्य सुविधा के सेट में शामिल हैं.

मीडिया सीडीएन के लिए सर्विस एक्सटेंशन, जिन्हें कभी-कभी एज प्रोग्रामेबिलिटी भी कहा जाता है. इनसे आपको मीडिया सीडीएन के व्यवहार को पसंद के मुताबिक बनाने के लिए, किनारे पर खुद का कोड चलाने की सुविधा मिलती है. इससे, इस्तेमाल के अन्य उदाहरण अनलॉक हो जाते हैं. इनमें कैश मेमोरी कुंजी को नॉर्मलाइज़ करना, कस्टम टोकन की पुष्टि करना, और टोकन रद्द करना, अतिरिक्त कस्टम लॉग फ़ील्ड, A/B टेस्टिंग, और कस्टम गड़बड़ी वाले पेज शामिल हैं.

आपको क्या बनाना होगा

इस कोड लैब में, हम आपको एज कंप्यूट की सुविधा वाले सीडीएन डिलीवरी एनवायरमेंट को डिप्लॉय करने का तरीका बताएंगे. इसके लिए, मीडिया सीडीएन (सीडीएन) और सर्विस एक्सटेंशन (Edge प्रोग्रामेबिलिटी) और Cloud Storage (सीडीएन का सोर्स) का इस्तेमाल करें.

1f19151bdd96acb0.png

आपको इनके बारे में जानकारी मिलेगी

  • ऑरिजिन के तौर पर सेट किए गए Cloud Storage बकेट के साथ मीडिया सीडीएन को सेट अप करने का तरीका
  • कस्टम एचटीटीपी की पुष्टि करने वाला सर्विस एक्सटेंशन प्लगिन बनाने और उसे Media CDN के साथ जोड़ने का तरीका
  • यह पुष्टि करने का तरीका कि सर्विस एक्सटेंशन प्लगिन उम्मीद के मुताबिक काम कर रहा है या नहीं
  • (ज़रूरी नहीं) सर्विस एक्सटेंशन प्लगिन को मैनेज करने का तरीका. जैसे, प्लगिन के किसी खास वर्शन को अपडेट करना, रेफ़र करना, रोल बैक करना, और मिटाना

आपको इन चीज़ों की ज़रूरत होगी

  • बुनियादी नेटवर्किंग और एचटीटीपी की जानकारी
  • Unix/Linux कमांड लाइन के बारे में बुनियादी जानकारी

2. शुरू करने से पहले

मीडिया सीडीएन के लिए अनुमति वाली सूची और सर्विस एक्सटेंशन की अनुमति वाली सूची

शुरू करने से पहले, आपको यह पक्का करना होगा कि आपके प्रोजेक्ट को मीडिया सीडीएन और मीडिया सीडीएन के लिए सर्विस एक्सटेंशन, दोनों के लिए 'निजी झलक' की अनुमति वाली सूची में जोड़ दिया गया हो.

  • अगर आपको मीडिया सीडीएन के लिए मीडिया सीडीएन और सर्विस एक्सटेंशन, दोनों का ऐक्सेस चाहिए, तो कृपया Google खाता मैनेज करने वाली अपनी टीम से संपर्क करें, ताकि आपकी ओर से मीडिया सीडीएन और सेवा एक्सटेंशन के लिए ऐक्सेस का अनुरोध किया जा सके

3. सेटअप और ज़रूरी शर्तें

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

GCP कंसोल में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

1dec6f9683153af0.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

de496bb88f9a0b10.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस लैब में आपका सारा काम बस एक ब्राउज़र से किया जा सकता है.

शुरू करने से पहले

आईएएम की भूमिकाएं और ऐक्सेस

Media CDN और Artifact Registry के संसाधनों को बनाने के लिए, पहचान और ऐक्सेस मैनेजमेंट (आईएएम) की ज़रूरी अनुमतियां इस तरह हैं:

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

पक्का करें कि Cloud Shell के अंदर आपका project_id, project_num, location, और repository एनवायरमेंट वैरिएबल सेट अप किए गए हों.

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

एपीआई चालू करना

मीडिया सीडीएन और चालू करें सर्विस एक्सटेंशन 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. Cloud Storage बकेट बनाना

मीडिया सीडीएन कॉन्टेंट, Cloud Storage बकेट, तीसरे पक्ष के स्टोरेज या किसी सार्वजनिक तौर पर ऐक्सेस किए जा सकने वाले एचटीटीपी(एचटीटीपीएस) एंडपॉइंट जैसी जगहों से जनरेट हो सकता है.

इस कोडलैब में, हम कॉन्टेंट को Cloud Storage बकेट में सेव करेंगे.

हम बकेट बनाने के लिए gsutil mb कमांड का इस्तेमाल करेंगे

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

इसके अलावा, यहां दिए गए तरीके का इस्तेमाल करके, Cloud Storage बकेट बनाया जा सकता है:

  1. Google Cloud Console में, Cloud Storage पेज पर जाएं.
  2. बनाएं बटन पर क्लिक करें.
  3. बकेट के लिए कोई नाम डालें. - उदाहरण के लिए, "mediacdn-bucket-$PROJECT_ID".
  4. बाकी सेटिंग को डिफ़ॉल्ट के तौर पर रहने दें.
  5. बनाएं बटन पर क्लिक करें.

50475e01c5a3adbe.png

5. Cloud Storage बकेट में टेस्ट ऑब्जेक्ट अपलोड करें

अब हम Cloud Storage बकेट में एक ऑब्जेक्ट अपलोड करेंगे.

  1. क्लाउड शेल में कोई फ़ाइल बनाएं. इसके बाद, gsutil का इस्तेमाल करके उसे बकेट में अपलोड करें
echo media-cdn-service-extensions-test > file.txt

gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
  1. बकेट को मीडिया सीडीएन का ऐक्सेस दें
gsutil iam ch \
serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID

6. मीडिया सीडीएन कॉन्फ़िगर करें

इसके बाद, हम एक Media CDN कॉन्फ़िगरेशन बनाएंगे.

हर मीडिया सीडीएन कॉन्फ़िगरेशन में दो मुख्य रिसॉर्स होते हैं:

  • EdgeCacheService, जो क्लाइंट-फ़ेसिंग कॉन्फ़िगरेशन (TLS, आईपी पतािंग), रूटिंग, सीडीएन कॉन्फ़िगरेशन (कैश मोड, टीटीएल, साइनिंग), और सुरक्षा नीतियों के लिए ज़िम्मेदार है.
  • EdgeCacheOrigin

Edge कैश ऑरिजिन को कॉन्फ़िगर करना

अब एक ऑरिजिन बनाते हैं, जो अभी-अभी बनाए गए Cloud Storage बकेट पर पॉइंट करता है.

  1. Google Cloud Console में, मीडिया सीडीएन पेज पर जाएं.
  2. ऑरिजिन टैब पर क्लिक करें.
  3. ऑरिजिन बनाएं पर क्लिक करें.
  4. ‘cloud-storage-origin' डालें का नाम एज कैश ऑरिजिन के लिए होता है.
  5. मूल पते के अंतर्गत:
  6. ‘Google Cloud Storage बकेट चुनें' को चुनें.
  7. BROWSE और Cloud Storage बकेट का नाम ‘mediacdn-bucket-$PROJECT_ID' का है.
  8. 'चुनें' पर क्लिक करें.
  9. बाकी सेटिंग को डिफ़ॉल्ट के तौर पर रहने दें.
  10. ऑरिजिन बनाएं पर क्लिक करें.

e6eb0faa94838c4.png

नया बनाया गया EdgecacheOrigin संसाधन, आपके प्रोजेक्ट के Origins पेज पर, ऑरिजिन की सूची में दिखता है.

Edge कैश सेवा कॉन्फ़िगर करना

  1. Google Cloud Console में, मीडिया सीडीएन पेज पर जाएं.
  2. सेवाएं टैब पर क्लिक करें.
  3. सेवा बनाएं पर क्लिक करें.
  4. अपनी सेवा के लिए कोई यूनीक नाम डालें. उदाहरण के लिए, ‘media-cdn' - और फिर 'आगे बढ़ें' पर क्लिक करें.

d2f9ac837bc5d45a.png

  1. रूटिंग सेक्शन में, होस्ट के लिए नियम जोड़ें पर क्लिक करें.
  2. वाइल्डकार्ड डालें - "*" होस्ट फ़ील्ड में.

25d3e25000934e59.png

  1. रूट नियम जोड़ें पर क्लिक करें.
  2. प्राथमिकता के लिए, "1" तय करें.
  3. मैच की शर्त जोड़ें पर क्लिक करें. इसके बाद, पाथ मैच के लिए, "प्रीफ़िक्स मैच" चुनें मिलान प्रकार के रूप में, "/" दर्ज करें और फिर 'हो गया' पर क्लिक करें.
  4. प्राइमरी कार्रवाई में, ऑरिजिन से फ़ेच करें को चुनें. इसके बाद, ड्रॉप-डाउन सूची में वह ऑरिजिन चुनें जिसे आपने कॉन्फ़िगर किया है.

d1975f366233521a.png

  1. कॉन्फ़िगरेशन के ज़्यादा विकल्प पाने के लिए, बेहतर कॉन्फ़िगरेशन पर क्लिक करें.
  2. 'रूट करें' कार्रवाई में, कोई आइटम जोड़ें पर क्लिक करें. इसके बाद, ये काम करें:
  3. टाइप के लिए, "सीडीएन नीति" को चुनें.
  4. कैश मोड के लिए, "सभी को ज़बरदस्ती कैश करें" चुनें.
  5. बाकी को डिफ़ॉल्ट के तौर पर रहने दें
  6. 'हो गया' पर क्लिक करें.
  7. सेव करें पर क्लिक करें.

b7e77d059db84ab6.png

  1. सेवा बनाएं पर क्लिक करें.

नया बनाया गया EdgecacheService संसाधन, सेवाएं पेज पर आपके प्रोजेक्ट में मौजूद सेवाओं की सूची में दिखता है.

MediaCDN का आईपी पता और टेस्टिंग को वापस पाना

  1. Google Cloud Console में, मीडिया सीडीएन पेज पर जाएं.
  2. Media 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
...

अब आपने Cloud Storage के ऑरिजिन के तौर पर MediaCDN डिप्लॉयमेंट बना लिया है.

7. सेवा एक्सटेंशन के लिए Artifact Registry कॉन्फ़िगर करना

सेवा एक्सटेंशन बनाने से पहले, हमें Artifact Registry को कॉन्फ़िगर करना होगा. Artifact Registry, Google Cloud का यूनिवर्सल पैकेज मैनेजर है. यह बिल्ड आर्टफ़ैक्ट को मैनेज करता है. सर्विस एक्सटेंशन (प्रॉक्सी-Wasm) प्लगिन, Artifact Registry पर पब्लिश किए जाते हैं. Artifact Registry में पब्लिश होने के बाद, आपके Media CDN के डिप्लॉयमेंट में प्रॉक्सी-Wasm प्लगिन को डिप्लॉय किया जा सकता है.

हम रिपॉज़िटरी बनाने के लिए gcloud आर्टफ़ैक्ट रिपॉज़िटरी create कमांड का इस्तेमाल करेंगे

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

इसके अलावा, जीयूआई का इस्तेमाल करके, डेटा स्टोर करने की जगह बनाई जा सकती है. इसके लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, Artifact Registry पेज पर जाएं.
  2. + डेटा स्टोर करने की जगह बनाएं बटन पर क्लिक करें.
  3. डेटा स्टोर करने की जगह के लिए कोई नाम डालें. उदाहरण के लिए, ‘service-extension-$PROJECT_ID'.
  4. फ़ॉर्मैट - ‘Docker' मोड - ‘स्टैंडर्ड’, जगह का टाइप - ‘क्षेत्र’, और ‘us-central1 (आयोवा)’ चुनें
  5. बनाएं बटन पर क्लिक करें.

b525b3bc0867dc42.png

नया बनाया गया Artifact Registry का डेटा स्टोर करने की जगह का संसाधन, डेटा स्टोर करने की जगहों के पेज पर दिखना चाहिए.

डेटा स्टोर करने की जगह का संसाधन बन जाने के बाद, Cloud Shell में नीचे दिया गया कमांड चलाएं. इससे अपने Cloud Shell के डॉकर क्लाइंट को कॉन्फ़िगर किया जा सकता है, ताकि इस डेटा स्टोर करने की जगह का इस्तेमाल करके पैकेज पुश और पुल किए जा सकें.

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

आउटपुट:

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

8. मीडिया सीडीएन पर सेवा एक्सटेंशन कॉन्फ़िगर करें

अब हम आपको सर्विस एक्सटेंशन (प्रॉक्सी-Wasm) प्लगिन लिखने और बनाने का तरीका बताएंगे. इस प्लगिन को रस्ट प्रोग्रामिंग लैंग्वेज का इस्तेमाल करके, Media CDN में डिप्लॉय किया जा सकता है.

इस उदाहरण में, हम एक Proxy-Wasm प्लगिन बनाएंगे, जो यह पुष्टि करेगा कि हर एचटीटीपी अनुरोध में "सीक्रेट" वैल्यू वाला एक ऑथराइज़ेशन हेडर शामिल है. अगर अनुरोध में यह हेडर शामिल नहीं है, तो प्लग इन, एचटीटीपी 403 'अनुमति नहीं है' रिस्पॉन्स जनरेट करेगा.

सर्विस एक्सटेंशन के बारे में एक क्विक रीफ़्रेशर- यहां तीन अहम संसाधन दिए गए हैं: WasmAction, WasmPlugin, और Wasmप्लगinVersion.

  • WasmAction संसाधन वह होता है जो आपके Media CDN EdgecacheService के साथ अटैच होता है. WasmAction का मतलब है Wasmप्लगिन संसाधन.
  • Wasmप्लग इन संसाधन का एक मुख्य वर्शन होता है, जो मौजूदा सक्रिय WasmplinVersion से मेल खाता है.
  • WasmplinVersions, Artifact Registry से मिली एक कंटेनर इमेज का रेफ़रंस देता है. अपने प्रॉक्सी-वासम प्लगिन में बदलाव करने पर, अलग-अलग Wasmप्लगिन वर्शन बनते हैं.

इन संसाधनों के बीच के संबंध को बेहतर ढंग से समझने के लिए, कृपया नीचे दिया गया डायग्राम देखें.

22b3548b3a61c379.png

सेवा एक्सटेंशन के लिए प्लगिन लिखना और बनाना

  1. https://www.rust-lang.org/tools/install पर दिए गए निर्देशों का पालन करके, Rust टूलचेन को इंस्टॉल करें.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. इसके बाद, यहां दिए गए निर्देश की मदद से, अपने Rust टूलचेन में 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 डायरेक्ट्री डालें. इसके बाद, आपको एक my-wasm-plugin फ़ाइल और एक my-wasm-plugin डायरेक्ट्री दिखेगी.
cd my-wasm-plugin
ls

आउटपुट:

Cargo.toml  src
  1. इसके बाद, Cargo.toml फ़ाइल में बदलाव करके अपने Rust पैकेज को कॉन्फ़िगर करें. 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. . Cloud Shell की 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 फ़ाइल में अपना प्रॉक्सी-Wasm कोड लिख लिया है , तो हम अपना प्रॉक्सी-Wasm प्लगिन बना सकते हैं.
cargo build --release --target wasm32-wasi

बिल्ड के पूरा हो जाने के बाद, आपको नीचे दिखाया गया मैसेज दिखेगा:

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

target डायरेक्ट्री की पुष्टि करके, फ़ाइलों के बनने की जांच भी करें:

ls ./target

आपको आउटपुट इस तरह दिखेगा:

CACHEDIR.TAG release wasm32-wasi

Artifact Registry में, प्रॉक्सी-Wasm प्लगिन पब्लिश करना

अब हम आपके बनाए गए Artifact Registry का डेटा स्टोर करने की जगह पर अपने Proxy-Wasm प्लगिन को पब्लिश करेंगे, ताकि उसे Media CDN के साथ डिप्लॉय किया जा सके.

हम पहले एक कंटेनर इमेज में, प्रॉक्सी-Wasm प्लगिन को पैकेज करते हैं.

  1. इसी डायरेक्ट्री में, Dockerfile नाम की फ़ाइल बनाएं my-wasm-plugin:
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. इसके बाद, पब्लिश करें या "पुश" करें Artifact Registry के लिए, आपका Proxy-Wasm प्लगिन भी होना ज़रूरी है. हम अपनी कंटेनर इमेज को 'प्रोडक्शन' में टैग करेंगे टैग के साथ जोड़ा जा सकता है.
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin: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

आइए, अब पुष्टि करते हैं कि Proxy-Wasm प्लगिन की कंटेनर इमेज को Artifact Registry में सफलतापूर्वक पुश किया गया था. अब आपको इससे मिलता-जुलता आउटपुट दिखेगा:

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

अपने Media CDN डिप्लॉयमेंट के साथ प्रॉक्सी-Wasm प्लगिन को जोड़ें

अब हम आपके मीडिया सीडीएन डिप्लॉयमेंट में प्रॉक्सी-Wasm प्लगिन को जोड़ने के लिए तैयार हैं.

प्रॉक्सी-Wasm प्लगिन, EdgecacheService संसाधन में मीडिया सीडीएन रूट से जुड़े होते हैं.

  1. सबसे पहले, हम अपने प्रॉक्सी-Wasm प्लगिन के लिए Wasm-प्लग इन संसाधन बनाते हैं.
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. इसके बाद, हम अपने Proxy-Wasm प्लगिन के लिए मुख्य वर्शन के बारे में बताते हैं.
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version=my-version-1

आइए, अब पुष्टि करते हैं कि प्रॉक्सी-Wasm प्लगिन को सही तरीके से कंटेनर इमेज से जोड़ा गया है, जो Artifact Registry का डेटा स्टोर करने की जगह में मौजूद है. अब आपको इससे मिलता-जुलता आउटपुट दिखेगा:

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. इसके बाद, हम Wasm प्लगिन संसाधन के बारे में बताने वाला एक WasmAction संसाधन बनाते हैं.
gcloud alpha service-extensions wasm-actions create my-wasm-action-resource \
    --wasm-plugin=my-wasm-plugin-resource

यह भी पुष्टि करें कि WasmAction संसाधन को Proxy-Wasm प्लगिन के साथ सही से जोड़ा गया था. ऐसे में, आपको इससे मिलता-जुलता आउटपुट दिखेगा:

gcloud alpha service-extensions wasm-actions list

आउटपुट:

NAME                                     WASMPLUGIN                                            
my-wasm-action-resource                  projects/805782461588/locations/global/wasmPlugins/myenvoyfilter-resource
...
  1. अब हमें अपने Media CDN EdgecacheService का कॉन्फ़िगरेशन एक्सपोर्ट करना है:
gcloud edge-cache services export media-cdn --destination=my-service.yaml
  1. इसके बाद, my-service.yaml फ़ाइल को खोलें और दिए गए रूट के लिए routeAction में vasmAction जोड़ें. इससे पता चलता है कि पहले कौनसे Wasmप्लग इन संसाधन का इस्तेमाल किया गया.
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. इसके बाद, हम अपडेट किए गए कॉन्फ़िगरेशन को प्रॉक्सी-Wasm कॉन्फ़िगरेशन की मदद से, my-service-with-wasm.yaml फ़ाइल में सेव कर देते हैं.
  1. आखिर में, हम प्रोडक्शन मीडिया सीडीएन एनवायरमेंट के लिए, अपडेट किया गया कॉन्फ़िगरेशन इंपोर्ट करते हैं:
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml

9. Media CDN पर सर्विस एक्सटेंशन प्रॉक्सी-Wasm प्लगिन की पुष्टि करें

यह देखने के लिए कि आपकी सेवा, कॉन्टेंट को कैश मेमोरी में सेव करने के लिए सही तरीके से कॉन्फ़िगर की गई है या नहीं, अनुरोध भेजने और रिस्पॉन्स की जांच करने के लिए कर्ल कमांड-लाइन टूल का इस्तेमाल करें.

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. ज़रूरी नहीं: प्रॉक्सी-Wasm प्लगिन मैनेज करना

प्रॉक्सी-Wasm प्लगिन को अपडेट करना

अपने प्रॉक्सी-Wasm प्लगिन में कोई सुधार करने या कोई नई सुविधा जोड़ने पर, आपको Media 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

Artifact Registry में एक बार कंटेनर इमेज अपडेट हो जाने के बाद, हमें एक नया WasmplinVersion बनाना होगा और फिर नए वर्शन का संदर्भ देने के लिए Wasmप्लग के मुख्य-वर्शन को अपडेट करना होगा.

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

अब आपने Artifact Registry से इंपोर्ट किए जाने वाले कंटेनर इमेज के वर्शन को अपडेट कर दिया है. साथ ही, उसे अपने मीडिया सीडीएन डिप्लॉयमेंट में लाइव कर दिया है.

पिछले वर्शन पर काम करता है

प्लगिन के पिछले वर्शन पर रोल बैक करने के लिए, 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... ... ... 

इसके बाद, हम Wasm प्लगिन रिसॉर्स को पिछले वर्शन "a2a8ce" का रेफ़रंस देने के लिए अपडेट करते हैं:

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

जब भी कोई नया Wasm-प्लग इन संसाधन बनाया जाता है, तब मीडिया CDN आपकी Docker इमेज के इमेज डाइजेस्ट को सेव करता है, इसलिए रोलबैक आपके कोड के उस वर्शन का इस्तेमाल करेगा जो आखिरी रोल आउट से पहले चल रहा था.

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"

WsmAction और WasmPlugin

WasmAction, Wasmप्लग इन, और उनसे जुड़े Wasmप्लगिन के वर्शन को मिटा सकते हैं. इसके लिए, कृपया यह तरीका अपनाएं.

सबसे पहले, अपने Media CDN EdgecacheService कॉन्फ़िगरेशन में WasmAction का रेफ़रंस हटाएं.

हटाई जाने वाली रेफ़रंस लाइन:

wasmAction: "my-wasm-action-resource"

इसके बाद, हम बदले गए EdgecacheService कॉन्फ़िगरेशन को अपडेट करते हैं.

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

इसके बाद, अपने Wasm आखिरी वर्शन के मुख्य वर्शन को खाली स्ट्रिंग "" में अपडेट करें.

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. लैब एनवायरमेंट को खाली करें

CodeLab को पूरा करने के बाद, लैब के संसाधनों को खाली करना न भूलें. ऐसा न करने पर, वे काम करते रहेंगे और लागत इकट्ठा करते रहेंगे.

नीचे दिए गए कमांड, Media CDN Edgeकैश सेवा, Edgeकैश कॉन्फ़िगरेशन, और सर्विस एक्सटेंशन प्लगिन को मिटा देंगे. डेटा मिटाने के लिए, नीचे दिया गया तरीका अपनाएं.

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. बधाई हो!

बधाई हो, आपने मीडिया सीडीएन कोडलैब पर सेवा एक्सटेंशन पूरा कर लिया है!

इसमें हमने इन विषयों के बारे में बताया

  • ऑरिजिन के तौर पर सेट किए गए Cloud Storage बकेट के साथ मीडिया सीडीएन को सेट अप करने का तरीका
  • कस्टम एचटीटीपी की पुष्टि करने वाला सर्विस एक्सटेंशन प्लगिन बनाने और उसे Media CDN के साथ जोड़ने का तरीका
  • यह पुष्टि करने का तरीका कि सर्विस एक्सटेंशन प्लगिन उम्मीद के मुताबिक काम कर रहा है या नहीं
  • (ज़रूरी नहीं) सेवा एक्सटेंशन प्लगिन को मैनेज करने का तरीका. जैसे, प्लगिन के किसी खास वर्शन को अपडेट करना, रेफ़र करना, रोल बैक करना, और मिटाना

आगे क्या होगा?

इनमें से कुछ कोडलैब देखें...

आगे पढ़ें

पहचान फ़ाइलें