Preparar o código do plug-in

O código personalizado criado para plug-ins do Service Extensions precisa ser empacotado e enviado ao Artifact Registry antes que outros serviços possam acessá-lo. Esta página descreve como criar código de plug-in, empacotar o código e fazer upload dele para um repositório do Artifact Registry.

Esse recurso está em pré-lançamento para a Media CDN.

Para mais informações sobre as Service Extensions, consulte Visão geral das Service Extensions.

Antes de começar, consulte as práticas recomendadas para escrever código de plug-in.

Para mais exemplos, consulte Exemplos de código para plug-ins.

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  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. Instale a CLI do Google Cloud.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte 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. Instale a CLI do Google Cloud.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

Configurar o conjunto de ferramentas

C++

O SDK C++ do Proxy-Wasm permite que os desenvolvedores usem C++ para implementar plug-ins do WebAssembly (Wasm) para Service Extensions. O SDK usa a cadeia de ferramentas WebAssembly C++ Emscripten, além de outras bibliotecas, como protobuf e, opcionalmente, Abseil.

Como a criação de plug-ins escritos em C++ depende de versões específicas dessas ferramentas e bibliotecas, recomendamos usar a imagem Docker fornecida pelo SDK do Proxy-Wasm C++. As instruções para C++ nesta página usam o método Docker. Para criar plug-ins C++ sem usar o Docker, consulte a documentação do SDK Proxy-Wasm C++.

  1. Instale o Docker se ele ainda não estiver instalado. O Docker está incluído no Cloud Shell, o ambiente shell interativo Google Cloud .

  2. Faça o download de uma cópia do SDK C++ do Proxy-Wasm. A maneira mais simples de fazer isso é clonar o repositório Git:

    git clone https://github.com/proxy-wasm/proxy-wasm-cpp-sdk.git
    
  3. Crie a imagem Docker do SDK C++ do Proxy-Wasm com o Dockerfile fornecido pelo SDK:

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

    Quando o comando terminar de criar as bibliotecas e dependências do SDK, a imagem Docker resultante será associada à tag especificada, que é wasmsdk:v3 neste exemplo.

Go

O SDK do Proxy-Wasm Go oferece um SDK do Go completo. O Go oferece bom desempenho e suporte completo para bibliotecas de terceiros escritas em Go puro.

Instale o conjunto de ferramentas Go v1.24.0.

Rust

A capacidade de personalização das Service Extensions é fornecida pelo uso do WebAssembly e do Proxy-Wasm. O WebAssembly é compatível com várias linguagens de programação. O Google recomenda o Rust porque ele oferece excelente suporte ao WebAssembly, e o Proxy-Wasm fornece um SDK Rust completo. O Rust também oferece bom desempenho e segurança de tipos.

  1. Instale a cadeia de ferramentas do Rust.

    Ao final do processo de instalação, siga as instruções impressas no console para concluir a configuração.

  2. Adicione suporte ao Wasm ao conjunto de ferramentas do Rust:

    rustup target add wasm32-wasip1
    

Criar o pacote de plug-in

C++

  1. Crie um novo diretório, separado de proxy-wasm-cpp-sdk:

    mkdir myproject
    
  2. No diretório, crie um Makefile com o seguinte conteúdo:

    # 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. Adicione um arquivo de origem C++ para o plug-in no mesmo diretório. Os nomes dos arquivos de origem C++ precisam corresponder aos arquivos Wasm que o Makefile segmenta, com o sufixo .wasm substituído por .cc. Neste exemplo, o arquivo de origem precisa ser chamado de myproject.cc.

  4. Adicione o código do plug-in ao arquivo de origem.

    O exemplo de código-fonte a seguir é um plug-in que reescreve o host da solicitação e emite um cabeçalho de resposta:

    #include "proxy_wasm_intrinsics.h"
    
    class MyHttpContext : public