Cómo implementar una aplicación de ASP.NET Core en App Engine

1. Descripción general

ASP.NET Core es un nuevo marco de trabajo de código abierto y multiplataforma que sirve para compilar aplicaciones modernas basadas en la nube y conectadas a Internet a través del lenguaje de programación C#.

En este lab, implementará una aplicación simple de ASP.NET Core en el entorno flexible de App Engine. Este codelab se basa en el codelab Compila e inicia una app de ASP.NET Core desde Google Cloud Shell. Te recomendamos que realices ese lab primero antes de intentar hacer este.

Las aplicaciones de Google App Engine son fáciles de crear, mantener y escalar a medida que cambian sus necesidades de tráfico y almacenamiento de datos. Con App Engine, no tendrá que administrar servidores. Solo debe subir su aplicación y estará listo para trabajar.

Las aplicaciones de App Engine cuentan con ajuste de escala automático según el tráfico entrante. El balanceo de cargas, los microservicios, la autorización, las bases de datos SQL y NoSQL, Memcache, la división del tráfico, el registro, la búsqueda, el control de versiones, el lanzamiento y las reversiones, y el análisis de seguridad son compatibles de forma nativa y sumamente personalizables.

Los entornos de App Engine (el estándar y el flexible) son compatibles con una variedad de lenguajes de programación, como C#, Java, Python, PHP, Node.js, Go y muchos más. Los dos entornos proporcionan a los usuarios máxima flexibilidad en el comportamiento de sus aplicaciones, ya que cada uno posee determinadas ventajas. Para obtener más información, consulte Elige un entorno de App Engine.

Qué aprenderás

  • Cómo empaquetar una aplicación simple de ASP.NET Core como un contenedor de Docker
  • Cómo implementar una aplicación simple de ASP.NET Core en App Engine

Requisitos

  • Un proyecto de Google Cloud
  • Un navegador, como Chrome o Firefox

¿Cómo usarás este instructivo?

Leer Leer y completar los ejercicios

¿Cómo calificarías tu experiencia con Google Cloud Platform?

Principiante Intermedio Avanzado

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar.
  • Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Inicia Cloud Shell

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Activar Cloud Shell

  1. En la consola de Cloud, haz clic en Activar Cloud Shell4292cbf4971c9786.png.

bce75f34b2c53987.png

Si nunca has iniciado Cloud Shell, aparecerá una pantalla intermedia (mitad inferior de la página) en la que se describirá qué es. Si ese es el caso, haz clic en Continuar (y no volverás a verla). Así es como se ve la pantalla única:

70f315d7b402b476.png

El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.

fbe3a0674c982259.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitas. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer simplemente con un navegador o tu Chromebook.

Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que está autenticado:
gcloud auth list

Resultado del comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto:
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puedes configurarlo con el siguiente comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].

3. Cree una aplicación de ASP.NET Core en Cloud Shell

En el símbolo del sistema de Cloud Shell, puedes verificar que la herramienta de línea de comandos de dotnet ya esté instalada enumerando los SDK de .NET instalados:

dotnet --list-sdks

A continuación, crea una nueva aplicación web de ASP.NET Core de base con un framework de destino de netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Esto creará un proyecto y restablecerá sus dependencias. Deberías ver un mensaje similar al que se muestra a continuación.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. Ejecute la aplicación de ASP.NET Core

Ya está casi todo listo para ejecutar la app. Navega a la carpeta de la app.

cd HelloWorldAspNetCore

Por último, ejecuta la app.

dotnet run --urls=http://localhost:8080

La aplicación inicia la escucha en el puerto 8080.

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

Para verificar que se esté ejecutando la app, haz clic en el botón Vista previa en la Web, que se encuentra en la parte superior derecha de la pantalla, y selecciona “Vista previa en el puerto 8080”.

Capture.PNG

Verás la página web predeterminada de ASP.NET Core:

f579a9baedc108a9.png

Una vez que verifiques que la app se está ejecutando, presiona Ctrl + C para detenerla.

5. Publique la aplicación de ASP.NET Core

Ahora, publica la app para obtener un DLL autónomo con el comando dotnet publish.

dotnet publish -c Release

