Solución Jump Start: aplicación web de tres niveles

Last reviewed 2024-10-08 UTC

Esta guía te ayudará a comprender y desplegar la solución Jump Start de aplicación web de tres niveles, que muestra cómo desplegar rápidamente una pila de aplicaciones web multinivel en Google Cloud.

La solución de aplicación web de tres niveles despliega una aplicación de seguimiento de tareas en Google Cloud. La aplicación tiene un frontend basado en web y una capa de API en el nivel intermedio. Las capas de frontend y de API son aplicaciones en contenedores que se despliegan como servicios sin servidor. El backend es una base de datos SQL. La solución también incluye una caché en memoria para servir los datos a los que se accede con frecuencia. Cada nivel de esta solución es independiente. Puedes desarrollar, actualizar y escalar cualquier nivel sin que afecte a los demás. Esta arquitectura permite desarrollar y ofrecer aplicaciones de forma eficiente.

Esta guía está dirigida a desarrolladores que tengan experiencia en la implementación de pilas de aplicaciones multinivel. En esta guía se da por supuesto que conoces los conceptos básicos de la nube, aunque no necesariamente Google Cloud. Tener experiencia con Terraform es útil.

Productos usados

La solución usa los siguientes productos de Google Cloud :

  • Cloud Run: un servicio totalmente gestionado que te permite crear y desplegar aplicaciones en contenedores sin servidor. Google Cloud se encarga del escalado y de otras tareas de infraestructura para que puedas centrarte en la lógica empresarial de tu código.
  • Cloud SQL: una base de datos de MySQL o PostgreSQL totalmente gestionada en Google Cloud.
  • Memorystore para Redis: un servicio que proporciona almacenamiento en caché de aplicaciones mediante un servicio en memoria escalable, seguro y de alta disponibilidad para Redis y Memcached.
  • Red de nube privada virtual (VPC): una red virtual global que abarca todas las Google Cloud regiones y que te permite interconectar tus recursos de nube.

Para obtener información sobre cómo se configuran estos productos y cómo interactúan, consulta la siguiente sección.

Arquitectura

La aplicación de ejemplo que despliega la solución de aplicación web de tres niveles es una aplicación de seguimiento de tareas cuyo código ya existe. En el siguiente diagrama se muestra la arquitectura de la infraestructura que implementa la solución:

Arquitectura de la infraestructura necesaria para la solución de aplicación web de tres niveles.

En las siguientes subsecciones se describe el flujo de solicitudes y la configuración de los recursos deGoogle Cloud que se muestran en el diagrama.

Flujo de solicitud

A continuación, se muestra el flujo de procesamiento de solicitudes de la aplicación de seguimiento de tareas que implementa esta solución. Los pasos del flujo se numeran como se muestra en el diagrama de arquitectura anterior.

  1. Un frontend basado en web recibe solicitudes de los clientes para la aplicación de seguimiento de tareas. El frontend es un servicio de Cloud Run que renderiza un cliente HTML en el navegador del usuario.
  2. El frontend envía solicitudes a una capa de API, que también se despliega como un servicio de Cloud Run.
  3. Los datos que se leen con frecuencia se almacenan en caché y se sirven desde una instancia de Memorystore para Redis.
  4. La capa de la API envía a una base de datos de Cloud SQL las solicitudes que no se pueden atender desde la caché de Redis en memoria.

Configuración de recursos

En esta sección se describe la configuración de los recursos de Cloud Run, Memorystore, Cloud SQL y de red que despliega la solución. Si conoces el lenguaje de configuración de Terraform, puedes cambiar algunos de estos ajustes, como se describe más adelante en esta guía.

Para ver los ajustes de configuración, haz clic en las siguientes subsecciones:

Servicios de Cloud Run

Parámetro Ajuste preconfigurado
Capacidad de computación por instancia de contenedor 1 vCPU y 512 MiB de memoria
Intervalo de autoescalado (número de instancias de contenedor)

Frontend: 0-8

Nivel de API: 0-8

Instancia de Memorystore para Redis

Parámetro Ajuste preconfigurado
Versión de Redis Versión 6.x
Nivel de servicio Básico, sin alta disponibilidad
Memoria 1 GB
Encriptado de datos

En reposo: Google-owned and Google-managed encryption key

En tránsito: sin cifrar

Base de datos de Cloud SQL

Parámetro Ajuste preconfigurado
Versión de la base de datos PostgreSQL 14 o MySQL 8.0
Tipo de máquina db-g1-small: 1 vCPU y 1, 7 GB de memoria
Disponibilidad Una zona
Almacenamiento SSD de 10 GB con el autoescalado habilitado

Recursos de red

La instancia de Cloud SQL está conectada a una red de VPC creada por el cliente y tiene una dirección IP interna.

Acceso a VPC sin servidor proporciona conectividad desde la instancia de Cloud Run que aloja la capa de la API a la instancia de Cloud SQL. Las solicitudes del servicio Cloud Run a la instancia de Cloud SQL usan DNS interno y direcciones IP internas. El tráfico de respuesta también usa la red interna. Es decir, el tráfico entre la aplicación y la base de datos no está expuesto a Internet. Además, el tráfico a través de Acceso a VPC sin servidor puede tener una latencia menor que el tráfico que atraviesa Internet.

La conectividad entre la instancia de Memorystore y la base de datos de Cloud SQL se realiza a través de una conexión de emparejamiento directo.

Coste

Para obtener una estimación del coste de los Google Cloud recursos que utiliza la solución de aplicación web de tres niveles, consulta la estimación precalculada en la Google Cloud calculadora de precios.

Usa la estimación como punto de partida para calcular el coste de tu implementación. Puedes modificar la estimación para reflejar los cambios de configuración que tengas previsto hacer en los recursos que se usan en la solución.

La estimación precalculada se basa en suposiciones sobre determinados factores, como los siguientes:

  • Las Google Cloud ubicaciones en las que se despliegan los recursos.
  • Tiempo durante el que se usan los recursos.

Antes de empezar

Para implementar esta solución, primero necesitas un Google Cloud proyecto y algunos permisos de gestión de identidades y accesos.

Crea o elige un Google Cloud proyecto

Cuando implementas la solución, eliges el Google Cloud proyecto en el que se implementan los recursos. Puede crear un proyecto o usar uno que ya tenga para la implementación.

Si quieres crear un proyecto, hazlo antes de empezar la implementación. Usar un proyecto nuevo puede ayudar a evitar conflictos con recursos aprovisionados anteriormente, como los que se usan para cargas de trabajo de producción.

Para crear un proyecto, sigue estos pasos:

  1. Ensure that you have the Project Creator IAM role (roles/resourcemanager.projectCreator). Learn how to grant roles.
  2. In the Google Cloud console, go to the project selector page.

    Go to project selector

  3. Click Create project.

  4. Name your project. Make a note of your generated project ID.

  5. Edit the other fields as needed.

  6. Click Create.

Obtener los permisos de gestión de identidades y accesos necesarios

Para iniciar el proceso de implementación, necesitas los permisos de gestión de identidades y accesos (IAM) que se indican en la siguiente tabla.

Si has creado un proyecto para esta solución, tienes el roles/owner rol básico en ese proyecto y todos los permisos necesarios. Si no tienes el rol roles/owner, pide a tu administrador que te conceda estos permisos (o los roles que los incluyan).

Se necesita el permiso de gestión de identidades y accesos Rol predefinido que incluye los permisos necesarios

serviceusage.services.enable

Administrador de Uso de Servicio
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

Administrador de cuentas de servicio
(roles/iam.serviceAccountAdmin)

resourcemanager.projects.setIamPolicy

Administrador de IAM del proyecto
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Administrador de Cloud Infrastructure Manager
(roles/config.admin)
iam.serviceAccount.actAs Usuario de cuenta de servicio
(roles/iam.serviceAccountUser)

Acerca de los permisos temporales de cuentas de servicio

Si inicias el proceso de implementación a través de la consola, Google crea una cuenta de servicio para implementar la solución en tu nombre (y para eliminar la implementación más adelante si quieres). A esta cuenta de servicio se le asignan determinados permisos de gestión de identidades y accesos temporalmente, es decir, los permisos se revocan automáticamente una vez que se completan las operaciones de implementación y eliminación de la solución. Google recomienda que, después de eliminar la implementación, elimines la cuenta de servicio, tal como se describe más adelante en esta guía.

Ver los roles asignados a la cuenta de servicio

Estos roles se indican aquí por si un administrador de tuGoogle Cloud proyecto u organización necesita esta información.

  • roles/artifactregistry.admin
  • roles/cloudsql.admin
  • roles/compute.networkAdmin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/redis.admin
  • roles/resourcemanager.projectIamAdmin
  • roles/run.admin
  • roles/servicenetworking.serviceAgent
  • roles/serviceusage.serviceUsageViewer
  • roles/vpcaccess.admin

Desplegar la solución

Para ayudarte a desplegar esta solución con el mínimo esfuerzo, se proporciona una configuración de Terraform en GitHub. La configuración de Terraform define todos los Google Cloud recursos necesarios para la solución.

Puedes implementar la solución con uno de los siguientes métodos:

  • A través de la consola: usa este método si quieres probar la solución con la configuración predeterminada y ver cómo funciona. Cloud Build implementa todos los recursos necesarios para la solución. Cuando ya no necesites la solución implementada, puedes eliminarla a través de la consola. Es posible que tengas que eliminar por separado los recursos que crees después de implementar la solución.

    Para usar este método de implementación, sigue las instrucciones que se indican en el artículo Implementar a través de la consola.

  • Con la CLI de Terraform: usa este método si quieres personalizar la solución o automatizar el aprovisionamiento y la gestión de los recursos con el enfoque de infraestructura como código (IaC). Descarga la configuración de Terraform de GitHub, personaliza el código según sea necesario y, a continuación, despliega la solución con la CLI de Terraform. Una vez que hayas desplegado la solución, podrás seguir usando Terraform para gestionarla.

    Para usar este método de implementación, sigue las instrucciones que se indican en Implementar con la CLI de Terraform.

Implementar a través de la consola

