Hello Cloud Run with C#

1. Introducción

89eb4723767d4525.png

Cloud Run es una plataforma administrada que te permite ejecutar contenedores sin estado que se pueden invocar a través de solicitudes HTTP. Cloud Run es una plataforma sin servidores que quita la complejidad de la administración de la infraestructura para que puedas enfocarte en lo que más importa: compilar aplicaciones extraordinarias.

Se basa en Knative, lo que te permite ejecutar tus contenedores completamente administrados con Cloud Run o en el clúster de Google Kubernetes Engine con Cloud Run en GKE.

El objetivo de este codelab es que compiles una imagen de contenedor y la implementes en Cloud Run.

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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto.
  • Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. 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 la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Google Cloud Shell

Si bien Google Cloud se puede operar de manera remota desde tu laptop, en este codelab usaremos Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Cloud Shell es un entorno de desarrollo y operaciones en línea al que puedes acceder desde cualquier lugar con tu navegador. Puedes administrar tus recursos con su terminal en línea precargada con utilidades como la herramienta de línea de comandos de gcloud, kubectl y muchas más. También puedes desarrollar, compilar, implementar y depurar tus apps basadas en la nube con el editor en línea de Cloud Shell.

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 directamente en Google Cloud, lo que mejora considerablemente el rendimiento de la red y la autenticación. Esto significa que todo lo que necesitarás para este Codelab es un navegador (sí, funciona en una Chromebook).

  • Para activar Cloud Shell desde la consola de Cloud, simplemente haz clic en Activar Cloud Shell :

cb81e7c8e34bc8d.png

Si es la primera vez que inicias Cloud Shell, verás una pantalla intermedia que describe en qué consiste. Si apareció una pantalla intermedia, haz clic en Continuar.

bfde7b083abc9544.png

El aprovisionamiento del entorno solo debería tardar unos segundos :

cbb597d2be277a14.png

Una vez que te conectes a Cloud Shell, deberías ver que ya te autenticaste :

gcloud auth list

Resultado del comando

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

El proyecto también debería estar configurado como PROJECT_ID (suponiendo que seleccionaste un proyecto en la consola web) :

gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

Si, por algún motivo, el proyecto no está configurado, solo emite el siguiente comando:

gcloud config set project <PROJECT_ID>

Si no conoce su PROJECT_ID, Consulta el menú desplegable en la parte superior de la consola de Cloud :

8c7a57249d954735.png

También puedes consultar los detalles de tu proyecto en la sección "Configuración y utilidades" sección:

791f101797cfef39.png

Cloud Shell también configura algunas variables de entorno de forma predeterminada, lo que puede resultar útil cuando ejecutas comandos futuros.

echo $GOOGLE_CLOUD_PROJECT

Resultado del comando

<PROJECT_ID>
  • Por último, puedes configurar la zona predeterminada :
gcloud config set compute/zone us-central1-f

Puedes elegir diferentes zonas. Para obtener más información, consulta Regiones y zonas.

Habilita la API de Cloud Run

En Cloud Shell, habilite la API de Cloud Run:

gcloud services enable run.googleapis.com

Si se realizó correctamente, se mostrará un mensaje similar a este :

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. Escriba la aplicación de ejemplo

Compilaremos una aplicación ASP.NET C# simple que responda a las solicitudes HTTP.

Para crear tu aplicación, usa la herramienta de línea de comandos de dotnet en Cloud Shell:

dotnet new web -o helloworld-csharp

Cambia al directorio helloworld-csharp:

cd helloworld-csharp

Luego, actualiza Program.cs para que coincida con lo siguiente:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Con este código, se crea un servidor web básico que escucha en el puerto definido por la variable de entorno PORT y responde con Hello World.

Para probar la app, ejecútala de forma local en Cloud Shell. Deberías ver que escucha en el puerto 8080:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. Implementa en Cloud Run

Implementa tu aplicación en Cloud Run con el siguiente comando:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world es el nombre del servicio.
  • La marca allow-unauthenticated implementa el servicio como un servicio disponible públicamente sin requisitos de autenticación.
  • us-central1 es la región en la que se implementará la app.
  • La marca source determina la ubicación de la fuente que se compilará. Cloud Run usa paquetes de compilación para crear automáticamente un contenedor a partir del código fuente.

Espera algunos minutos hasta que se complete la implementación. Si la operación es exitosa, la línea de comandos mostrará la URL de servicio:

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

Ahora puedes abrir la URL de servicio en un navegador web para visitar el contenedor implementado :

85e7fbbd264444c9.png

¡Felicitaciones! Acabas de implementar una aplicación empaquetada en una imagen de contenedor en Cloud Run. Cloud Run escala la imagen del contenedor automáticamente y de forma horizontal para controlar las solicitudes que se reciben y, luego, reduce la escala cuando disminuye la demanda. Solo debes pagar por la CPU, la memoria y las herramientas de redes que se utilicen durante la administración de la solicitud.

5. Es hora de limpiar

Puedes borrar tu proyecto de GCP para evitar incurrir en cargos, lo que detendrá la facturación de todos los recursos usados en ese proyecto, o simplemente borrar el servicio de Cloud Run:

gcloud run services delete helloworld

6. Próximos pasos

Un buen próximo paso sería Realizar la implementación en Cloud Run en GKE.

Si deseas obtener más información para compilar un contenedor HTTP sin estado adecuado para Cloud Run a partir de código fuente y enviarlo a Container Registry, consulta lo siguiente: