Phòng thí nghiệm: Tiện ích dịch vụ trên CDN của nội dung nghe nhìn

1. Giới thiệu

Lần cập nhật gần đây nhất: Ngày 1 tháng 5 năm 2024

Mạng phân phối nội dung (CDN) cải thiện hiệu suất của người dùng bằng cách lưu vào bộ nhớ đệm nội dung thường xuyên được truy cập gần với người dùng cuối, chấm dứt các kết nối gần với máy khách, sử dụng lại các kết nối với nguồn gốc và thông qua việc áp dụng các giao thức mạng hiện đại cũng như các chế độ tuỳ chỉnh.

Media CDN, mạng biên toàn cầu của GCP để phát trực tuyến nội dung nghe nhìn, cung cấp nhiều chức năng tích hợp sẵn hoặc "cốt lõi". Các chức năng cốt lõi này nhằm giải quyết những trường hợp sử dụng phổ biến nhất, nhưng bạn cũng có thể có những yêu cầu không được giải quyết bằng bộ tính năng cốt lõi này.

Tiện ích mở rộng dịch vụ cho Media CDN (đôi khi còn được gọi là Khả năng lập trình biên) cho phép bạn chạy mã của riêng mình ở biên để tuỳ chỉnh hành vi của Media CDN. Điều này mở ra các trường hợp sử dụng bổ sung, từ chuẩn hoá khoá bộ nhớ đệm, xác thực mã thông báo tuỳ chỉnh và thu hồi mã thông báo, các trường nhật ký tuỳ chỉnh bổ sung, kiểm thử A/B và trang lỗi tuỳ chỉnh.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, chúng ta sẽ tìm hiểu các bước triển khai một môi trường phân phối CDN có hỗ trợ Điện toán biên bằng Media CDN (CDN) + Tiện ích dịch vụ (Khả năng lập trình biên) + Cloud Storage (nguồn của CDN).

1f19151bdd96acb0.png

Kiến thức bạn sẽ học được

  • Cách thiết lập Media CDN với một Nhóm Cloud Storage được đặt làm Nguồn
  • Cách tạo một trình bổ trợ Tiện ích mở rộng dịch vụ bằng phương thức xác thực HTTP tuỳ chỉnh và liên kết trình bổ trợ đó với Media CDN
  • Cách xác thực để đảm bảo trình bổ trợ Tiện ích dịch vụ hoạt động như mong đợi
  • (không bắt buộc) Cách quản lý một trình bổ trợ Tiện ích dịch vụ như cập nhật, tham chiếu, khôi phục và xoá một phiên bản trình bổ trợ cụ thể

Bạn cần có

  • Kiến thức cơ bản về Mạng và HTTP
  • Kiến thức cơ bản về dòng lệnh Unix/Linux

2. Trước khi bắt đầu

Yêu cầu đưa vào danh sách cho phép của Media CDN và danh sách cho phép của tiện ích mở rộng dịch vụ

Trước khi bắt đầu, bạn cần đảm bảo dự án của mình đã được thêm vào danh sách cho phép dùng bản dùng thử riêng tư cho cả Media CDN và Tiện ích dịch vụ cho Media CDN.

  • Để yêu cầu quyền truy cập vào cả Media CDN và Tiện ích mở rộng dịch vụ cho Media CDN, vui lòng liên hệ với Nhóm Tài khoản Google để tạo yêu cầu truy cập thay cho bạn đối với Media CDN và Tiện ích mở rộng dịch vụ

3. Thiết lập và yêu cầu

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

1dec6f9683153af0.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

de496bb88f9a0b10.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn chỉ cần một trình duyệt là có thể thực hiện mọi thao tác trong phòng thí nghiệm này.

Trước khi bắt đầu

Vai trò và quyền truy cập IAM

Sau đây là các quyền Quản lý danh tính và quyền truy cập (IAM) cần thiết để tạo tài nguyên Media CDN và Artifact Registry:

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

Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập các biến môi trường project_id, project_num, locationrepository.

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

Cho phép API

Bật Media CDN và Service Extensions API thông qua các lệnh bên dưới

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. Tạo một bộ chứa Cloud Storage

Nội dung trên CDN đa phương tiện có thể đến từ các vị trí như bộ chứa Cloud Storage, vị trí lưu trữ của bên thứ ba hoặc bất kỳ điểm cuối HTTP(HTTPS) nào có thể truy cập công khai.

Trong lớp học lập trình này, chúng ta sẽ lưu trữ nội dung trong một bộ chứa Cloud Storage.

Chúng ta sẽ dùng lệnh gsutil mb để tạo vùng chứa

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

Nếu muốn, bạn có thể tạo một vùng chứa Cloud Storage bằng GUI như sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Cloud Storage.
  2. Nhấp vào nút TẠO.
  3. Nhập tên cho nhóm. – tức là "mediacdn-bucket-$PROJECT_ID".
  4. Giữ nguyên các chế độ cài đặt còn lại theo mặc định.
  5. Nhấp vào nút TẠO.

50475e01c5a3adbe.png

5. Tải một đối tượng kiểm thử lên Bộ chứa Cloud Storage

Bây giờ, chúng ta sẽ tải một đối tượng lên bộ chứa Cloud Storage.

  1. Tạo một tệp trong Cloud Shell rồi tải tệp đó lên bộ chứa bằng gsutil
echo media-cdn-service-extensions-test > file.txt

gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
  1. Cấp quyền truy cập vào bộ chứa cho CDN nội dung nghe nhìn
gsutil iam ch \
serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID

6. Định cấu hình Media CDN

Tiếp theo, chúng ta sẽ tạo một cấu hình CDN cho nội dung nghe nhìn.

Mỗi cấu hình Media CDN bao gồm 2 tài nguyên chính:

  • EdgeCacheService, chịu trách nhiệm về cấu hình hướng đến khách hàng (TLS, địa chỉ IP), định tuyến, cấu hình CDN (chế độ bộ nhớ đệm, TTL, ký) và chính sách bảo mật.
  • EdgeCacheOrigin, chịu trách nhiệm về cấu hình theo nguồn gốc cho mọi nguồn gốc dựa trên HTTP, cũng như các điều kiện thử lại khi nội dung không có sẵn hoặc không truy cập được.

Định cấu hình Nguồn gốc bộ nhớ đệm biên

Bây giờ, hãy tạo một nguồn trỏ đến bộ chứa Cloud Storage mà bạn vừa tạo.

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Media CDN.
  2. Nhấp vào thẻ ORIGINS (Nguồn gốc).
  3. Nhấp vào TẠO NGUỒN.
  4. Nhập 'cloud-storage-origin' làm tên cho nguồn gốc bộ nhớ đệm biên.
  5. Trong phần Địa chỉ của máy chủ gốc:
  6. chọn "Chọn một bộ chứa Google Cloud Storage".
  7. DUYỆT đến bộ chứa Cloud Storage có tên "mediacdn-bucket-$PROJECT_ID".
  8. nhấp vào CHỌN.
  9. Giữ nguyên các chế độ cài đặt còn lại theo mặc định.
  10. Nhấp vào TẠO NGUỒN.

e6eb0faa94838c4.png

Tài nguyên EdgeCacheOrigin mới tạo sẽ xuất hiện trong danh sách các nguồn gốc trong dự án của bạn trên trang Nguồn gốc.

Định cấu hình Dịch vụ lưu vào bộ nhớ đệm biên

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Media CDN.
  2. Nhấp vào thẻ DỊCH VỤ.
  3. Nhấp vào TẠO DỊCH VỤ.
  4. Nhập một tên riêng biệt cho dịch vụ của bạn (ví dụ: "media-cdn") rồi nhấp vào Tiếp theo.

d2f9ac837bc5d45a.png

  1. Trong phần Định tuyến, hãy nhấp vào THÊM QUY TẮC VỀ MÁY CHỦ LƯU TRỮ.
  2. Nhập ký tự đại diện "*" vào trường Máy chủ lưu trữ.

25d3e25000934e59.png

  1. Nhấp vào THÊM QUY TẮC ĐỊNH TUYẾN.
  2. Đối với Mức độ ưu tiên, hãy chỉ định "1".
  3. Nhấp vào THÊM ĐIỀU KIỆN KHỚP, đối với điều kiện khớp Đường dẫn, hãy chọn "Khớp tiền tố" làm Kiểu khớp, chỉ định "/" trong trường Đường dẫn khớp, rồi nhấp vào Xong.
  4. Chọn Tìm nạp từ một nguồn trong phần Thao tác chính, rồi chọn nguồn mà bạn đã định cấu hình trong danh sách thả xuống.