Sigue estos pasos para implementar la solución preconfigurada.

  1. En el catálogo de Google Cloud soluciones Jump Start, ve a la solución Aplicación web de tres niveles.

    Ir a la solución de aplicación web de tres niveles

  2. Revisa la información que se proporciona en la página, como el coste estimado de la solución y el tiempo de implementación estimado.

  3. Cuando lo tengas todo listo para empezar a implementar la solución, haz clic en Implementar.

    Se muestra un panel de configuración paso a paso.

  4. Completa los pasos del panel de configuración.

    Anota el nombre que le asignes a la implementación. Este nombre es obligatorio más adelante, cuando elimines la implementación.

    Cuando haces clic en Implementar, se muestra la página Implementaciones de soluciones. En el campo Estado de esta página se muestra el valor Implementando.

  5. Espera a que se implemente la solución.

    Si el despliegue falla, el campo Estado muestra Error. Puedes usar el registro de Cloud Build para diagnosticar los errores. Para obtener más información, consulta Errores al implementar a través de la consola.

    Una vez completada la implementación, el campo Estado cambia a Implementado.

  6. Para ver y usar la aplicación de seguimiento de tareas que despliega esta solución, haz clic en Acciones en la página Despliegues de soluciones y, a continuación, selecciona Ver aplicación web.

    La página web frontend de la aplicación de seguimiento de tareas se muestra en una nueva pestaña del navegador.

  7. Para ver los Google Cloud recursos que se han implementado y su configuración, haz un recorrido interactivo.

    Iniciar visita guiada

Cuando ya no necesites la solución, puedes eliminar la implementación para evitar que se te siga facturando por los Google Cloud recursos. Para obtener más información, consulta Eliminar la implementación.

Desplegar con la CLI de Terraform

En esta sección se describe cómo puedes personalizar la solución o automatizar el aprovisionamiento y la gestión de la solución mediante la CLI de Terraform. Las soluciones que despliegues con la CLI de Terraform no se mostrarán en la página Despliegues de soluciones de la consola de Google Cloud .

Configurar el cliente de Terraform

Puedes ejecutar Terraform en Cloud Shell o en tu host local. En esta guía se describe cómo ejecutar Terraform en Cloud Shell, que tiene Terraform preinstalado y configurado para autenticarse con Google Cloud.

El código de Terraform de esta solución está disponible en un repositorio de GitHub.

  1. Clona el repositorio de GitHub en Cloud Shell.

    Abrir en Cloud Shell

    Se muestra un mensaje para confirmar la descarga del repositorio de GitHub en Cloud Shell.

  2. Haz clic en Confirmar.

    Cloud Shell se inicia en una pestaña del navegador independiente y el código de Terraform se descarga en el directorio $HOME/cloudshell_open de tu entorno de Cloud Shell.

  3. En Cloud Shell, comprueba si el directorio de trabajo actual es $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Este es el directorio que contiene los archivos de configuración de Terraform de la solución. Si necesitas cambiar a ese directorio, ejecuta el siguiente comando:

    cd $HOME/cloudshell_open/terraform-google-three-tier-web-app/
    
  4. Inicializa Terraform ejecutando el siguiente comando:

    terraform init
    

    Espera hasta que veas el siguiente mensaje:

    Terraform has been successfully initialized!
    

Configurar las variables de Terraform

El código de Terraform que has descargado incluye variables que puedes usar para personalizar la implementación según tus requisitos. Por ejemplo, puedes especificar el Google Cloud proyecto y la región en los que quieres que se implemente la solución.

  1. Asegúrate de que el directorio de trabajo actual sea $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Si no es así, ve a ese directorio.

  2. En el mismo directorio, crea un archivo de texto llamado terraform.tfvars.

  3. En el archivo terraform.tfvars, copia el siguiente fragmento de código y asigna valores a las variables obligatorias.

    • Sigue las instrucciones que se proporcionan como comentarios en el fragmento de código.
    • Este fragmento de código solo incluye las variables para las que debes definir valores. La configuración de Terraform incluye otras variables que tienen valores predeterminados. Para consultar todas las variables y los valores predeterminados, consulta el archivo variables.tf disponible en el directorio $HOME/cloudshell_open/terraform-google-three-tier-web-app/.
    • Asegúrate de que cada valor que definas en el archivo terraform.tfvars coincida con el tipo de variable declarado en el archivo variables.tf. Por ejemplo, si el tipo definido para una variable en el archivo variables.tf es bool, debes especificar true o false como valor de esa variable en el archivo terraform.tfvars.
    # This is an example of the terraform.tfvars file.
    # The values in this file must match the variable types declared in variables.tf.
    # The values in this file override any defaults in variables.tf.
    
    # ID of the project in which you want to deploy the solution
    project_id = "PROJECT_ID"
    
    # Google Cloud region where you want to deploy the solution
    # Example: us-central1
    region = "REGION"
    
    # Google Cloud zone where you want to deploy the solution
    # Example: us-central1-a
    zone = "ZONE"
    

    Para obtener información sobre los valores que puede asignar a las variables obligatorias, consulte lo siguiente:

