Muchas aplicaciones necesitan la administración de sesiones para la autenticación y las preferencias del usuario. ASP.NET Core incluye middleware para almacenar sesiones en una caché distribuida.
La caché distribuida predeterminada de ASP.NET no se distribuye en absoluto. Almacena datos de sesión en la memoria del servidor web. Cuando solo un servidor web entrega un sitio web, esta estrategia es adecuada. Pero cuando muchos servidores web entregan un sitio web, los usuarios pueden experimentar errores y perder datos.
Para evitar errores y datos perdidos, una aplicación ASP.NET debe usar una caché distribuida que almacene datos en un almacén de datos persistente. En este instructivo, se muestra cómo administrar sesiones en Cloud Run si las almacenas en Firestore y encriptas las cookies con Cloud Key Management Service.
Objetivos
- Implementa la aplicación en Cloud Run.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run, Cloud Key Management Service, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run, Cloud Key Management Service, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.- Para crear una base de datos de Firestore en modo nativo, sigue los pasos a continuación:
-
En la consola de Google Cloud , ve a la página del visualizador de Firestore.
Ir al visualizador de Firestore - Desde la pantalla Selecciona un modo de Cloud Firestore, haz clic en Seleccionar modo nativo.
- Selecciona una ubicación para tu base de datos de Firestore. Esta configuración de ubicación es la ubicación predeterminada de los recursos de Google Cloud para tu proyecto de Google Cloud . Esta ubicación se usa para los Google Cloud servicios de tu Google Cloud proyecto que requieren una configuración de ubicación, específicamente, tu bucket predeterminado de Cloud Storage y tu app de App Engine.
- Haz clic en Crear base de datos.
-
En la consola de Google Cloud , ve a la página del visualizador de Firestore.
-
En Cloud Shell, abre el código fuente de la app.
Ir a Cloud ShellCloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud directamente desde el navegador.
- Para descargar el código de muestra y cambiar al directorio de la app, haz clic en Continuar.
-
En Cloud Shell, configura gcloud CLI para usar tu proyecto Google Cloud nuevo:
# Configure gcloud for your project gcloud config set project PROJECT_ID
Reemplaza
PROJECT_IDpor el Google Cloud ID del proyecto que creaste con la Google Cloud consola.La Google Cloud CLI es la forma principal en la que interactúas con tus recursos de Google Cloud desde la línea de comandos. En este instructivo, usarás gcloud CLI para implementar y supervisar tu app.
Examina el código fuente
En el siguiente diagrama, se ilustra cómo Firestore maneja las sesiones para la aplicación Cloud Run.
El método ConfigureServices en el archivo Startup.cs configura la app para que use Cloud KMS en la encriptación, y Cloud Storage para almacenar claves encriptadas.
-
En Cloud Shell, haz clic en
para iniciar el editor y examinar el archivo Startup.cs.
Configura el proyecto de Google Cloud
-
En el editor de Cloud Shell, edita el archivo
appsettings.jsony reemplaza las dos instancias deYOUR-PROJECT-IDpor tu ID del proyecto Google Cloud . Guarda el archivo. -
Crea un nuevo llavero de claves de Cloud Key Management Service llamado
dataprotectionprovider:gcloud kms keyrings create dataprotectionprovider --location global
-
Crea una nueva clave de Cloud Key Management Service llamada
masterkey:gcloud kms keys create masterkey --location global --keyring dataprotectionprovider --purpose=encryption
-
Crea un bucket de Cloud Storage para almacenar las claves encriptadas:
gcloud storage buckets create gs://PROJECT_ID-bucket
Implementa y ejecuta en Cloud Run
Puedes usar Cloud Run para compilar y, luego, implementar una app que se ejecute de forma confiable incluso con cargas pesadas y grandes cantidades de datos.
En este instructivo, se usa Cloud Run para implementar el servidor.
En Cloud Shell, publica tu aplicación:
dotnet publish -c ReleaseUsa Cloud Build para compilar un contenedor de Docker y publicar en Container Registry:
gcloud builds submit --tag gcr.io/PROJECT_ID/sessions bin/Release/netcoreapp2.1/publish
Ejecuta el contenedor con Cloud Run:
gcloud beta run deploy sessions --region us-central1 --platform managed --image gcr.io/PROJECT_ID/sessions --allow-unauthenticated
Toma nota de la URL en el resultado:
Service [sessions] revision [sessions-00003-xiz] has been deployed and is serving 100 percent of traffic at https://sessions-r3f3em7nuq-uc.a.run.app
Para ver la app en vivo, ve a la URL que copiaste en el paso anterior.
Borra sesiones
Puedes borrar los datos de las sesiones en la consola deGoogle Cloud o implementar una estrategia de eliminación automática. Cuando usas soluciones de almacenamiento para sesiones, como Memcache o Redis, las sesiones vencidas se borran de forma automática.
Depura la app
Si no puedes conectarte a la aplicación Cloud Run, verifica lo siguiente:
- Comprueba que los comandos de implementación de
gcloudse completaron correctamente y no generaron ningún error. Si hubo errores (por ejemplo,message=Build failed), corrígelos y, luego, intenta implementar la aplicación Cloud Run nuevamente. - Consulta la guía de Cloud Run para ver registros.
Limpia
Borra el proyecto
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- Obtén más información sobre Cloud Run.
- Obtén más información sobre Cloud KMS.
- Obtén más información sobre Cloud Storage.