Invoca el código heredado

Quieres migrar tu app a App Engine, pero hay un problema: el código del servidor está vinculado a un sistema operativo específico y no se puede portar con facilidad. Tal vez estás usando un objeto COM antiguo escrito en C++ o Visual Basic, o, peor aún, tu código fuente ya no existe y solo queda el objeto binario ejecutable.

En este instructivo, se describe un patrón de arquitectura que se usa para invocar código heredado mediante App Engine, Compute Engine y Pub/Sub, y se proporciona una implementación de ejemplo del patrón. Aunque la implementación de ejemplo se centra en el código específico de Windows, puedes volver a usar el patrón descrito aquí para cualquier código heredado.

Objetivos

  • Obtener información sobre un patrón de arquitectura simple para invocar código heredado en Google Cloud
  • Descargar y, luego, implementar una implementación de ejemplo del patrón de arquitectura

Un patrón de arquitectura para invocar código heredado

En el siguiente diagrama, se muestra un patrón de arquitectura que puedes usar para invocar el código heredado desde tu app de App Engine.

Patrón de arquitectura para invocar código heredado
Figura 1: Patrón de arquitectura para invocar código heredado

Esta arquitectura funciona de la siguiente manera:

  1. El cliente web envía una solicitud a la app de App Engine, que escribe la solicitud en un tema de Pub/Sub.

  2. Un wrapper de código extrae la solicitud del tema.

  3. El wrapper de código invoca el código heredado.

  4. El código heredado muestra el resultado al wrapper. A continuación, el wrapper muestra el resultado a la app de App Engine, que lo muestra al cliente web.

Un ejemplo de implementación del patrón

Puedes encontrar una implementación del patrón anterior en GitHub. Esta app de ejemplo toma una string como entrada, procesa la string con los componentes descritos en el patrón y muestra una versión en mayúsculas. El código de la app consta de dos componentes principales:

  • La app de App Engine, que publica solicitudes entrantes en un tema de Pub/Sub
  • El wrapper de código, que se suscribe al tema de Pub/Sub y, cuando recibe una solicitud, la envía a un código heredado basado en Windows

En esta implementación, el wrapper es un servicio de Windows, escrito en C#. Este servicio de wrapper está configurado para ejecutarse cuando se inicia la instancia y puede invocar cualquier objeto binario o secuencia de comandos que pueda invocarse desde C#. Tanto el servicio de wrapper como el objeto binario invocado residen en una instancia de Compute Engine que ejecuta Windows Server 2012 R2.

La interfaz de usuario de la app es similar a la siguiente:

Interfaz de usuario de la app Shout
Figura 2: Interfaz de usuario de la app Shout

Si escribes la palabra “mars” y haces clic en Enviar (Submit), el resultado es el siguiente:

Resultado de la app Shout
Figura 3: Resultado de la app Shout

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • Una instancia de Compute Engine con una licencia de Windows Server 2012
  • Servicios de Pub/Sub

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud sean aptos para obtener una prueba gratuita.

Requisitos

Para esta app de ejemplo se da por hecho lo siguiente:

Obtén el código fuente

Descarga el código de ejemplo aquí y descomprímelo. Si lo prefieres, puedes clonar el repositorio del proyecto de GitHub. Para ello, ejecuta el siguiente comando:

C:\> git clone https://github.com/GoogleCloudPlatform/pubsub-shout-csharp.git

Instala las dependencias

En tu terminal de línea de comandos, navega a la carpeta appengine-python-flask en tu copia local del repositorio pubsub-shout-csharp y, luego, ejecuta lo siguiente:

C:\> pip install -r requirements.txt -t lib

Crea una instancia de Compute Engine

Crea la instancia de Compute Engine en la que se ejecutarán el wrapper de código y el código heredado:

  1. En Cloud Console, ve a la página Crear una instancia nueva.

  2. En la sección Disco de arranque, haz clic en Cambiar.

  3. En la pestaña Imágenes públicas, selecciona el sistema operativo Windows Server y la versión 2012 R2 Datacenter Edition.

  4. Haz clic en Guardar para confirmar las opciones del disco de arranque.

  5. En la sección Firewalls, permite el tráfico HTTP y HTTPS.

  6. En la sección Acceso al proyecto, permite el acceso completo a la API a todos los servicios de Google Cloud de tu proyecto.

  7. Para ver las opciones avanzadas, haz clic en Administración, seguridad, discos, herramientas de redes, usuario único y, luego, en la pestaña Herramientas de redes.

  8. En la sección Etiquetas de red, agrega la etiqueta rdp-tag. Más adelante en el instructivo, crearás una regla de firewall que permite el acceso de RDP externo a todas las instancias con esta etiqueta.

  9. Para comenzar a crear tu instancia nueva, haz clic en Crear.

Luego de crear la instancia, agrega un usuario predeterminado de Windows a la instancia:

  1. En Cloud Console, ve a la página Instancias de VM.

  2. Haz clic en el nombre de tu instancia recién implementada.

  3. En la página de instancia, haz clic en el botón Configurar contraseña de Windows.

  4. Para crear la cuenta de usuario en tu instancia, en el cuadro de diálogo Configurar nueva contraseña de Windows, agrega tu nombre de usuario y haz clic en Configurar.

  5. Anota la contraseña proporcionada y cierra el cuadro de diálogo.