Validar y revisar la configuración de Terraform

  1. Asegúrate de que el directorio de trabajo actual sea $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Si no es así, ve a ese directorio.

  2. Verifica que la configuración de Terraform no tenga errores:

    terraform validate
    

    Si el comando devuelve algún error, haz las correcciones necesarias en la configuración y vuelve a ejecutar el comando terraform validate. Repite este paso hasta que el comando devuelva el siguiente mensaje:

    Success! The configuration is valid.
    
  3. Revisa los recursos definidos en la configuración:

    terraform plan
    
  4. Si no has creado el archivo terraform.tfvars como se ha descrito anteriormente, Terraform te pedirá que introduzcas valores para las variables que no tengan valores predeterminados. Introduce los valores necesarios.

    El resultado del comando terraform plan es una lista de los recursos que Terraform aprovisiona cuando aplicas la configuración.

    Si quieres hacer algún cambio, edita la configuración y vuelve a ejecutar los comandos terraform validate y terraform plan.

Aprovisionar los recursos

Cuando no sea necesario hacer más cambios en la configuración de Terraform, implementa los recursos.

  1. Asegúrate de que el directorio de trabajo actual sea $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Si no es así, ve a ese directorio.

  2. Aplica la configuración de Terraform:

    terraform apply
    
  3. Si no has creado el archivo terraform.tfvars como se ha descrito anteriormente, Terraform te pedirá que introduzcas valores para las variables que no tengan valores predeterminados. Introduce los valores necesarios.

    Terraform muestra una lista de los recursos que se crearán.

  4. Cuando se te pida que realices las acciones, escribe yes.

    Terraform muestra mensajes que indican el progreso de la implementación.

    Si no se puede completar la implementación, Terraform muestra los errores que han provocado el fallo. Revisa los mensajes de error y actualiza la configuración para corregirlos. A continuación, vuelve a ejecutar el comando terraform apply. Si necesitas ayuda para solucionar errores de Terraform, consulta Errores al desplegar la solución con la CLI de Terraform.

    Una vez que se hayan creado todos los recursos, Terraform mostrará el siguiente mensaje:

    Apply complete!
    

    El resultado de Terraform también muestra la URL del frontend de la aplicación de seguimiento de tareas (endpoint) y el nombre de la instancia de Cloud SQL (sqlservername), como se muestra en el siguiente ejemplo:

    endpoint = "https://three-tier-app-fe-pn4ngg7gnq-uc.a.run.app"
    sqlservername = "three-tier-app-db-75c2"
    
  5. Para ver y usar la aplicación de seguimiento de tareas que ha implementado la solución, copia la endpoint URL del paso anterior y ábrela en un navegador.

    La página web frontend de la aplicación de seguimiento de tareas se muestra en una nueva pestaña del navegador.

  6. Para ver los Google Cloud recursos que se han implementado y su configuración, haz un recorrido interactivo.

    Iniciar visita guiada

Cuando ya no necesites la solución, puedes eliminar la implementación para evitar que se te siga facturando por los Google Cloud recursos. Para obtener más información, consulta Eliminar la implementación.

Personalizar la solución

En esta sección se proporciona información que los desarrolladores de Terraform pueden usar para modificar la solución de aplicación web de tres niveles con el fin de satisfacer sus propios requisitos técnicos y empresariales. Las instrucciones de esta sección solo son relevantes si despliega la solución mediante la CLI de Terraform.

En la sección Configuración de recursos (más arriba en esta guía) se enumeran los parámetros preconfigurados de los recursosGoogle Cloud que proporciona la solución de aplicación web de tres niveles. Para personalizar la solución, puede cambiar algunos parámetros del archivo main.tf.

Para personalizar la solución, sigue estos pasos en Cloud Shell:

  1. Asegúrate de que el directorio de trabajo actual sea $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Si no es así, ve a ese directorio.

  2. Abra el archivo main.tf y haga los cambios necesarios, tal como se muestra en los ejemplos de la siguiente tabla:

    Parámetro Código de Terraform
    Escalado de Cloud Run Argumento del archivo main.tf: autoscaling.knative.dev/maxScale

    Fragmento de código

    resource "google_cloud_run_service" "api" {
    ...
      template {
      ...
        metadata {
          annotations = {
            "autoscaling.knative.dev/maxScale" = "COUNT"
            ...
          }
        }
      }
    }
    Versión de Redis Argumento del archivo main.tf: redis_version

    Fragmento de código

    resource "google_redis_instance" "main" {
      ...
      redis_version = "VERSION"
      ...
    }

    Precaución: La configuración de Terraform proporcionada por Google se ha validado para la versión 6.x de Redis. Si cambia la versión, es posible que la solución implementada no funcione correctamente.

    Nivel de Redis Argumento del archivo main.tf: tier

    Fragmento de código

    resource "google_redis_instance" "main" {
      ...
      tier = "TIER"
      ...
    }
    Memoria de Redis Argumento del archivo main.tf: memory_size_gb

    Fragmento de código

    resource "google_redis_instance" "main" {
      ...
      memory_size_gb = SIZE
      ...
    }
    Versión de PostgreSQL o MySQL Argumento del archivo main.tf: database_version

    Fragmento de código

    resource "google_sql_database_instance" "main" {
      ...
      database_version = "VERSION"
      ...
    ...
    }

    Precaución: La configuración de Terraform proporcionada por Google se ha validado para PostgreSQL versión 14 y MySQL versión 8.0. Si cambias la versión, es posible que la solución implementada no funcione correctamente.

    Tipo de máquina de base de datos Argumento del archivo main.tf: settings.tier

    Fragmento de código

    resource "google_sql_database_instance" "main" {
      ...
      settings {
        tier = "MACHINE_TYPE"
        ...
      }
    ...
    }
    Almacenamiento en bases de datos Argumento del archivo main.tf: settings.disk_size

    Fragmento de código

    resource "google_sql_database_instance" "main" {
      ...
      settings {
        ...
        ...
        disk_size = SIZE
        ...
      }
      ...
    }

  3. Valida y revisa la configuración de Terraform.

  4. Aprovisiona los recursos.

