Implementación

Vonage Cloud Runtime te permite crear rápidamente una instancia en ejecución en la plataforma mediante la implementación. La implementación combina tu código fuente con un archivo de configuración, lo que crea un paquete. A continuación, el paquete se carga en la plataforma y se convierte en una instancia en ejecución.

Archivo de configuración

Los archivos de configuración proporcionan información a la plataforma sobre cómo depurar y desplegar tu aplicación. A continuación se muestra un archivo de configuración de ejemplo:

project:
    name: app
instance:
    name: dev
    runtime: nodejs22
    region: aws.use1
    application-id: 773c2b45-c20a-4d6b-8afe-24ce29ba6f92
    entrypoint: [node, index.js]
    build-script: "./build.sh"
    capabilities:
        - voice
        - messages-v1
    environment:
        - name: VONAGE_NUMBER
          value: "44700000000"
        - name: INTEGRATION_API_KEY
          secret: MY_SECRET_API_KEY
    secrets:
        - MY_SECRET_API_KEY
debug:
    name: debug
    application-id: 884c2b45-c20a-4d6b-8afe-24ce29ba6f93
    environment:
        - name: DEBUG_VONAGE_NUMBER
          value: "4471111111"
    entrypoint: [nodemon, --inspect, index.js]
    preserve-data: false
  • El nombre del proyecto es el espacio de nombres único de tu proyecto, que puede contener muchas instancias.
  • El nombre de la instancia es un identificador único de tu instancia.
  • region es donde se ejecutará la instancia.
  • entrypoint Proporciona a la plataforma Vonage Cloud Runtime información sobre cómo iniciar tu aplicación.
  • build-script te permite especificar un script que se ejecutará mientras la plataforma compila tu aplicación.

Puede obtener más información sobre las opciones disponibles en el Guía del archivo de configuración.

Variables de entorno inyectadas

Cuando despliegues tu proyecto en Cloud Runtime (o utilices vcr debug), la plataforma insertará algunas variables de entorno por ti junto con el environment de su archivo de configuración.

VCR_PORT
VCR_REGION
VCR_DEBUG
VCR_CODE_DIR
VCR_REGION_ID
VCR_PRIVATE_KEY
VCR_API_REGION_ID
VCR_API_ACCOUNT_ID
VCR_API_ACCOUNT_SECRET
VCR_API_APPLICATION_ID
VCR_INSTANCE_PUBLIC_URL
VCR_INSTANCE_SERVICE_NAME

Dirección y puerto de la aplicación

Su aplicación debe escuchar en el puerto proporcionado por el archivo VCR_PORT y vincularla a 0.0.0.0. VCR enruta el tráfico entrante a través de un proxy interno - vinculado a localhost o 127.0.0.1 hará que no se pueda acceder a tu aplicación.

Node.js (Express):

const port = process.env.VCR_PORT || 8080;
app.listen(port, '0.0.0.0');

Python (FastAPI):

import os, uvicorn
port = int(os.environ.get('VCR_PORT', 8080))
uvicorn.run(app, host='0.0.0.0', port=port)

Vamos:

port := os.Getenv("VCR_PORT")
if port == "" { port = "8080" }
http.ListenAndServe("0.0.0.0:"+port, nil)

Java (Spring Boot):

# application.properties
server.port=${VCR_PORT:8080}
server.address=0.0.0.0

Ruby (Sinatra):

PHP:

# vcr.yml entrypoint
entrypoint:
  - php
  - -S
  - "0.0.0.0:${VCR_PORT}"
  - -t
  - public

Itinerario de revisión médica

La plataforma Vonage Cloud Runtime espera una ruta, /_/healthque debe estar disponible en su aplicación y que se utiliza para comprobar la salud de su aplicación desplegada. La ruta no debe estar detrás de ninguna autenticación. Su aplicación se reiniciará si esta ruta no devuelve un estado 200. Si la ruta no está disponible, el despliegue fallará.