A continuación, crea una regla de firewall para habilitar el acceso de RDP a tu instancia:

  1. En Cloud Console, ve a la página Crear una regla de firewall.

  2. Completa el formulario de la siguiente manera:

    • Nombre: rdp-rule
    • Rangos de IP de origen: 0.0.0.0/0
    • Puertos y protocolos permitidos: tcp:3389.
    • Etiquetas de destino: rdp-tag
  3. Para crear tu regla de firewall, haz clic en Crear.

Compila e implementa el wrapper de código

Para crear el servicio de wrapper de código, haz lo siguiente:

  1. En Cloud Console, ve a la página Credenciales.

  2. Haz clic en Nuevas credenciales y selecciona Clave de cuenta de servicio.

  3. En la página Crear clave de cuenta de servicio, completa el formulario de la siguiente manera:

    • Cuenta de servicio: Cuenta de servicio nueva
    • Nombre: Un nombre de tu elección
    • ID de cuenta de servicio: Un ID que elijas
    • Tipo de clave: JSON
  4. Haz clic en Crear. Después de unos segundos, se descargará un archivo de claves JSON en tu computadora local.

  5. En tu máquina local, crea una variable de entorno nueva llamada GOOGLE_APPLICATION_CREDENTIALS y configúrala en la ruta de acceso absoluta del archivo de claves JSON.

  6. Ve a la carpeta windows-csharp en tu copia local del repositorio pubsub-shout-csharp.

  7. Abre ShoutService.sln en Visual Studio 2012 o una versión posterior.

  8. Edita ShoutLib/Constants.cs, establece la variable ProjectId en tu ID del proyecto https://console.cloud.google.com/ y guarda.

  9. En el menú Compilar, haz clic en Compilar solución para compilar la app.

Después de crear el servicio de wrapper de código, cópialo en tu instancia de Compute Engine:

  1. Establece una conexión de escritorio remoto para la instancia que creaste antes en el instructivo.

  2. En tu máquina local, en Windows Explorer, ve a la carpeta ShoutService\bin en la carpeta windows-csharp.

  3. Copia la carpeta Release de Windows Explorer y pégala dentro de la ventana de conexión remota para copiar la carpeta en tu instancia. La carpeta Release contiene el wrapper y el servicio de Shout.

A continuación, permite que el Administrador de control de servicios de Windows inicie, se detenga y, luego, interactúe con tu servicio mediante los permisos adecuados a LOCAL SERVICE, una cuenta de usuario de Windows predefinida que usa el Administrador de control de servicios:

  1. En Windows Explorer, ve a la carpeta Release.

  2. Haz clic con el botón derecho en la carpeta para abrir el menú contextual y, luego, haz clic en Propiedades.

  3. En el cuadro de diálogo Propiedades de la actualización, haz clic en la pestaña Seguridad.

  4. Haz clic en Editar.

  5. En el cuadro de diálogo Permisos para la actualización, haz clic en Agregar.

  6. En el cuadro de diálogo Seleccionar usuarios o grupos, en Ingresar los nombres de objeto a seleccionar, escribe LOCAL SERVICE y, luego, haz clic en Aceptar.

  7. En el cuadro de diálogo Permisos para la actualización, haz clic en LOCAL SERVICE.

  8. En Permisos para LOCAL SERVICE, asegúrate de que estén habilitados los siguientes permisos:

    • Leer y ejecutar
    • Mostrar el contenido de la carpeta
    • Leer
  9. Haz clic en Aceptar.

Por último, instala el servicio de wrapper de código:

  1. En tu máquina remota, abre la terminal de línea de comandos como administrador y navega a la carpeta Release.

  2. Instala el servicio de wrapper de código:

    C:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe ShoutService.exe
    

Implementa la app de App Engine

Para implementar la app de App Engine, sigue estos pasos:

  1. En tu máquina local, en la terminal de línea de comandos, navega a la carpeta appengine-python-flask en tu copia local del repositorio pubsub-shout-csharp.

  2. Implementa la app.

    C:\> appcfg.py -A <your_project_id> -V 1 --oauth2 update .
  3. Autentica la app cuando se te solicite.

  4. Habilita la API Pub/Sub.

    Habilita la API

  5. Para inicializar la app, visita la siguiente URL en tu navegador web:

    https://<your_project_id>.appspot.com/init

    Cuando visitas esta URL, la app de App Engine crea un tema de Pub/Sub y, luego, suscribe el servicio de wrapper de código al tema.

Felicitaciones. Tu app ya está disponible. Visita <your_project_id>.appspot.com para verla en acción.

Realiza una limpieza

Una vez que hayas terminado el instructivo Invoca el código heredado, puedes limpiar los recursos que creaste en Google Cloud para que no consuman la cuota y no se te cobre en el futuro. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

Borra tu proyecto de Google Cloud

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra tu instancia de Compute Engine

Para borrar una instancia de Compute Engine, sigue estos pasos:

  1. En Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Selecciona la casilla de verificación para es la instancia que deseas borrar.
  3. Para borrar la instancia, haz clic en Borrar.

¿Qué sigue?

  • Explora arquitecturas de referencia, diagramas, instructivos y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.