En este instructivo, se muestra cómo manejar sesiones en App Engine.
En muchas apps, se necesita controlar las sesiones para la autenticación y las preferencias del usuario.
El paquete sessions
del kit de herramientas web Gorilla incluye una implementación basada en un sistema de archivos para realizar esta función. Sin embargo, esta implementación no es adecuada para las apps que se pueden entregar desde varias instancias, ya que la sesión que se registra en una instancia puede diferir de las que se registran en otras. Además, el paquete gorilla/sessions
incluye una implementación basada en cookies. Sin embargo, esta implementación requiere que se encripten cookies y se almacene toda la sesión en el cliente, en lugar de solo un ID de sesión, que puede ser muy largo para algunas apps.
Objetivos
- Escribe la aplicación.
- Ejecuta la aplicación de manera local.
- Implementa la aplicación en App Engine.
Costos
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Actualiza los componentes de
gcloud
:gcloud components update
- Prepara el entorno de desarrollo.
Configura el proyecto
En la ventana de la terminal, clona el repositorio de la app de muestra en la máquina local:
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Ve al directorio que contiene el código de muestra:
cd golang-samples/getting-started/sessions
Comprende cómo funciona la app web
Esta app muestra saludos en diferentes idiomas para cada usuario. A los usuarios recurrentes se los saluda siempre en el mismo idioma.
Para que la app pueda guardar las preferencias de un usuario, debes almacenar la información sobre el usuario actual en una sesión. Esta app de muestra usa Firestore para almacenar los datos de las sesiones.
Puedes usar firestoregorilla
, un almacén de sesiones compatible con gorilla/sessions
.
Primero, la app importa las dependencias y define el tipo de
app
para conservar unsessions.Store
y una plantilla HTML, y determina la lista de saludos.A continuación, la app define una función
main
, que crea una nueva instancia deapp
, registra el controlador de índices y, luego, inicia el servidor HTTP. La funciónnewApp
crea la instancia deapp
mediante la inicialización de unsessions.Store
con la funciónfirestoregorilla.New
.El controlador de índices obtiene la sesión del usuario y, si es necesario, crea una. A las sesiones nuevas se les asigna un idioma aleatorio y un recuento de vistas de 0. Luego el recuento de vistas aumenta a uno, la sesión se guarda, y la plantilla HTML escribe la respuesta.
En el siguiente diagrama, se muestra cómo Firestore controla las sesiones de la app de App Engine.
Borra sesiones
firestoregorilla
no borra las sesiones antiguas o vencidas. Puedes borrar los datos de las sesiones en la consola de Google 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.
Ejecución local
En la ventana de la terminal, compila el objeto binario
sessions
:go build
Inicia el servidor HTTP:
./sessions
Visualiza la app en el navegador web:
Cloud Shell
En la barra de herramientas de Cloud Shell, haz clic en Vista previa en la Web
y selecciona Vista previa en el puerto 8080.
Máquina local
En tu navegador, ve a
http://localhost:8080
.Ves uno de los cinco saludos: "Hello World", "Hallo Welt", "Hola mundo", "Salut le Monde" o "Ciao Mondo". El idioma cambia si abres la página en otro navegador o en modo Incógnito. Puedes ver y editar los datos de las sesiones en la consola de Google Cloud.
Para detener el servidor HTTP, presiona
Control+C
en la ventana de la terminal.
Implementa y ejecuta en App Engine
Puedes usar el entorno estándar de App Engine para compilar y, también, implementar una app que se ejecute de forma confiable con cargas pesadas y grandes cantidades de datos.
En este instructivo, se usa el entorno estándar de App Engine para implementar el servidor.
El archivo app.yaml
contiene la configuración del entorno estándar de App Engine:
Implementa la app en App Engine con el siguiente comando:
gcloud app deploy
En el navegador, ingresa la siguiente URL:
https://PROJECT_ID.REGION_ID.r.appspot.com
Reemplaza lo siguiente:
PROJECT_ID
: El Google Cloud ID de tu proyectoREGION_ID
: Un código que App Engine asigna a la app
El saludo ahora se entrega en un servidor web que se ejecuta en una instancia de App Engine.
Depura la app
Si no puedes conectarte a la aplicación de App Engine, verifica lo siguiente:
- Comprueba que los comandos de implementación de
gcloud
se 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 de App Engine nuevamente. En la consola de Google Cloud, ve a la página Explorador de registros.
Ir a la página Explorador de registros
En la lista desplegable Recursos seleccionados recientemente, haz clic en Aplicación de App Engine y, luego, haz clic en Todos module_id. Verás una lista de las solicitudes de cuando visitaste tu aplicación. Si no ves una lista de solicitudes, confirma que seleccionaste Todos module_id en la lista desplegable. Si ves mensajes de error impresos en la consola de Google Cloud, comprueba que el código de tu app coincida con el código de la sección sobre cómo escribir la app web.
Asegúrate de que la API de Firestore esté habilitada.
Limpia
Borra el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra la instancia de App Engine
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- Para eliminar la versión de la aplicación, haz clic en Eliminar.
¿Qué sigue?
- Prueba los instructivos de Cloud Run Functions.
- Obtén más información sobre App Engine.
- Prueba Cloud Run, que te permite ejecutar contenedores sin estado en un entorno completamente administrado o en tu propio clúster de Google Kubernetes Engine.