Puedes aprovechar esta oportunidad para realizar algunas comprobaciones por tu cuenta y hacer que la plataforma reinicie tu aplicación automáticamente si esta entra en un estado anómalo al devolver un código de estado distinto de 200 en un plazo de 30 segundos.

Node.js (Express):

app.get('/_/health', (req, res) => res.sendStatus(200));

Node.js (Fastify):

fastify.get('/_/health', async () => ({ status: 'ok' }));

Python (Flask):

@app.route('/_/health')
def health():
    return 'OK', 200

Python (FastAPI):

@app.get('/_/health')
async def health():
    return {'status': 'ok'}

Vamos:

http.HandleFunc("/_/health", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
    w.Write([]byte("OK"))
})

Java (Spring Boot):

@RestController
public class HealthController {
    @GetMapping("/_/health")
    public ResponseEntity<String> health() {
        return ResponseEntity.ok("OK");
    }
}

Ruby (Sinatra):

PHP:

Cómo desplegar

Puedes implementar usando la CLI de Vonage Cloud Runtime. Para implementar, ejecuta:

vcr deploy

Si te aparece un «error de credenciales no encontradas», ejecuta vcr app generate-keys para regenerar las credenciales de tu aplicación de Vonage para Vonage Cloud Runtime.

Este comando hace lo siguiente:

  • Configura las devoluciones de llamada de tu aplicación Vonage tal y como se describe en el archivo de configuración capabilities objeto.
  • Empaqueta el directorio actual.
  • Lo carga en la plataforma Cloud Runtime.
  • Ejecuta el script de compilación si se incluye en el archivo de configuración.
  • Si todo va bien, ejecuta el comando en tu entrypoint.

Para evitar cargar archivos grandes o no deseados como parte de su despliegue, utilice un archivo .vcrignore para excluirlos.

Por defecto, el comando «deploy» buscará un archivo de configuración llamado vcr.yml en el directorio actual. Para utilizar un archivo de configuración diferente puede ejecutar:

vcr deploy --filename <path/to/file>

Por ejemplo, para desplegar su código actual con un archivo de configuración llamado production.yml correrías:

vcr deploy --filename production.yml

Despliegue con una acción de GitHub

Si quieres integrar la implementación en tu flujo de trabajo de GitHub, puedes añadir una acción de GitHub para que se encargue de ello por ti. Los pasos principales de la acción consisten en descargar tu código e instalar el CLI de Cloud Runtimey ejecute el comando deploy. A continuación se muestra un flujo de trabajo de ejemplo que asume que se está utilizando un comando script de compilación para gestionar los aspectos personalizados de su proyecto:

name: Deploy to Cloud Runtime

on:
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    env:
      VONAGE_API_KEY: ''
      VCR_REGION: 'euw1'
      VCR_SHORT_REGION: 'eu'   # eu | us | ap
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v3.0.2
      - name: Install Cloud Runtime CLI
        uses: Vonage/cloud-runtime-cli@main
      - name: Deploy
        run: |
          vcr deploy --api-key ${{env.VONAGE_API_KEY}} --api-secret ${{ secrets.VONAGE_API_SECRET }} --region aws.${{env.VCR_REGION}} --graphql-endpoint https://api-${{env.VCR_SHORT_REGION}}.vonage.com/v1/vcr/${{env.VCR_REGION}}/api/graphql/v1/graphql

Deberá sustituir VONAGE_API_KEY, VCR_REGIONy VCR_SHORT_REGION con su clave API y los valores de su región de destino:

Región VCR_REGION VCR_SHORT_REGION Punto final GraphQL
Europa Occidental (Irlanda) euw1 eu https://api-eu.vonage.com/v1/vcr/euw1/api/graphql/v1/graphql
Este de EE. UU. (Virginia) use1 us https://api-us.vonage.com/v1/vcr/use1/api/graphql/v1/graphql
AP Southeast (Singapur) apse1 ap https://api-ap.vonage.com/v1/vcr/apse1/api/graphql/v1/graphql
AP Sudeste (Sídney) apse2 ap https://api-ap.vonage.com/v1/vcr/apse2/api/graphql/v1/graphql