Recomendaciones de diseño

En esta sección se ofrecen recomendaciones para usar la solución de aplicación web de tres niveles con el fin de desarrollar una arquitectura que cumpla los requisitos de seguridad, fiabilidad, coste y rendimiento.

Para ver las recomendaciones de diseño de cada área, haga clic en la pestaña correspondiente.

Seguridad de

Diseño Recomendaciones
Encriptado de datos
  • De forma predeterminada, Cloud Run encripta los datos mediante un Google-owned and Google-managed encryption key. Para proteger tus contenedores con una clave que controles, puedes usar claves de cifrado gestionadas por el cliente. Para obtener más información, consulta el artículo Usar claves de cifrado gestionadas por el cliente .
  • De forma predeterminada, Memorystore usa Google-owned and Google-managed encryption keys para cifrar los datos en reposo. Para encriptar datos con una clave que controles, puedes usar claves de encriptado gestionadas por el cliente. Para obtener más información, consulta Acerca de las claves de cifrado gestionadas por el cliente (CMEK).
  • Puedes habilitar el cifrado de los datos en tránsito en Memorystore mediante el protocolo Seguridad en la capa de transporte (TLS). Para obtener más información, consulta el artículo Acerca del cifrado en tránsito.
Seguridad de la cadena de suministro de software Para asegurarte de que solo se desplieguen imágenes de contenedor autorizadas en los servicios de Cloud Run, puedes usar la autorización binaria.
Control de acceso
  • El servicio Cloud Run que ejecuta la capa de la API permite el acceso desde cualquier origen. Para reforzar la seguridad, puedes restringir el tráfico entrante para permitir el tráfico solo de fuentes internas. Para obtener más información, consulta Restringir el acceso de entrada en Cloud Run.
  • Para proteger tu aplicación frente a accesos no autorizados, puedes habilitar la función AUTH en Memorystore para que se autentiquen las conexiones de clientes entrantes. Para obtener más información, consulta Acerca de Redis AUTH.

Fiabilidad

Diseño Recomendaciones
Escalado de aplicaciones Los servicios de Cloud Run de la solución están configurados para escalar horizontalmente las instancias de contenedor automáticamente en función de la carga de solicitudes. Revisa y ajusta los parámetros de autoescalado en función de tus requisitos. Para obtener más información, consulta Información sobre el autoescalado de instancias de contenedor.
Gestión de solicitudes Para mejorar la capacidad de respuesta de los servicios de Cloud Run que almacenan el estado específico del cliente en instancias de contenedor, puedes usar la afinidad de sesión. Las solicitudes del mismo cliente se dirigen a la misma instancia de contenedor en la medida de lo posible. Para obtener más información, consulta Configurar la afinidad de sesión (servicios).
Durabilidad de los datos Para proteger tus datos frente a pérdidas, puedes usar copias de seguridad automáticas de la base de datos de Cloud SQL. Para obtener más información, consulta el artículo Acerca de las copias de seguridad de Cloud SQL.
Alta disponibilidad de la base de datos

La base de datos de Cloud SQL de la solución se despliega en una sola zona. Para la alta disponibilidad, puedes usar una configuración multizona. Para obtener más información, consulta el artículo Acerca de la alta disponibilidad.

Si la alta disponibilidad de la base de datos es un requisito fundamental, AlloyDB para PostgreSQL es un servicio alternativo Google Cloud que puedes tener en cuenta.

Fiabilidad de la base de datos

La instancia de Cloud SQL de esta solución usa el tipo de máquina db-g1-small, que utiliza una CPU de núcleo compartido. Este tipo de máquina se ha diseñado para proporcionar recursos a una base de datos de bajo coste que solo sea adecuada para entornos de prueba y desarrollo. Si necesitas una fiabilidad de nivel de producción, te recomendamos que uses un tipo de máquina que proporcione más CPU y memoria.

Una instancia de Cloud SQL que usa el tipo de máquina db-g1-small no se incluye en el Acuerdo de Nivel de Servicio (ANS) de Cloud SQL. Para obtener más información sobre las configuraciones que no se incluyen en el SLA, consulta las directrices operativas.

Caché de alta disponibilidad Para ayudar a garantizar la alta disponibilidad de la capa de caché en memoria de esta solución, puedes usar el nivel Estándar de Memorystore para Redis. El servicio crea réplicas de lectura para operaciones de lectura distribuidas y proporciona conmutación por error automática. Para obtener más información, consulta Funciones de los niveles de Redis.

Coste

Diseño Recomendaciones
Eficiencia de recursos

Cloud Run determina el número de solicitudes que se deben enviar a una instancia de contenedor en función del uso de la CPU y la memoria. Si aumentas el ajuste de simultaneidad máxima, puedes reducir el número de instancias de contenedor que Cloud Run necesita crear y, por lo tanto, reducir los costes. Para obtener más información, consulta Número máximo de solicitudes simultáneas por instancia (servicios).