Si ejecutas publish, se mostrarán algunos mensajes con un DLL publicado correctamente al final del proceso.

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. Cree app.yaml para el entorno flexible de App Engine

El archivo app.yaml describe cómo implementar la app en App Engine (en este caso, el entorno flexible de App Engine).

Primero, navega a la carpeta publish. Debe estar en la carpeta bin/Release, pero la ruta de acceso exacta depende de la versión de .NET:

cd bin/Release/netcoreapp3.1/publish/

Crea un archivo app.yaml dentro de la carpeta publish:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

Observa cómo el archivo app.yaml especifica el entorno como flex y el tiempo de ejecución como aspnetcore.

7. Realice la implementación en el entorno flexible de App Engine

Ya puedes implementar tu app en el entorno flexible de App Engine con gcloud. Dentro del directorio publish, ejecuta el siguiente comando:

gcloud app deploy --version v0

Durante la implementación, es posible que se te solicite que elijas una región para tu aplicación. Elige la región en la que quieres que se ejecute tu app.

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

Esto creará una imagen para tu aplicación en la nube, la guardará en Google Container Registry y la implementará en App Engine. Durante la implementación, puedes ver cómo se compila la imagen del contenedor:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

Cuando el proceso se complete, deberías ver que se implementó la app.

...
Deployed service [default] to [https://<project-id>.appspot.com]

Después de implementar la aplicación,abre la URL http://<project-id>.appspot.com en tu navegador web para visitarla.

Verás la página web predeterminada de ASP.NET Core en una pestaña nueva.

f579a9baedc108a9.png

También puedes echar un vistazo a la imagen del contenedor que se creó para ti en la nube. En la consola de Cloud, ve a Container Registry > Imágenes y, luego, en la carpeta appengine, deberías ver la imagen de tu aplicación.

de788f4949d0c5a.png

8. Implemente una nueva versión de su servicio

En algún momento, la aplicación que implementó en producción requerirá la corrección de errores o funciones adicionales. App Engine lo ayudará a implementar nuevas versiones en producción sin afectar a sus usuarios.

Primero, modifiquemos la aplicación. Abre el editor de código desde Cloud Shell.

868c4f615e2331fe.png

Navega a Index.cshtml en la carpeta Views/Home de HelloWorldAspNetCore y actualiza el mensaje predeterminado a este:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

Guarda los cambios y, luego, regresa a Cloud Shell. Dentro de HelloWorldAspNetCore,, publica la app para obtener un DLL autónomo.

dotnet publish -c Release

Navegue al directorio publish.

cd bin/Release/netcoreapp3.1/publish/

Ahora puedes implementar una nueva versión de tu app (v1 en este caso).

gcloud app deploy --version v1

Una vez que se implemente, puedes ir a la sección de versiones de App Engine en Google Cloud Console para ver la nueva versión de tu app que entrega todo el tráfico con el nuevo mensaje.

8cc0cc992b4e07ed.png

9. Paneles y división del tráfico

En App Engine, en la sección Panel, puedes ver varios paneles de tu aplicación para la latencia, la CPU, etcétera. Explóralos por tu cuenta.

5c879431935b080d.png

En la sección Versions, puedes ver las versiones implementadas de tu app y dividir el tráfico entre diferentes versiones en la sección Traffic Splitting. Dividamos el tráfico entre dos versiones:

176a2e22e755b6d3.png

10. ¡Felicitaciones!

Climpieza

Es hora de cerrar la app para ahorrar costos y ser un buen ciudadano de la nube en general.

Ve a la sección de versiones de App Engine.

7e9b3b4406e785b9.png

Selecciona la versión y deténla.

7f80d9ff2c959e0.png

Una vez que se detenga la versión, se borrarán las instancias de respaldo y deberías ver que el recuento de instancias se reduce a cero.

29f3cb5c71225b2d.png

Temas abordados

¡Listo! Creó una aplicación de ASP.NET Core, la empaquetó como un contenedor de Docker y la implementó en el entorno flexible de Google App Engine.

  • Cómo empaquetar una aplicación simple de ASP.NET Core como un contenedor de Docker
  • Cómo implementar una aplicación simple de ASP.NET Core en App Engine

Próximos pasos

Licencia

Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.