Este flujo de trabajo se ejecuta manualmente, pero puedes editarlo para que se ejecute cuando se cierren PR, etc. Puedes obtener más información sobre las Acciones de GitHub en la página Acciones Documentación.

Solución de problemas en la implementación

Es posible que obtengas un error de "credenciales no encontradas" si la plataforma de Vonage Cloud Runtime no tiene acceso a las credenciales de tu aplicación de Vonage. Puedes generar un nuevo par de claves privadas usando la CLI:

vcr app generate-keys --app-id <app-id> 

Ver tu implementación

Para echar un vistazo más profundo a su proyecto y despliegues puede utilizar la herramienta Panel de control de Vonage Cloud Runtime.

Screenshot of the Vonage Cloud Runtime dashboard home page

Al hacer clic en tu instancia desplegada, podrás acceder a los registros, los eventos y el historial de despliegues. Por ejemplo, la pestaña «Historial» te mostrará el historial de despliegues de esta instancia:

Screenshot of an instance's history page

Si implementas más de una instancia para tu proyecto, todas ellas aparecerán en el panel de control:

Screenshot of the cloud runtime dashboard showing multiple instances

Este es un proyecto llamado vapique tiene dos archivos de configuración. Un archivo de configuración tiene una instancia llamada dev y el otro tiene una instancia llamada prod. Esto le permite tener múltiples instancias ejecutando el mismo código pero con diferentes entornos.

Eliminar una instancia

Si deseas eliminar una instancia implementada, puedes utilizar el comando de eliminación de instancias de la CLI de Vonage Cloud Runtime:

vcr instance remove --project-name <project-name> --instance-name <instance-name> 

Por lo tanto, para eliminar el dev Por ejemplo, en la captura de pantalla anterior, deberías ejecutar:

vcr instance remove --project-name vapi --instance-name dev

También puede eliminar una instancia utilizando el ID de instancia:

vcr instance remove --id <instance-id>

ADVERTENCIA: ¡Esta acción es irreversible! El estado y los programadores adjuntos también se eliminarán de forma permanente.

Listar instancias

Para ver todas las instancias desplegadas de tu Account, ejecuta:

vcr instance list

Ver registros de instancias

Puede obtener registros de una instancia desplegada utilizando la CLI:

# Print the last logs by project and instance name vcr instance log --project-name <project-name> --instance-name <instance-name> # Print the last logs by instance ID vcr instance log --id <instance-id>

Registros de streaming

Utiliza el --follow (-f) para transmitir de forma continua las nuevas entradas del registro a medida que van llegando, de forma similar a tail -f:

vcr instance log --project-name <project-name> --instance-name <instance-name> --follow

Pulsa Ctrl+C para detener la transmisión.

Filtrado de registros

Puedes filtrar la salida del registro utilizando estos parámetros opcionales:

Bandera Breve Descripción
--history <n> Número de entradas históricas que se recuperan primero (por defecto: 300)
--log-level <level> -l Nivel mínimo de registro: trace, debug, info, warn, error, fatal
--source-type <type> -s Filtrar por fuente: application o provider

Ejemplos:

# Show only errors and above, streaming vcr instance log -p <project-name> -n <instance-name> --log-level error --follow # Show only application logs (exclude provider logs) vcr instance log -p <project-name> -n <instance-name> --source-type application # Fetch the last 500 entries and exit vcr instance log --id <instance-id> --history 500

Lista de direcciones IP permitidas

Si deseas restringir el acceso a tus sistemas, las direcciones IP de Vonage Cloud Runtime para cada región son:

UE Oeste - aws.euw1

  • 52.215.68.46
  • 46.137.9.43
  • 54.72.25.154

US West - aws.use1

  • 54.87.47.119
  • 3.224.186.73
  • 35.153.45.51

Asia-Pacífico Sudeste - aws.apse1

  • 13.251.207.33
  • 52.76.50.31
  • 54.169.132.8

Asia-Pacífico Sudeste (Sídney) - aws.apse2

  • 52.62.122.28
  • 13.236.199.68
  • 52.63.14.36