Los servicios de Cloud Run de esta solución están configurados para asignar CPUs solo durante el procesamiento de solicitudes. Cuando un servicio de Cloud Run termina de gestionar una solicitud, se inhabilita el acceso de la instancia de contenedor a las CPUs. Para obtener información sobre el efecto de esta configuración en el coste y el rendimiento, consulta Asignación de CPU (servicios).

Uso de recursos

Si tu aplicación necesita gestionar solicitudes a nivel mundial, considera la posibilidad de desplegar los servicios de Cloud Run en varias regiones. La implementación entre regiones puede ayudar a reducir el coste del tráfico de transferencia de datos entre continentes. Google recomienda una implementación entre regiones si decides usar un balanceador de carga y una CDN. Para obtener más información, consulta Servir tráfico procedente de varias regiones.

Rendimiento de

Diseño Recomendaciones
Tiempo de inicio de la aplicación Para reducir el efecto de los arranques en frío en el rendimiento, puedes configurar el número mínimo de instancias de contenedor de Cloud Run con un valor distinto de cero. Para obtener más información, consulta Consejos generales para desarrollar aplicaciones en Cloud Run.
Tiempo de respuesta del frontend

Si tu aplicación gestiona solicitudes de todo el mundo, te recomendamos que despliegues los servicios de Cloud Run en varias regiones para que las respuestas a las solicitudes de los clientes sean más rápidas. Puedes usar un balanceador de carga global para enrutar las solicitudes a la región más cercana. Para obtener más información, consulta Servir tráfico procedente de varias regiones.

Los despliegues multirregión también pueden ayudar a reducir el volumen de tráfico de salida entre continentes y, por lo tanto, el coste de operar la aplicación.

Rendimiento de la base de datos

En el caso de las aplicaciones sensibles al rendimiento, puedes mejorar el rendimiento de Cloud SQL usando un tipo de máquina más grande y aumentando la capacidad de almacenamiento.

Si el rendimiento de la base de datos es un requisito fundamental, puedes considerar AlloyDB para PostgreSQL como servicio alternativo. Google Cloud

Rendimiento de la caché Para mejorar el rendimiento de los usuarios de tu aplicación, puedes aumentar la capacidad de la instancia de Memorystore para Redis. A mayor capacidad, mayor es el rendimiento de red. Para obtener más información, consulta Prácticas recomendadas para gestionar la memoria.

Ten en cuenta lo siguiente:

  • Antes de hacer cualquier cambio en el diseño, evalúa el impacto en los costes y ten en cuenta las posibles ventajas e inconvenientes de otras funciones. Puedes evaluar el impacto económico de los cambios de diseño con la Google Cloud calculadora de precios.
  • Para implementar cambios en el diseño de la solución, debes tener experiencia en la programación de Terraform y conocimientos avanzados de los servicios de Google Cloud que se usan en la solución.
  • Si modificas la configuración de Terraform proporcionada por Google y, después, se producen errores, crea incidencias en GitHub. Los problemas de GitHub se revisan en la medida de lo posible y no están pensados para responder preguntas de uso general.
  • Para obtener más información sobre cómo diseñar y configurar entornos de producción en Google Cloud, consulte Diseño de la zona de aterrizaje en Google Cloud y la lista de comprobación de la configuración deGoogle Cloud .

Eliminar el despliegue

Cuando ya no necesites el despliegue de la solución, elimínalo para evitar que se te siga facturando por los recursos que has creado.

Eliminar a través de la consola

Sigue este procedimiento si has implementado la solución a través de la consola.

  1. En la Google Cloud consola, ve a la página Implementaciones de soluciones.

    Ir a Despliegues de soluciones

  2. Selecciona el proyecto que contenga la implementación que quieras eliminar.

  3. Busca el despliegue que quieras eliminar.

  4. En la fila de la implementación, haga clic en Acciones y, a continuación, seleccione Eliminar.

    Es posible que tengas que desplazarte para ver Acciones en la fila.

  5. Introduce el nombre del lanzamiento y haz clic en Confirmar.

    En el campo Estado se muestra Eliminando.

    Si no se puede eliminar, consulta la guía para solucionar problemas en Error al eliminar un despliegue.

Cuando ya no necesites el proyecto que has usado para la solución, puedes eliminarlo. Google Cloud Para obtener más información, consulta Opcional: Eliminar el proyecto.

Eliminar con la CLI de Terraform

Sigue este procedimiento si has desplegado la solución con la CLI de Terraform.

  1. En Cloud Shell, comprueba que el directorio de trabajo actual sea $HOME/cloudshell_open/terraform-google-three-tier-web-app/. Si no es así, ve a ese directorio.

  2. Elimina los recursos aprovisionados por Terraform:

    terraform destroy
    

    Terraform muestra una lista de los recursos que se van a destruir.

  3. Cuando se te pida que realices las acciones, escribe yes.

    Terraform muestra mensajes que indican el progreso. Una vez que se hayan eliminado todos los recursos, Terraform mostrará el siguiente mensaje:

    Destroy complete!
    

    Si no se puede eliminar, consulta la guía para solucionar problemas en Error al eliminar un despliegue.

