Preparare il codice del plug-in

Il codice personalizzato che crei per i plug-in Service Extensions deve essere pacchettizzato e caricato in Artifact Registry prima che altri servizi possano accedervi. Questa pagina descrive come creare il codice del plug-in, creare il pacchetto del codice e caricarlo in un repository Artifact Registry.

Questa funzionalità è in anteprima per Media CDN.

Per informazioni su Service Extensions, consulta la panoramica di Service Extensions.

Prima di iniziare, consulta le best practice per la scrittura del codice del plug-in.

Per altri esempi, vedi Esempi di codice per i plug-in.

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Network Services, Network Actions, Artifact Registry, Cloud Build, Cloud Logging, and Cloud Monitoring APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Installa Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Network Services, Network Actions, Artifact Registry, Cloud Build, Cloud Logging, and Cloud Monitoring APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Installa Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init

Configura la toolchain

C++

L'SDK Proxy-Wasm C++ consente agli sviluppatori di utilizzare C++ per implementare plug-in WebAssembly (Wasm) per Service Extensions. L'SDK utilizza la toolchain C++ WebAssembly Emscripten, nonché altre librerie, come protobuf e, facoltativamente, Abseil.

Poiché la creazione di plug-in scritti in C++ dipende da versioni specifiche di questi strumenti e librerie, ti consigliamo di utilizzare l'immagine Docker fornita dall'SDK Proxy-Wasm C++. Le istruzioni per C++ in questa pagina utilizzano il metodo Docker. Per creare plug-in C++ senza utilizzare Docker, consulta la documentazione dell'SDK Proxy-Wasm C++.

  1. Installa Docker se non è già installato. Docker è incluso in Cloud Shell, l'ambiente shell interattivo Google Cloud .

  2. Scarica una copia dell'SDK Proxy-Wasm C++. Il modo più semplice per farlo è clonare il repository Git:

    git clone https://github.com/proxy-wasm/proxy-wasm-cpp-sdk.git
    
  3. Crea l'immagine Docker dell'SDK Proxy-Wasm C++ dal Dockerfile fornito dall'SDK:

    cd proxy-wasm-cpp-sdk
    docker build -t wasmsdk:v3 -f Dockerfile-sdk .
    

    Al termine della creazione delle librerie e delle dipendenze dell'SDK, l'immagine Docker risultante viene associata al tag specificato, che in questo esempio è wasmsdk:v3.

Go

L'SDK Go Proxy-Wasm fornisce un SDK Go completo. Go offre buone prestazioni e un ricco supporto per le librerie di terze parti scritte in Go puro.

Installa la toolchain Go v1.24.0.

Rust

La funzionalità di personalizzazione di Service Extensions viene fornita tramite l'utilizzo di WebAssembly e Proxy-Wasm. WebAssembly supporta diversi linguaggi di programmazione. Google consiglia Rust perché offre un eccellente supporto di WebAssembly e Proxy-Wasm fornisce un SDK Rust completo. Rust offre anche buone prestazioni e una forte sicurezza dei tipi.

  1. Installa la toolchain Rust.

    Al termine della procedura di installazione, segui le istruzioni stampate sulla console per completare la procedura di configurazione.

  2. Aggiungi il supporto Wasm alla toolchain Rust:

    rustup target add wasm32-wasip1
    

Crea il pacchetto del plug-in

C++

  1. Crea una nuova directory separata da proxy-wasm-cpp-sdk:

    mkdir myproject
    
  2. Nella directory, crea un Makefile con il seguente contenuto:

    # Express any dependencies
    PROTOBUF=     # full / lite / none
    WASM_DEPS=    # absl_base re2 ...
    
    # Include the SDK Makefile
    PROXY_WASM_CPP_SDK=/sdk
    include ${PROXY_WASM_CPP_SDK}/Makefile
    
  3. Aggiungi un file di origine C++ per il plug-in nella stessa directory. I nomi dei file di origine C++ devono corrispondere ai file Wasm a cui fa riferimento il Makefile, con il suffisso .wasm sostituito da .cc. In questo esempio, il file di origine deve essere denominato myproject.cc.

  4. Aggiungi il codice del plug-in al file di origine.

    Il seguente codice sorgente di esempio è un plug-in che riscrive l'host della richiesta ed emette un'intestazione della risposta:

    #include "proxy_wasm_intrinsics.h"
    
    class MyHttpContext : public Context {
     public:
      explicit MyHttpContext(uint32_t id, RootContext* root) : Context(id, root) {}
    
      FilterHeadersStatus onRequestHeaders(uint32_t headers,
                                           bool end_of_stream) override {
        LOG_INFO("onRequestHeaders: hello from wasm");
    
        // Route Extension example: host rewrite
        if (replaceRequestHeader(":authority", "service-extensions.com") != WasmResult::Ok) {
          LOG_ERROR("Failed to replace :authority header");
        }
        if (replaceRequestHeader(":path", "/") != WasmResult::Ok) {
          LOG_ERROR("Failed to replace :path header");
        }
        return FilterHeadersStatus::Continue;
      }
    
      FilterHeadersStatus onResponseHeaders(uint32_t headers,
                                            bool end_of_stream) override {
        LOG_INFO("onResponseHeaders: hello from wasm");
    
        // Traffic Extension example: add response header
        if (addResponseHeader("hello", "service-extensions") != WasmResult::Ok) {
          LOG_ERROR("Failed to add response header"