Invocar código heredado

Quieres migrar tu aplicación a App Engine, pero hay un problema: el código del lado del servidor está vinculado a un sistema operativo específico y no se puede portar fácilmente. 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 para invocar código heredado mediante App Engine, Compute Engine y Cloud᠎ Pub/Sub y proporciona una implementación del patrón de ejemplo. Aunque la implementación de ejemplo se centra en el código específico de Windows, puedes reutilizar el patrón descrito aquí para cualquier código heredado.

Objetivos

  • Aprender sobre un patrón de arquitectura simple para invocar el código heredado en Google Cloud Platform (GCP)
  • Descargar e 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 aplicación 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 aplicación de App Engine, que escribe la solicitud en un tema de Cloud 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 aplicación 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 aplicación 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 aplicación consta de dos componentes principales:

  • La aplicación de App Engine, que publica solicitudes entrantes en un tema de Cloud Pub/Sub.
  • El wrapper de código, que se suscribe al tema de Cloud Pub/Sub y, cuando recibe una solicitud, la envía a un código heredado de 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 aplicación se parece a lo siguiente:

Interfaz de usuario de la aplicación Gritar
Figura 2: interfaz de usuario de la aplicación Gritar

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

Resultado de la aplicación Gritar
Figura 3: resultado de la aplicación Gritar

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

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

Usa la calculadora de precios a fin de generar una estimación de los costos según el uso previsto. Los usuarios nuevos de GCP pueden optar a una prueba gratuita.

Requisitos previos

Esta aplicación de ejemplo supone 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 en su lugar ejecutando 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 de 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 GCP Console, ve a la página Crear una nueva instancia.

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

  3. En la lista de imágenes preconfiguradas, selecciona Windows Server 2012 R2 Datacenter Edition y luego haz clic en Seleccionar.

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

  5. En la sección Acceso al proyecto, permite el acceso completo a la API a todos los servicios de GCP en tu proyecto.

  6. Para revelar opciones avanzadas, haz clic en Administración, seguridad, discos, herramientas de redes, un solo inquilino y luego haz clic en la pestaña Herramientas de redes.

  7. 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.

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

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

  1. En GCP Console, ve a la página de VM Instances.

  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 GCP Console, ve a la página Crear una regla de firewall:

  2. Llena el formulario de la siguiente manera:

    • Nombre: rdp-rule
    • Rangos de IP de fuente: 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 y luego implementa el wrapper de código

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

  1. En GCP 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, llena el formulario de la siguiente manera:

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

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

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

  7. Abre ShoutService.sln en Visual Studio 2012 o posterior.

  8. Edita ShoutLib/Constants.cs, configura la variable ProjectId en tu ID del proyecto https://console.cloud.google.com/ y guárdalo.

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

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 anteriormente en el instructivo.

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

  3. Copia la carpeta Release desde Windows Explorer y luego 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 Gritar.

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 SERVICIOS LOCALES, una cuenta de usuario de Windows predefinida utilizada por 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, debajo de 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 SERVICIOS LOCALES.

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

    • Leer y ejecutar
    • Catalogar contenidos 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 el 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 aplicación de App Engine

Para implementar la aplicación de App Engine:

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

  2. Implementa la aplicación.

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

  4. Habilita las Cloud Pub/Sub API necesarias.

    Habilita las API

  5. Para inicializar la aplicación, visita la siguiente URL en tu navegador web:

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

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

Felicitaciones. Tu aplicación está ahora en vivo. Visita <your_project_id>.appspot.com para verla en acción.

Limpieza

Una vez que hayas terminado el instructivo Invocar código heredado, puedes limpiar los recursos que creaste en Google Cloud Platform para que no se te facturen en el futuro. La siguiente sección describe cómo borrar o desactivar estos recursos.

Borra tu proyecto de GCP

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

Para borrar el proyecto, haz lo siguiente:

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

  2. In the project list, select the project you want to delete and click Delete .
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Borra tu instancia de Compute Engine

Para borrar una instancia de Compute Engine:

  1. In the GCP Console, go to the VM Instances page.

    Go to the VM Instances page

  2. Click the checkbox for the instance you want to delete.
  3. Click Delete to delete the instance.

Pasos siguientes

  • Prueba otras características de Google Cloud Platform por ti mismo. Revisa nuestros instructivos.
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…