Crea un servicio web

En esta página, se describe cómo crear un servicio web en la VM con el framework web Gin escrito en Golang. Puedes crear el servicio web en cualquier otro framework que quieras usar.

  1. Para descargar el paquete de Go en la VM, ejecuta el siguiente comando en ella:
    wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
      
  2. Instala Go en la VM. Para obtener información, consulta Cómo instalar Go.
  3. Para crear un directorio nuevo para el servicio web, ejecuta el siguiente comando:
    mkdir SERVICE_REPO
      cd SERVICE_REPO
      

Consideraciones adicionales

Cuando crees un servicio web, debes tener en cuenta las siguientes consideraciones:

  • Las entradas que necesitas durante la creación de la VM están disponibles como variables de entorno y tienen el siguiente prefijo: CONNECTOR_ENV_.
  • Cuando configures el servicio web, usa las variables de entorno para leer esos valores.
  • Solo se deben ingresar los valores necesarios para configurar el servicio web durante la creación de la VM.
  • El puerto del servicio se debe tomar como entrada de la variable CONNECTOR_ENV_PORT.
  • Usa otras variables de entorno para las entradas opcionales.
  • También puedes obtener entradas durante la creación de la conexión. Puedes definir estos campos cuando creas el conector personalizado y pasarlos como ruta de acceso, consulta o encabezados en cada llamada a la API.
  • Asegúrate de que el servidor se ejecute en localhost.

Logging

Registra la información requerida y envía los registros a Cloud Logging. Esto ayuda a los consumidores de conectores a hacer un seguimiento de las fallas y depurarlas. Para publicar registros en Cloud Logging, puedes usar el siguiente cliente de Cloud Logging disponible en Go: https://pkg.go.dev/cloud.google.com/go/logging#NewClient

Debes inicializar el registrador en main y agregar un middleware en Gin para hacer un seguimiento de todas las solicitudes entrantes. Debes hacer un seguimiento del método, la ruta, el estado y la latencia de una solicitud. Para filtrar los registros, usa la gravedad adecuada durante el registro. En el servicio web, lee el nivel de registro de la variable de entorno. El nivel de registro se toma como entrada opcional durante la creación de la VM. De forma predeterminada, se pueden usar los registros de información. Los siguientes son los niveles de registro:

  • DEBUG: Registra cada parte de la solicitud, incluidas las trazas de solicitud o respuesta HTTP.
  • INFO: Registra el inicio y la baja del servicio, las solicitudes y otra información.
  • ERROR: Falla en la solicitud de registros, excepciones de formato y otros errores.

Cierre ordenado

Configura el servidor para que se apague de forma ordenada y controle las solicitudes en curso. Para obtener información sobre cómo reiniciar o detener el servidor de forma ordenada, consulta Reinicio o detención ordenados.

Simultaneidad

Los servidores de Gin admiten de forma inherente solicitudes simultáneas con rutinas de Go. De forma predeterminada, las rutinas de Go pueden procesar una cantidad no definida de solicitudes. Sin embargo, en algunos casos, cuando se espera que las solicitudes sean intensivas en recursos, usa grupos de trabajadores para restringir y almacenar en búfer las solicitudes en el servidor. Para obtener más información, consulta el ejemplo de grupos de trabajadores.

Prueba y compila el objeto binario

  1. Configura el puerto y ejecuta el servidor con los siguientes comandos:
  2. EXPORT CONNECTOR_ENV_PORT = 8081
    go get .
    go run .

    Estos comandos agrupan las bibliotecas necesarias y ejecutan el servidor.

  3. Para verificar el servidor, ejecuta el siguiente comando curl en la 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. Crea el objeto binario y úsalo como la imagen de la VM con el siguiente comando:
    go build -o SERVICE_NAME
  5. Usa el siguiente comando para mover el objeto binario a la carpeta raíz:
    sudo cp SERVICE_NAME /opt
  6. Ejecuta el servicio nuevamente para verificar que el objeto binario funcione como se espera con el siguiente comando:
    sudo chmod +x SERVICE_NAME
    ./SERVICE_NAME

Organiza la aplicación en contenedores

  1. Instala Docker. Para obtener información, consulta Cómo instalar Docker.
  2. Crea un archivo Docker para ejecutar objetos binarios.
    FROM alpine:latest
    WORKDIR /opt
    COPY . .
    CMD ["./SERVICE_NAME"]
  3. Compila el contenedor del conector con el siguiente comando:
    sudo docker build -t connector-container .
  4. Ejecuta el contenedor de Docker. Establece --restart=unless-stopped para reiniciar el servicio en caso de falla inesperada.

Tarea a nivel del contenedor

Todos los registros en stdout se pueden enrutar a Cloud Logging con el controlador de registro gcplogs mientras se ejecuta el contenedor de Docker. Esto ayuda a hacer un seguimiento del inicio, la falla o el apagado inesperado del servicio.

Para enrutar los registros a Cloud Logging, ejecuta el siguiente 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

¿Qué sigue?