Cuando ya no necesites el proyecto que has usado para la solución, puedes eliminarlo. Google Cloud Para obtener más información, consulta Opcional: Eliminar el proyecto.

Opcional: Eliminar el proyecto

Si has implementado la solución en un proyecto nuevo y ya no lo necesitas, elimínalo siguiendo estos pasos: Google Cloud

  1. En la Google Cloud consola, ve a la página Gestionar recursos.

    Ir a Gestionar recursos

  2. En la lista de proyectos, selecciona el proyecto que quieras eliminar y haz clic en Eliminar.
  3. Cuando se te pida, escribe el ID del proyecto y haz clic en Cerrar.

Si decides conservar el proyecto, elimina la cuenta de servicio que se creó para esta solución, tal como se describe en la sección siguiente.

Opcional: Eliminar la cuenta de servicio

Si has eliminado el proyecto que has usado para la solución, puedes saltarte esta sección.

Como se ha mencionado anteriormente en esta guía, cuando implementaste la solución, se creó una cuenta de servicio en tu nombre. A la cuenta de servicio se le han asignado ciertos permisos de gestión de identidades y accesos temporalmente, es decir, los permisos se han revocado automáticamente una vez completadas las operaciones de implementación y eliminación de la solución, pero la cuenta de servicio no se ha eliminado. Google recomienda que elimines esta cuenta de servicio.

  • Si has implementado la solución a través de la Google Cloud consola, ve a la página Implementaciones de soluciones. Si ya estás en esa página, actualiza el navegador. Se activará un proceso en segundo plano para eliminar la cuenta de servicio. No es necesario hacer nada más.

  • Si has desplegado la solución con la CLI de Terraform, sigue estos pasos:

    1. En la Google Cloud consola, ve a la página Cuentas de servicio.

      Ir a Cuentas de servicio

    2. Selecciona el proyecto que has usado para la solución.

    3. Selecciona la cuenta de servicio que quieras eliminar.

      El ID de correo de la cuenta de servicio que se ha creado para la solución tiene el siguiente formato:

      goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
      

      El ID de correo contiene los siguientes valores:

      • DEPLOYMENT_NAME: el nombre del despliegue.
      • NNN: un número aleatorio de 3 dígitos.
      • PROJECT_ID: el ID del proyecto en el que has implementado la solución.
    4. Haz clic en Eliminar.

Solución de errores

Las acciones que puedes llevar a cabo para diagnosticar y resolver errores dependen del método de implementación y de la complejidad del error.

Errores al implementar a través de la consola

Si la implementación falla al usar la consola, haz lo siguiente:

  1. Ve a la página Implementaciones de soluciones.

    Si el despliegue ha fallado, en el campo Estado se muestra Error.

  2. Consulta los detalles de los errores que han provocado el fallo:

    1. En la fila de la implementación, haz clic en Acciones.

      Es posible que tengas que desplazarte para ver Acciones en la fila.

    2. Selecciona Ver registros de Cloud Build.

  3. Revisa el registro de Cloud Build y toma las medidas oportunas para solucionar el problema que ha provocado el fallo.

Errores al desplegar con la CLI de Terraform

Si la implementación falla al usar Terraform, el resultado del comando terraform apply incluye mensajes de error que puedes revisar para diagnosticar el problema.

En los ejemplos de las siguientes secciones se muestran errores de implementación que pueden producirse al usar Terraform.

Error de API no habilitada

Si creas un proyecto y, a continuación, intentas implementar la solución en el nuevo proyecto, es posible que la implementación falle y se muestre un error como el siguiente:

Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

Si se produce este error, espera unos minutos y vuelve a ejecutar el comando terraform apply.

Error al asignar la dirección solicitada

Cuando ejecutas el comando terraform apply, puede producirse un error cannot assign requested address con un mensaje como el siguiente:

Error: Error creating service account:
 Post "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts:
 dial tcp [2001:db8:ffff:ffff::5f]:443:
 connect: cannot assign requested address

Si se produce este error, vuelve a ejecutar el comando terraform apply.

Error de configuración

Si alguno de los argumentos de recursos tiene valores no admitidos, se produce un error como el siguiente:

Error: Error creating Instance: googleapi: Error 400: Provided Redis version is
not supported: REDIS_5_X
│ com.google.apps.framework.request.StatusException:
  <eye3 title='INVALID_ARGUMENT'/>
  generic::INVALID_ARGUMENT: Provided Redis version is not supported: REDIS_5_X