d1975f366233521a.png

  1. Nhấp vào CẤU HÌNH NÂNG CAO để mở rộng các lựa chọn cấu hình khác.
  2. Trong thao tác Lộ trình, hãy nhấp vào THÊM MỤC. Sau đó, hãy làm như sau:
  3. Đối với Loại, hãy chọn "Chính sách CDN".
  4. Đối với chế độ Bộ nhớ đệm, hãy chọn "Force cache all" (Buộc lưu vào bộ nhớ đệm tất cả).
  5. Giữ nguyên các chế độ cài đặt còn lại theo mặc định
  6. Nhấp vào Xong.
  7. Nhấp vào Lưu.

b7e77d059db84ab6.png

  1. Nhấp vào TẠO DỊCH VỤ.

Tài nguyên EdgeCacheService mới tạo sẽ xuất hiện trên trang Dịch vụ trong danh sách dịch vụ của dự án.

Truy xuất địa chỉ IP MediaCDN và Kiểm thử

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Media CDN.
  2. Chuyển đến Media CDN
  3. Nhấp vào thẻ Dịch vụ.
  4. Đối với dịch vụ của bạn, hãy xem cột Địa chỉ.

4031b6d1eac89041.png

Để kiểm tra xem dịch vụ của bạn đã được định cấu hình đúng cách để lưu nội dung vào bộ nhớ đệm hay chưa, hãy dùng công cụ dòng lệnh curl để đưa ra yêu cầu và kiểm tra các phản hồi.

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

Lệnh này sẽ tạo ra kết quả tương tự như sau:

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

Giờ đây, bạn đã tạo thành công một chế độ triển khai MediaCDN có Cloud Storage làm Nguồn.

7. Định cấu hình Artifact Registry cho Tiện ích dịch vụ

Trước khi tạo Tiện ích dịch vụ, chúng ta cần định cấu hình Artifact Registry. Artifact Registry là trình quản lý gói chung của Google Cloud để quản lý các cấu phần phần mềm bản dựng. Các trình bổ trợ Tiện ích dịch vụ (Proxy-Wasm) được xuất bản lên Artifact Registry. Sau khi được xuất bản lên Artifact Registry, các trình bổ trợ Proxy-Wasm có thể được triển khai cho việc triển khai Media CDN của bạn.

Chúng ta sẽ dùng lệnh gcloud artifacts repositories create để tạo kho lưu trữ

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

Nếu muốn, bạn có thể tạo một Kho lưu trữ bằng GUI như sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Artifact Registry.
  2. Nhấp vào nút + CREATE REPOSITORY (TẠO KHO LƯU TRỮ).
  3. Nhập Tên cho kho lưu trữ, tức là "service-extension-$PROJECT_ID".
  4. Định dạng – “Docker”, Chế độ – “Tiêu chuẩn”, Loại vị trí – “Khu vực” và chọn “us-central1 (Iowa)”
  5. Nhấp vào nút TẠO.

b525b3bc0867dc42.png

Tài nguyên Kho lưu trữ Artifact Registry vừa tạo sẽ xuất hiện trên trang Kho lưu trữ.

Sau khi tạo Tài nguyên kho lưu trữ, hãy chạy lệnh sau trong Cloud Shell để định cấu hình ứng dụng docker Cloud Shell nhằm đẩy và kéo các gói bằng kho lưu trữ này.

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

Kết quả:

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

8. Định cấu hình Tiện ích dịch vụ trên Media CDN

Giờ đây, chúng ta sẽ minh hoạ cách viết và tạo một trình bổ trợ Tiện ích mở rộng dịch vụ (Proxy-Wasm) có thể triển khai cho Media CDN bằng ngôn ngữ lập trình Rust.

Trong ví dụ này, chúng ta sẽ tạo một trình bổ trợ Proxy-Wasm để xác minh rằng mỗi yêu cầu HTTP đều chứa một tiêu đề Authorization có giá trị là "secret". Nếu yêu cầu không chứa tiêu đề này, thì trình bổ trợ sẽ tạo ra một phản hồi HTTP 403 Bị cấm.

Thông tin tóm tắt nhanh về Tiện ích dịch vụ – có 3 tài nguyên chính: WasmAction, WasmPlugin và WasmPluginVersion.

  • Tài nguyên WasmAction là tài nguyên được đính kèm vào EdgeCacheService của CDN Cloud Media. WasmAction tham chiếu đến tài nguyên WasmPlugin.
  • Tài nguyên WasmPlugin có một phiên bản chính tương ứng với WasmPluginVersion đang hoạt động hiện tại.
  • WasmPluginVersions tham chiếu một hình ảnh vùng chứa từ Artifact Registry. Khi thực hiện các thay đổi đối với các trình bổ trợ proxy-wasm, bạn sẽ tạo các WasmPluginVersion khác nhau.

Vui lòng tham khảo sơ đồ bên dưới để hiểu rõ hơn về mối quan hệ giữa các tài nguyên này.

22b3548b3a61c379.png

Viết và tạo một trình bổ trợ Tiện ích dịch vụ

  1. Cài đặt bộ công cụ Rust bằng cách làm theo hướng dẫn tại https://www.rust-lang.org/tools/install.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. Tiếp theo, hãy thêm tính năng hỗ trợ Wasm vào chuỗi công cụ Rust bằng cách chạy lệnh sau:
rustup target add wasm32-wasi
  1. Tạo một gói Rust có tên là my-wasm-plugin:
cargo new --lib my-wasm-plugin

Kết quả:

Created library `my-wasm-plugin` package
  1. Nhập thư mục my-wasm-plugin, bạn sẽ thấy một tệp Cargo.toml và một thư mục src.
cd my-wasm-plugin
ls

Kết quả:

Cargo.toml  src
  1. Tiếp theo, hãy định cấu hình gói Rust bằng cách chỉnh sửa tệp Cargo.toml. Sau dòng [dependencies] trong tệp Cargo.toml, hãy thêm nội dung sau:
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. Sau khi bạn chỉnh sửa, tệp Cargo.toml sẽ có dạng như sau:
[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. . Sao chép toàn bộ nội dung của tệp sample_code vào tệp lib.rs trong thư mục src trong Cloud Shell.
  1. Sau khi bạn chỉnh sửa, tệp lib.rs sẽ có dạng như sau:
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. Bây giờ, chúng ta đã định cấu hình tệp kê khai Cargo.toml và viết mã Proxy-Wasm trong tệp lib.rs, chúng ta có thể tạo trình bổ trợ Proxy-Wasm.
cargo build --release --target wasm32-wasi

Sau khi bản dựng hoàn tất thành công, bạn sẽ thấy một thông báo như sau:

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

Hãy xác minh thư mục target và kiểm tra các tệp đã được tạo:

ls ./target

Bạn sẽ thấy kết quả như dưới đây:

CACHEDIR.TAG release wasm32-wasi

Xuất bản một trình bổ trợ Proxy-Wasm lên Artifact Registry

Bây giờ, chúng ta sẽ xuất bản trình bổ trợ Proxy-Wasm vào Kho lưu trữ Artifact Registry mà bạn đã tạo trước đó để có thể triển khai trình bổ trợ này vào Media CDN.

Trước tiên, chúng ta đóng gói các trình bổ trợ Proxy-Wasm trong một hình ảnh vùng chứa.

  1. Tạo một tệp có tên là Dockerfile trong cùng thư mục my-wasm-plugin, với nội dung sau:
FROM scratch 
COPY target/wasm32-wasi/release/my_wasm_plugin.wasm plugin.wasm
  1. Tiếp theo, hãy tạo hình ảnh vùng chứa:
docker build --no-cache --platform wasm -t my-wasm-plugin .

(chỉ dành cho bộ xử lý không phải x86) Tiếp theo, hãy tạo hình ảnh vùng chứa:

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

Đầu ra

[+] Building 0.2s (5/5) FINISHED                                     docker:default
...
  1. Tiếp theo, hãy xuất bản hoặc "đẩy" trình bổ trợ Proxy-Wasm của bạn lên Artifact Registry. Chúng ta sẽ gắn thẻ "prod" cho hình ảnh vùng chứa.
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

Bây giờ, chúng ta sẽ tiếp tục và đẩy hình ảnh vùng chứa "prod" được gắn thẻ vào kho lưu trữ.

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

Kết quả:

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

Bây giờ, hãy xác minh rằng hình ảnh vùng chứa của trình bổ trợ Proxy-Wasm đã được đẩy thành công vào Artifact Registry. Bạn sẽ thấy kết quả tương tự như sau:

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

Kết quả:

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

Liên kết một trình bổ trợ Proxy-Wasm với việc triển khai Media CDN

Giờ đây, chúng ta đã sẵn sàng liên kết trình bổ trợ Proxy-Wasm với việc triển khai CDN nội dung nghe nhìn.

Các trình bổ trợ Proxy-Wasm được liên kết với các tuyến Media CDN trong tài nguyên EdgeCacheService.

  1. Trước tiên, chúng ta sẽ tạo một tài nguyên Wasm-plugin cho trình bổ trợ Proxy-Wasm.
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
  1. Tiếp theo, chúng ta sẽ tạo một 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. Tiếp theo, chúng ta chỉ định phiên bản chính cho trình bổ trợ Proxy-Wasm.
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version=my-version-1

Bây giờ, hãy xác minh rằng trình bổ trợ Proxy-Wasm đã được liên kết thành công với Hình ảnh vùng chứa nằm trong Kho lưu trữ Artifact Registry. Bạn sẽ thấy một kết quả tương tự như sau:

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

Kết quả:

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. Tiếp theo, chúng ta sẽ tạo một tài nguyên WasmAction tham chiếu đến tài nguyên trình bổ trợ Wasm.
gcloud alpha service-extensions wasm-actions create my-wasm-action-resource \
    --wasm-plugin=my-wasm-plugin-resource

Hãy xác minh rằng tài nguyên WasmAction đã được liên kết thành công với trình bổ trợ Proxy-Wasm. Bạn sẽ thấy kết quả tương tự như sau:

gcloud alpha service-extensions wasm-actions list

Kết quả:

NAME                                     WASMPLUGIN                                            
my-wasm-action-resource                  projects/805782461588/locations/global/wasmPlugins/myenvoyfilter-resource
...
  1. Bây giờ, chúng ta cần xuất cấu hình của Media CDN EdgeCacheService:
gcloud edge-cache services export media-cdn --destination=my-service.yaml
  1. Sau đó, hãy mở tệp my-service.yaml và thêm một wasmAction vào routeAction cho tuyến đường đã cho, tham chiếu đến tài nguyên WasmPlugin đã tạo trước đó.
wasmAction: "my-wasm-action-resource"
  1. Sau khi bạn chỉnh sửa, tệp my-service.yaml sẽ có dạng như sau:
...

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. Sau đó, chúng ta lưu cấu hình đã cập nhật bằng cấu hình Proxy-Wasm vào tệp my-service-with-wasm.yaml.
  1. Cuối cùng, chúng ta nhập cấu hình đã cập nhật cho môi trường Media CDN phát hành công khai:
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml

9. Xác thực trình bổ trợ Service Extensions Proxy-Wasm trên Media CDN

Để kiểm tra xem dịch vụ của bạn đã được định cấu hình đúng cách để lưu nội dung vào bộ nhớ đệm hay chưa, hãy dùng công cụ dòng lệnh curl để đưa ra yêu cầu và kiểm tra các phản hồi.

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

Lệnh này sẽ tạo ra kết quả tương tự như sau:

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

Bây giờ, hãy đưa ra yêu cầu lại bằng tiêu đề Uỷ quyền và giá trị của tiêu đề đó là bí mật

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

Lệnh này sẽ tạo ra kết quả tương tự như sau:

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

10. Không bắt buộc: Quản lý các trình bổ trợ Proxy-Wasm

Cập nhật một trình bổ trợ Proxy-Wasm

Khi cải thiện hoặc thêm chức năng mới vào các trình bổ trợ Proxy-Wasm, bạn sẽ cần triển khai các trình bổ trợ đã cập nhật cho Media CDN. Dưới đây là các bước để triển khai phiên bản mới của một trình bổ trợ.

Ví dụ: bạn có thể cập nhật mã trình bổ trợ mẫu để đánh giá tiêu đề Uỷ quyền dựa trên một giá trị khác để xác thực, bằng cách sửa đổi mã như sau.

Trước tiên, hãy cập nhật tệp nguồn src/lib.rs bằng mã bên dưới:

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 {}

Tiếp theo, hãy tạo, đóng gói và xuất bản trình bổ trợ đã cập nhật:

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

Sau khi cập nhật hình ảnh vùng chứa trong Artifact Registry, chúng ta cần tạo một WasmPluginVersion mới, sau đó cập nhật –main-version của WasmPlugin để tham chiếu đến phiên bản mới.

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

Giờ đây, bạn đã cập nhật thành công phiên bản của hình ảnh vùng chứa cần nhập từ Artifact Registry và chuyển trực tiếp đến việc triển khai Media CDN.

Quay lại phiên bản trước

Để quay lại phiên bản trước của một trình bổ trợ, bạn có thể cập nhật tài nguyên trình bổ trợ Wasm để tham chiếu đến một phiên bản trước.

Trước tiên, chúng ta liệt kê các phiên bản có sẵn:

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

Bạn sẽ thấy kết quả sau:

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... ... ... 

Tiếp theo, chúng ta cập nhật tài nguyên trình bổ trợ Wasm để tham chiếu đến phiên bản trước, "a2a8ce":

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

Sau khi thao tác thành công, bạn sẽ thấy kết quả sau:

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

Vì Media CDN lưu trữ chuỗi đại diện hình ảnh của hình ảnh Docker mỗi khi một tài nguyên trình bổ trợ Wasm mới được tạo, nên quá trình khôi phục sẽ sử dụng phiên bản mã đang chạy trước lần phát hành gần đây nhất.

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

Đối với phiên bản "a2a8ce", đó là phiên bản có thông báo 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"

Xoá WasmAction và WasmPlugin

Để xoá WasmAction, WasmPlugin và WasmPluginVersions được liên kết, vui lòng làm theo các bước sau.

Trước tiên, hãy xoá tham chiếu đến WasmAction trong cấu hình Media CDN EdgeCacheService.

Đường kẻ tham chiếu cần xoá:

wasmAction: "my-wasm-action-resource"

Sau đó, chúng ta cập nhật cấu hình EdgeCacheService đã chỉnh sửa.

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

Tiếp theo, hãy cập nhật phiên bản chính của WasmPlugin thành một chuỗi trống "".

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

Cuối cùng, hãy thực hiện các bước xoá bên dưới theo thứ tự.

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. Dọn dẹp môi trường Lab

Sau khi hoàn thành Lớp học lập trình, đừng quên dọn dẹp các tài nguyên của lớp học lập trình. Nếu không, các tài nguyên này sẽ tiếp tục chạy và tích luỹ chi phí.

Các lệnh sau đây sẽ xoá Dịch vụ EdgeCache của Media CDN, EdgeCache Config và Trình bổ trợ Tiện ích dịch vụ. Hãy thực hiện các bước xoá bên dưới theo thứ tự.

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

Mỗi lệnh ở trên sẽ yêu cầu bạn xác nhận việc xoá tài nguyên.

12. Xin chúc mừng!

Xin chúc mừng, bạn đã hoàn tất lớp học lập trình Tiện ích mở rộng dịch vụ trên Media CDN!

Nội dung đã đề cập

  • Cách thiết lập Media CDN với một Nhóm Cloud Storage được đặt làm Nguồn
  • Cách tạo một trình bổ trợ Tiện ích mở rộng dịch vụ bằng phương thức xác thực HTTP tuỳ chỉnh và liên kết trình bổ trợ đó với Media CDN
  • Cách xác thực để đảm bảo trình bổ trợ Tiện ích dịch vụ hoạt động như mong đợi
  • (không bắt buộc) Cách quản lý một trình bổ trợ Tiện ích dịch vụ như cập nhật, tham chiếu, khôi phục và xoá một phiên bản trình bổ trợ cụ thể

Tiếp theo là gì?

Hãy xem một số lớp học lập trình này...

Tài liệu đọc thêm

Tài liệu tham khảo