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: 01/05/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 nội dung thường được truy cập vào bộ nhớ đệm cho gần người dùng cuối hơn, chấm dứt các kết nối gần máy khách hơn, sử dụng lại kết nối tới nguồn gốc và thông qua việc áp dụng các giao thức mạng và tuỳ chỉnh hiện đại.

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

Tiện ích dịch vụ cho CDN truyền thông, đôi khi còn được gọi là Khả năng lập trình của Edge, cho phép bạn chạy mã của riêng mình ở vùng biên để tuỳ chỉnh hành vi của CDN truyền thông. Việc này cho phép bạn sử dụng các trường hợp khác, từ việc chuẩn hoá khoá bộ nhớ đệm, xác thực và thu hồi mã thông báo tuỳ chỉnh, các trường nhật ký tuỳ chỉnh bổ sung, thử nghiệm 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ôi trường phân phối CDN có hỗ trợ Điện toán cạnh máy tính bằng CDN (CDN) + Tiện ích dịch vụ (Edge Programmability) + Cloud Storage (nguồn của CDN).

1f19151bdd96acb0.pngs

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

  • Cách thiết lập CDN của nội dung nghe nhìn với bộ chứa Cloud Storage được đặt là Origin
  • Cách tạo trình bổ trợ Tiện ích dịch vụ với phương thức xác thực HTTP tuỳ chỉnh và liên kết trình bổ trợ này với CDN của nội dung đa phương tiện
  • Cách xác thực xem trình bổ trợ Tiện ích dịch vụ có đang hoạt động như mong đợi không
  • (không bắt buộc) Cách quản lý 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ó

  • Kết nối mạng cơ bản và kiến thức cơ bản 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 danh sách cho phép CDN truyền thông và Danh sách các tiện ích dịch vụ được cho phép

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 xem trước ở chế độ riêng tư đối với cả CDN truyền thông và Tiện ích dịch vụ cho CDN truyền thông.

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

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

Khởi động Cloud Shell

Mặc dù bạn 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 trong Đám mây.

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

1dec6f9683153af0.pngS

Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:

de496bb88f9a0b10.png

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt.

Trước khi bắt đầu

Vai trò và vai trò trong IAM Quyền truy cập

Dưới đâ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à Sổ đăng ký cấu phần phần mềm:

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

Bên trong Cloud Shell, hãy nhớ 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 CDN của nội dung nghe nhìn và API Tiện ích dịch vụ 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 bộ chứa Cloud Storage

Nội dung CDN của nội dung nghe nhìn có thể bắt nguồn từ các vị trí như bộ chứa Cloud Storage, vị trí bộ nhớ 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 tôi sẽ sử dụng lệnh YT mb để tạo nhóm

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

Nếu muốn, bạn có thể tạo một bộ chứa Cloud Storage bằng GUI (Giao diện người dùng đồ hoạ) 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 bộ chứa. – ví dụ: "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.pngS

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 tệp trong Cloud shell, sau đó 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 CDN của nội dung nghe nhìn vào bộ chứa
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 CDN của nội dung nghe nhìn

Tiếp theo, chúng ta sẽ tạo một cấu hình CDN truyền thông.

Mỗi cấu hình CDN của nội dung nghe nhìn bao gồm hai tài nguyên chính:

  • EdgeCacheService, chịu trách nhiệm về cấu hình dành cho máy khách (TLS, địa chỉ IP), định tuyến, cấu hình CDN (chế độ bộ nhớ đệm, TTL, ký) và các chính sách bảo mật.
  • EdgeCacheOrigin, chịu trách nhiệm về cấu hình theo từng 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 không có nội dung hoặc không truy cập được.

Định cấu hình một nguồn gốc cho bộ nhớ đệm của Edge

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

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Mạng phân phối nội dung đa phương tiện (CDN).
  2. Nhấp vào thẻ XUẤT BẢN.
  3. Nhấp vào TẠO GỐC.
  4. Nhập "cloud-storage-origin" làm tên cho nguồn gốc của bộ nhớ đệm cạnh.
  5. Trong phần Địa chỉ máy chủ gốc:
  6. hãy chọn "Chọn bộ chứa Google Cloud Storage".
  7. DUYỆT QUA bộ chứa Cloud Storage có tên là "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 GỐC.

e6eb0faa94838c4.png

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

Định cấu hình Dịch vụ bộ nhớ đệm của Edge

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Mạng phân phối nội dung đa phương tiện (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 mục Định tuyến, hãy nhấp vào THÊM QUY TẮC MÁY CHỦ.
  2. Nhập ký tự đại diện – "*" trong trường Máy chủ lưu trữ.

25d3e25000934e59.png.

  1. Nhấp vào THÊM QUY TẮC ĐỊNH ĐƯỜNG.
  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 PHÙ HỢP. Đối với Kiểu khớp đường dẫn, hãy chọn "Khớp tiền tố" làm Loại đối sánh, hãy chỉ định "/" trong trường Khớp đường dẫn, rồi nhấp vào Xong.
  4. Chọn Tìm nạp từ một nguồn gốc trong phần Hành động chính, sau đó chọn điểm khởi hành mà bạn đã thiết lập 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 hành động về Tuyến đường, hãy nhấp vào THÊM MỘT MỤC. Sau đó, hãy làm như sau:
  3. Trong phần Loại, hãy chọn "Chính sách CDN".
  4. Đối với chế độ Bộ nhớ đệm, hãy chọn "Buộc lưu vào bộ nhớ đệm tất cả".
  5. Giữ phần còn lại như 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ụ trong dự án của bạn.

Truy xuất địa chỉ IP MediaCDN và hoạt động kiểm thử

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Mạng phân phối nội dung đa phương tiện (CDN).
  2. Chuyển đến CDN của nội dung nghe nhìn
  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.pngS

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

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

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

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

Lúc này, bạn đã tạo thành công một quy trình triển khai MediaCDN với Cloud Storage làm nguồn gốc.

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 dùng để quản lý các cấu phần phần mềm của 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 phát hành lên Artifact Registry, các trình bổ trợ Proxy- Wasm có thể được triển khai cho quá trình triển khai Media CDN của bạn.

Chúng ta sẽ dùng lệnh gcloudArtifact Repository để 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 cách sử dụng GUI như sau:

  1. Trong bảng điều khiển Google Cloud, hãy truy cập vào trang Artifact Registry.
  2. Nhấp vào nút + TẠO KHỐI LƯỢNG.
  3. Nhập Tên cho kho lưu trữ. Ví dụ: "service-extension-$PROJECT_ID".
  4. Định dạng – "Docker", Chế độ – "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 mới được 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 Cloud Shell docker của bạn 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 CDN của nội dung nghe nhìn

Bây giờ, chúng ta sẽ minh hoạ cách viết và xây dựng một trình bổ trợ Tiện ích dịch vụ (Proxy- Wasm) có thể triển khai cho CDN của nội dung đa phương tiện bằng ngôn ngữ lập trình Ruust.

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

Cập nhậ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à nội dung được đính kèm vào Media CDN EdgeCacheService của bạn. WasmAction tham chiếu đến tài nguyên WasmPlugin.
  • Tài nguyên WasmPlugin có 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 thay đổi các trình bổ trợ rác, bạn sẽ tạo ra nhiều WasmPluginVersions khác.

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

22b3548b3a61c379.pngS

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

  1. Cài đặt chuỗi 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 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 và bạn sẽ thấy tệp Cargo.toml và 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 đoạn mã 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 trên 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 quá trình tạo 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 cũng 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ư sau:

CACHEDIR.TAG release wasm32-wasi

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

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

Trước tiên, chúng tôi đó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 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, xuất bản hoặc "đẩy" Plugin Proxy- Wasm của bạn vào Artifact Registry. Chúng tôi sẽ gắn thẻ hình ảnh vùng chứa với thông số "sản phẩm" .
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

Bây giờ, chúng ta tiếp tục đẩy thông tin về "sản phẩm" đượ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 plugin Proxy- Wasm đã được đẩy thành công vào Artifact Registry, bạn sẽ thấy kết quả tương tự:

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 trình bổ trợ Proxy- Wasm với hoạt động triển khai CDN cho nội dung đa phương tiện

Bây giờ, chúng tôi đã sẵn sàng để liên kết trình bổ trợ Proxy- Wasm với việc triển khai CDN truyền thông của bạn.

Các trình bổ trợ Proxy- Wasm được liên kết với các tuyến CDN của nội dung đa phương tiện trong tài nguyên EdgeCacheService.

  1. Trước tiên, chúng ta tạo một tài nguyên trình bổ trợ Wasm 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 tạo 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 sẽ 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 trình bổ trợ Proxy- Wasm đã được liên kết thành công với Container Image nằm trong Artifact Registry Repository (Kho lưu trữ đăng ký giả), bạn sẽ thấy kết quả tương tự:

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 của chúng ta.
gcloud alpha service-extensions wasm-actions create my-wasm-action-resource \
    --wasm-plugin=my-wasm-plugin-resource

Ngoài ra, hãy xác minh tài nguyên WasmAction đã được liên kết thành công với trình bổ trợ Proxy- Wasm hay không, bạn sẽ thấy kết quả tương tự:

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 đó, mở tệp my-service.yaml rồi thêm wasmAction vào routeAction của tuyến đã cho. Tệp này tham chiếu đến tài nguyên WasmPlugin được 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 CDN truyền thông sản xuất:
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml

9. Xác thực trình bổ trợ Proxy- Wasm của tiện ích dịch vụ trên CDN của phương tiện truyền thông

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

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

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

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

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

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

Lệnh 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 trình bổ trợ Proxy- Wasm

Khi cải tiến hoặc thêm chức năng mới cho 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, chúng tôi sẽ hướng dẫn bạn các bước để triển khai phiên bản cập nhật 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 với mã được hiển thị dưới đây:

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 bản dựng, đó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 rồi cập nhật – phiên bản chính 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

Bây giờ, bạn đã cập nhật thành công phiên bản hình ảnh vùng chứa cần nhập từ Artifact Registry và phát hành vào quá trình triển khai CDN truyền thông.

Khôi phục về phiên bản trước

Để khôi phục về phiên bản trình bổ trợ trước đó, 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 tôi 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ả:

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 tôi 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 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 tính năng khôi phục sẽ sử dụng phiên bản mã đã 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á mục tham chiếu đến WasmAction trong cấu hình Media CDN EdgeCacheService của bạn.

Dòng tham chiếu sẽ bị 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 Phòng thí nghiệm

Sau khi bạn 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 phòng thí nghiệm – nếu không chúng sẽ tiếp tục hoạt động và tích luỹ chi phí.

Các lệnh sau sẽ xoá Dịch vụ EdgeCache của nội dung đa phương tiện, Cấu hình EdgeCache và Trình bổ trợ tiện ích dịch vụ. Thực hiện các bước xoá dưới đây 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 dịch vụ trên Mạng phân phối nội dung đa phương tiện (CDN)!

Nội dung đã đề cập

  • Cách thiết lập CDN của nội dung nghe nhìn với bộ chứa Cloud Storage được đặt là Origin
  • Cách tạo trình bổ trợ Tiện ích dịch vụ với phương thức xác thực HTTP tuỳ chỉnh và liên kết trình bổ trợ này với CDN của nội dung đa phương tiện
  • Cách xác thực xem trình bổ trợ Tiện ích dịch vụ có đang hoạt động như mong đợi không
  • (không bắt buộc) Cách quản lý 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