Details:
│ [
│   {
│     "@type": "type.googleapis.com/google.rpc.BadRequest",
│     "fieldViolations": [
│       {
│         "description": "Invalid value: REDIS_5_X",
│         "field": "instance.redis_version"
│       }
│     ]
│   }
│ ]
│
│   with google_redis_instance.main,
│   on main.tf line 96, in resource "google_redis_instance" "main":
│   96: resource "google_redis_instance" "main" {

En este caso, la intención era usar la versión 5 de Redis, pero el valor especificado para el argumento instance.redis_version (REDIS_5_X) en el archivo main.tf no es válido. El valor correcto es REDIS_5_0, tal como se indica en la documentación de la API REST de Memorystore.

Error al eliminar una implementación

En algunos casos, es posible que no se pueda eliminar un despliegue:

  • Después de implementar una solución a través de la consola, si cambias algún recurso que haya aprovisionado la solución y, a continuación, intentas eliminar la implementación, es posible que no se pueda eliminar. En el campo Estado de la página Implementaciones de soluciones se muestra el valor Fallo y el registro de Cloud Build muestra la causa del error.
  • Después de desplegar una solución con la CLI de Terraform, si cambias algún recurso con una interfaz que no sea de Terraform (por ejemplo, la consola) y, a continuación, intentas eliminar el despliegue, es posible que no se pueda eliminar. Los mensajes de la salida del comando terraform destroy muestran la causa del error.

Revisa los registros y mensajes de error, identifica y elimina los recursos que han provocado el error y, a continuación, vuelve a intentar eliminar la implementación.

Si no se elimina un despliegue basado en la consola y no puedes diagnosticar el error con el registro de Cloud Build, puedes eliminar el despliegue con la CLI de Terraform, tal como se describe en la siguiente sección.

Eliminar un despliegue basado en consola con la CLI de Terraform

En esta sección se describe cómo eliminar una implementación basada en la consola si se producen errores al intentar eliminarla a través de la consola. Con este método, descargas la configuración de Terraform del despliegue que quieres eliminar y, a continuación, usas la CLI de Terraform para eliminarlo.

  1. Identifica la región en la que se almacenan el código de Terraform, los registros y otros datos de la implementación. Esta región puede ser diferente de la que seleccionaste al implementar la solución.

    1. En la Google Cloud consola, ve a la página Implementaciones de soluciones.

      Ir a Despliegues de soluciones

    2. Selecciona el proyecto que contenga la implementación que quieras eliminar.

    3. En la lista de implementaciones, busque la fila de la implementación que quiera eliminar.

    4. Haz clic en Ver todo el contenido de la fila.

    5. En la columna Ubicación, anota la segunda ubicación, tal como se destaca en el siguiente ejemplo:

      Ubicación del código de implementación, los registros y otros artefactos.

  2. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  3. Crea variables de entorno para el ID del proyecto, la región y el nombre de la implementación que quieras eliminar:

    export REGION="REGION"
    export PROJECT_ID="PROJECT_ID"
    export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
    

    En estos comandos, sustituye lo siguiente:

    • REGION: la ubicación que has anotado anteriormente en este procedimiento.
    • PROJECT_ID: el ID del proyecto en el que has implementado la solución.
    • DEPLOYMENT_NAME: el nombre de la implementación que quieres eliminar.
  4. Obtén el ID de la última revisión del despliegue que quieras eliminar:

    export REVISION_ID=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .latestRevision -r)
        echo $REVISION_ID
    

    El resultado debería ser similar al siguiente:

    projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
    
  5. Obtén la ubicación de Cloud Storage de la configuración de Terraform de la implementación:

    export CONTENT_PATH=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \
        | jq .applyResults.content -r)
        echo $CONTENT_PATH
    

    A continuación, se muestra un ejemplo del resultado de este comando:

    gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
    
  6. Descarga la configuración de Terraform de Cloud Storage a Cloud Shell:

    gcloud storage cp $CONTENT_PATH $HOME --recursive
    cd $HOME/content/
    

    Espera a que se muestre el mensaje Operation completed, como se muestra en el siguiente ejemplo:

    Operation completed over 45 objects/268.5 KiB
    
  7. Inicializa Terraform:

    terraform init
    

    Espera hasta que veas el siguiente mensaje:

    Terraform has been successfully initialized!
    
  8. Elimina los recursos implementados:

    terraform destroy
    

    Terraform muestra una lista de los recursos que se van a destruir.

    Si se muestra alguna advertencia sobre variables no declaradas, ignórala.

  9. Cuando se te pida que realices las acciones, escribe yes.

    Terraform muestra mensajes que indican el progreso. Una vez que se hayan eliminado todos los recursos, Terraform mostrará el siguiente mensaje:

    Destroy complete!
    
  10. Elimina el artefacto de implementación:

    curl -X DELETE \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
    
  11. Espera unos segundos y, a continuación, comprueba que se ha eliminado el artefacto de implementación:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .error.message
    

    Si el resultado muestra null, espera unos segundos y vuelve a ejecutar el comando.

    Una vez que se elimina el artefacto de implementación, se muestra un mensaje como el del ejemplo siguiente:

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    
  12. Enviar comentarios

    Las soluciones Jump Start se proporcionan únicamente con fines informativos y no son productos con asistencia oficial. Google puede cambiar o eliminar soluciones sin previo aviso.

    Para solucionar los errores, consulta los registros de Cloud Build y el resultado de Terraform.

    Para enviar comentarios, sigue estos pasos:

    • Para enviar comentarios sobre la documentación, los tutoriales de la consola o la solución, usa el botón Enviar comentarios de la página.
    • Si el código de Terraform no se ha modificado, crea incidencias en el repositorio de GitHub. Los problemas de GitHub se revisan en la medida de lo posible y no están pensados para responder preguntas de uso general.
    • Si tienes problemas con los productos que se usan en la solución, ponte en contacto con Cloud Customer Care.

    Siguientes pasos

    Consulta la siguiente documentación para obtener información sobre las prácticas recomendadas de arquitectura y operativas de los productos que se usan en esta solución: