Crie um serviço Web

Esta página descreve como criar um serviço Web na VM através da framework Web Gin escrita em Golang. Pode optar por criar o serviço Web em qualquer outra framework que queira usar.

  1. Para transferir o pacote Go na VM, execute o seguinte comando na VM:
    wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
      
  2. Instale o Go na VM. Para mais informações, consulte o artigo Instale o Go.
  3. Para criar um novo diretório para o serviço Web, execute o seguinte comando:
    mkdir SERVICE_REPO
      cd SERVICE_REPO
      

Considerações adicionais

Quando cria um serviço Web, tem de ter em atenção as seguintes considerações:

  • As entradas necessárias durante a criação da VM estão disponíveis como variáveis de ambiente e têm o seguinte prefixo: CONNECTOR_ENV_.
  • Quando configurar o serviço Web, use as variáveis de ambiente para ler esses valores.
  • Apenas os valores necessários para configurar o serviço Web têm de ser introduzidos durante a criação da VM.
  • A porta do serviço tem de ser usada como entrada da variável CONNECTOR_ENV_PORT.
  • Use outras variáveis de ambiente para entradas opcionais.
  • Também pode receber entradas durante a criação da associação. Pode definir estes campos quando cria o conector personalizado e transmiti-los como caminho, consulta ou cabeçalhos em cada chamada da API.
  • Certifique-se de que o servidor é executado no localhost.

Registo

Registe as informações necessárias e envie os registos para o Cloud Logging. Isto ajuda os consumidores de conetores a monitorizar e depurar falhas. Para publicar registos no Cloud Logging, pode usar o seguinte cliente do Cloud Logging disponível em Go: https://pkg.go.dev/cloud.google.com/go/logging#NewClient

Tem de inicializar o registador em main e adicionar um middleware em Gin para acompanhar todos os pedidos recebidos. Tem de acompanhar o método, o caminho, o estado e a latência de um pedido. Para filtrar os registos, use a gravidade adequada durante o registo. No serviço Web, leia o nível do registo da variável de ambiente. O nível de registo é considerado uma entrada opcional durante a criação da VM. Por predefinição, podem ser usados registos de informações. Seguem-se os níveis de registo:

  • DEBUG: regista todas as partes do pedido, incluindo os rastreios de pedido/resposta HTTP.
  • INFO: regista o início do serviço, o encerramento do serviço, os pedidos e outras informações.
  • ERROR: regista falhas de pedidos, exceções de formatação e outros erros.

Encerramento controlado

Configure o servidor para desligar corretamente e processar os pedidos em curso. Para obter informações sobre como reiniciar ou parar o servidor corretamente, consulte o artigo Reinício ou paragem correta.

Simultaneidade

Os servidores Gin suportam inerentemente pedidos simultâneos através de rotinas Go. Por predefinição, é permitido o processamento de um número indefinido de pedidos por rotinas Go. No entanto, em alguns casos, quando se espera que os pedidos consumam muitos recursos, use conjuntos de trabalhadores para restringir e armazenar em buffer os pedidos no servidor. Para mais informações, consulte o exemplo de conjuntos de trabalhadores.

Teste e crie o ficheiro binário

  1. Defina a porta e execute o servidor com os seguintes comandos:
  2. EXPORT CONNECTOR_ENV_PORT = 8081
    go get .
    go run .

    Estes comandos agrupam as bibliotecas necessárias e executam o servidor.

  3. Para validar o servidor, execute o seguinte comando curl na VM:
    curl -X POST -H "Content-Type: application/json" -H "X-Custom-Header: MyValue" -d '{"name": "Alice", "address": "123 Main St", "gender": "F"}' http://localhost:8081/postData/456
    curl -v http://localhost:8081/getData -H "TestKey: MyValue"
  4. Crie o ficheiro binário e use-o como a imagem da VM com o seguinte comando:
    go build -o SERVICE_NAME
  5. Mova o ficheiro binário para a pasta raiz através do seguinte comando:
    sudo cp SERVICE_NAME /opt
  6. Execute o serviço novamente para verificar se o ficheiro binário está a funcionar como esperado através do seguinte comando:
    sudo chmod +x SERVICE_NAME
    ./SERVICE_NAME

Contentorize a aplicação

  1. Instale o Docker. Para mais informações, consulte o artigo Instale o Docker.
  2. Crie um ficheiro Docker para executar ficheiros binários.
    FROM alpine:latest
    WORKDIR /opt
    COPY . .
    CMD ["./SERVICE_NAME"]
  3. Crie o contentor do conetor com o seguinte comando:
    sudo docker build -t connector-container .
  4. Execute o contentor Docker. Defina --restart=unless-stopped para reiniciar o serviço em caso de falha inesperada.

Tarefa ao nível do contentor

Pode encaminhar todos os registos em stdout para o Cloud Logging através do controlador de registos gcplogs enquanto executa o contentor Docker. Isto ajuda a monitorizar o arranque ou a falha ou o encerramento inesperado do serviço.

Para encaminhar os registos para o Cloud Logging, execute o seguinte comando:
  sudo docker run --name connector-service -e
  CONNECTOR_ENV_PORT=$CONNECTOR_ENV_PORT -p
  $CONNECTOR_ENV_PORT:$CONNECTOR_ENV_PORT --restart=unless-stopped ----log-driver=gcplogs connector-container

O que se segue?