Solución de inicio: app web de tres niveles

Last reviewed 2023-08-29 UTC

Esta guía te ayuda a comprender y, luego, implementar la solución de Jump Start de app web de tres niveles, que muestra cómo implementar con rapidez una pila de app web de varios niveles en Google Cloud.

La solución de app web de tres niveles implementa una app de seguimiento de tareas simple en Google Cloud. La app tiene un frontend basado en la Web y una capa de API en el nivel intermedio. La capa de frontend y API son apps en contenedores que se implementan como servicios sin servidores. El backend es una base de datos SQL. La solución también incluye una caché en la memoria para entregar datos de acceso frecuente. Cada nivel de esta solución es independiente. Puedes desarrollar, actualizar y escalar cualquier nivel sin afectar los otros niveles. Esta arquitectura permite un desarrollo y una entrega de apps eficientes.

Esta guía está dirigida a los desarrolladores que tengan cierto conocimiento sobre la implementación de pilas de apps de varios niveles. Se supone que estás familiarizado con los conceptos básicos de la nube, aunque no necesariamente con Google Cloud. La experiencia con Terraform es útil.

Productos usados

En la solución, se usan los siguientes productos de Google Cloud:

  • Cloud Run: Un servicio completamente administrado que te permite implementar y compilar apps en contenedores sin servidores. Google Cloud controla el escalamiento y otras tareas de infraestructura para que puedas enfocarte en la lógica empresarial de tu código.
  • Memorystore para Redis: Un servicio que proporciona almacenamiento en caché de aplicaciones con un servicio en memoria escalable, seguro y con alta disponibilidad para Redis y Memcached.
  • Cloud SQL para PostgreSQL: Una base de datos de PostgreSQL basada en la nube que está completamente administrada en la infraestructura de Google Cloud.
  • Red de nube privada virtual (VPC): Una red virtual global que abarca todas las regiones de Google Cloud y que te permite interconectar los recursos de la nube.

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

Arquitectura

La app de ejemplo que implementa la solución de app web de tres niveles es una app de seguimiento de tareas para la que ya existe el código. 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 app web de tres niveles.

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

Flujo de solicitud

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

  1. Un frontend basado en la Web recibe solicitudes de los clientes a la app de seguimiento de tareas. El frontend es un servicio de Cloud Run que procesa un cliente HTML en el navegador del usuario.
  2. El frontend envía solicitudes a una capa de API, que también se implementa como un servicio de Cloud Run.
  3. Los datos que se leen con frecuencia se almacenan en caché y se entregan desde una instancia de Memorystore para Redis.
  4. Las solicitudes que no se pueden entregar desde la caché de Redis en memoria se envían mediante la capa de la API a una base de datos de Cloud SQL para PostgreSQL.

Configuración de recursos

En esta sección, se describe la configuración de los recursos de Cloud Run, Memorystore, Cloud SQL y herramientas de redes que implementa la solución. Si estás familiarizado con el lenguaje de configuración de Terraform, puedes cambiar algunas de estas opciones de configuración, como se describe más adelante en esta guía.

Para ver la configuración, haz clic en las siguientes subsecciones:

Servicios de Cloud Run

Parámetro Configuración preconfigurada
Capacidad de procesamiento por instancia de contenedor 1 CPU virtual, 512 MiB de memoria
Rango de ajuste de escala automático (cantidad de instancias de contenedor)

Frontend: 0-8

Capa de la API: 0-8

Instancia de Memorystore para Redis

Parámetro Configuración preconfigurada
Versión de Redis Versión 6.x
Nivel de servicio Básico, sin alta disponibilidad (HA)
Memoria 1 GB
Encriptación de datos

En reposo: Clave administrada por Google

En tránsito: Sin encriptar

Base de datos de Cloud SQL para PostgreSQL

Parámetro Configuración preconfigurada
Versión de PostgreSQL Versión 14
Tipo de máquina db-g1-small: 1 vCPU, 1,7-GB de memoria
Disponibilidad Zona única
Almacenamiento SSD de 10 GB, con ajuste de escala automático 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.

El acceso a VPC sin servidores proporciona conectividad desde la instancia de Cloud Run que aloja la capa de la API hacia la instancia de Cloud SQL. Las solicitudes del servicio de Cloud Run a la instancia de Cloud SQL usan direcciones IP internas y DNS internos. El tráfico de respuesta también usa la red interna. En otras palabras, el tráfico entre la app y la base de datos no se expone a Internet. Además, el tráfico a través del Acceso a VPC sin servidores puede tener una latencia más baja que el tráfico que recorre la 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 intercambio de tráfico directo.

Costo

Para obtener una estimación del costo de los recursos de Google Cloud que usa la solución de app web de tres niveles, consulta la estimación calculada previamente en la calculadora de precios de Google Cloud.

Usa la estimación como punto de partida para calcular el costo de la implementación. Puedes cambiar la estimación para que refleje cualquier cambio de configuración que planeas hacer para los recursos que se usan en la solución.

La estimación calculada con anterioridad se basa en suposiciones para ciertos factores, incluidos los siguientes:

  • Las ubicaciones de Google Cloud en las que se implementan los recursos.
  • La cantidad de tiempo que se usan los recursos.

Implementa la solución

En esta sección, se te guiará a través del proceso de implementación de la solución de app web de tres niveles.

Crea o elige un proyecto de Google Cloud

Cuando implementas la solución, eliges el proyecto de Google Cloud en el que se implementan los recursos. Cuando decidas si usarás un proyecto existente o crearás un proyecto nuevo, ten en cuenta los siguientes factores:

  • Si creas un proyecto para la solución, cuando ya no necesites la implementación, puedes borrar el proyecto y evitar la facturación continua. Si usas un proyecto existente, debes borrar la implementación cuando ya no la necesites.
  • El uso de un proyecto nuevo puede ayudar a evitar conflictos con los recursos aprovisionados con anterioridad, como los recursos que se usan para cargas de trabajo de producción.

Si deseas implementar la solución en un proyecto nuevo, crea el proyecto antes de comenzar la implementación.

Para crear un proyecto, completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página del selector de proyectos.

    Ir al selector de proyectos

  2. Para comenzar a crear un proyecto de Google Cloud, haz clic en Crear proyecto.

  3. Ponle un nombre al proyecto. Toma nota de tu ID del proyecto generado.

  4. Edita los otros campos según sea necesario.

  5. Para crear el proyecto, haz clic en Crear.

Obtén los permisos de IAM necesarios

Para iniciar el proceso de implementación, necesitas los permisos de Identity and Access Management (IAM) que se enumeran en la siguiente tabla. Si tienes el rol básico roles/owner para el proyecto en el que planeas implementar la solución, ya tienes todos los permisos necesarios. Si no tienes el rol roles/owner, pídele a tu administrador que te otorgue estos permisos (o los roles que incluyen estos permisos).

Se requiere permiso de IAM Rol predefinido que incluye los permisos necesarios

serviceusage.services.enable

Administrador de Service Usage
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

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

resourcemanager.projects.setIamPolicy

Administrador de IAM de proyecto
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Administrador de Cloud Infrastructure Manager
(roles/config.admin)

Cuenta de servicio creada para la solución

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 borrar la implementación más adelante si lo deseas). A esta cuenta de servicio se le asignan ciertos permisos de IAM de forma temporal; es decir, los permisos se revocan de forma automática después de que se completan las operaciones de implementación y eliminación de la solución. Google recomienda que, después de borrar la implementación, borres la cuenta de servicio, como se describe más adelante en esta guía.

Ve los roles asignados a la cuenta de servicio

Estos roles se enumeran aquí en caso de que un administrador de tu organización o proyecto de Google Cloud necesite 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

Elige un método de implementación

Para ayudarte a implementar esta solución con un esfuerzo mínimo, se proporciona una configuración de Terraform en GitHub. La configuración de Terraform define todos los recursos de Google Cloud que se requieren 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 deseas 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, puedes borrarla desde la consola. Es posible que cualquier recurso que crees después de implementar la solución deba borrarse por separado.

    Para usar este método de implementación, sigue las instrucciones en Implementa desde la consola.

  • Usa Terraform: Usa este método si quieres personalizar la solución o automatizar el aprovisionamiento y la administración de los recursos con el uso del enfoque de la infraestructura como código (IaC). Descarga la configuración de Terraform desde GitHub y de forma opcional personaliza el código según sea necesario e implementa la solución con Terraform. Después de implementar la solución, puedes seguir usando Terraform para administrarla.

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

Implementa a través de la consola

Completa los siguientes pasos para implementar la solución preconfigurada.

  1. En el catálogo de Soluciones de inicio rápido de Google Cloud, ve a la página App web de tres niveles.

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

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

  3. Cuando estés listo para comenzar la implementación de la solución, haz clic en Implementar.

    Se muestra una guía interactiva paso a paso.

  4. Completa los pasos de la guía interactiva.

    Toma nota del nombre que ingreses para la implementación. Este nombre es obligatorio más adelante cuando borres la implementación.

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

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

    Si la implementación falla, el campo Estado muestra Con errores. Puedes usar el registro de Cloud Build para diagnosticar los errores. Para obtener más información, consulta Errores cuando se implementa desde la consola.

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

  6. Para ver y usar la app de seguimiento de tareas que implementa esta solución, haz clic en Acciones en la página Implementaciones de soluciones y, luego, selecciona Ver app web.

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

  7. Para ver los recursos de Google Cloud que se implementan y su configuración, realiza un recorrido interactivo.

    Empieza el recorrido

Cuando ya no necesites la solución, puedes borrar la implementación para evitar que se sigan facturando los recursos de Google Cloud. Para obtener más información, consulta Borra la implementación.

Implementa con la CLI de Terraform

En esta sección, se describe cómo puedes personalizar la solución o automatizar el aprovisionamiento y la administración de la solución con CLI de Terraform. Las soluciones que implementas con el código de Terraform no se muestran en la página Implementaciones de soluciones en la consola de Google Cloud.

Configura 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 para 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 que confirmes la descarga del repositorio de GitHub en Cloud Shell.

  2. Haz clic en Confirmar.

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

  3. En Cloud Shell, verifica 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 para 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 con la ejecución del siguiente comando:

    terraform init
    

    Espera hasta ver el siguiente mensaje:

    Terraform has been successfully initialized!
    

Configura las variables de Terraform

El código de Terraform que descargaste incluye variables que puedes usar para personalizar la implementación según tus requisitos. Por ejemplo, puedes especificar el proyecto de Google Cloud y la región en la que deseas 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 establece los valores para 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 establecer valores. La configuración de Terraform incluye otras variables que tienen valores predeterminados. Para revisar todas las variables y los valores predeterminados, consulta el archivo variables.tf que está disponible en el directorio $HOME/cloudshell_open/terraform-google-three-tier-web-app/.
    • Asegúrate de que cada valor que establezcas en el archivo terraform.tfvars coincida con el tipo de variable como se declara en el archivo variables.tf. Por ejemplo, si el tipo que se define para una variable en el archivo variables.tf es bool, debes especificar true o false como el 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 puedes asignar a las variables obligatorias, consulta los siguientes vínculos:

Valida y revisa 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 muestra algún error, realiza las correcciones necesarias en la configuración y, luego, vuelve a ejecutar el comando terraform validate. Repite este paso hasta que el comando muestre el siguiente mensaje:

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

    terraform plan
    
  4. Si no creaste el archivo terraform.tfvars como se describió antes, Terraform te solicita que ingreses valores para las variables que no tienen valores predeterminados. Ingresa los valores obligatorios.

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

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

Aprovisiona los recursos

Cuando no se necesiten más cambios en la configuración de Terraform, implementa los recursos de la siguiente manera:

  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 creaste el archivo terraform.tfvars como se describió antes, Terraform te solicita que ingreses valores para las variables que no tienen valores predeterminados. Ingresa los valores obligatorios.

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

  4. Cuando se te solicite que realices las acciones, ingresa yes.

    Terraform muestra mensajes que señalan el progreso de la implementación.

    Si no se puede completar la implementación, Terraform muestra los errores que causaron la falla. Revisa los mensajes de error y actualiza la configuración para corregir los errores. Luego, vuelva a ejecutar el comando terraform apply. Para obtener ayuda con la solución de errores de Terraform, consulta Errores cuando se implementa 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 enumera la URL de frontend de la app 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 app de seguimiento de tareas que implementó la solución, copia la URL endpoint del paso anterior y abre la URL en un navegador.

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

  6. Para ver los recursos de Google Cloud que se implementan y su configuración, realiza un recorrido interactivo.

    Empieza el recorrido

Cuando ya no necesites la solución, puedes borrar la implementación para evitar que se sigan facturando los recursos de Google Cloud. Para obtener más información, consulta Borra la implementación.

Personaliza la solución

En esta sección, se proporciona información que los desarrolladores de Terraform pueden usar para modificar la solución de la aplicación web de tres niveles a fin de cumplir con sus propios requisitos técnicos y comerciales. La guía de esta sección es relevante solo si implementas la solución mediante la CLI de Terraform.

En la sección Configuración de recursos (que se muestra más arriba en esta guía), se enumeran los parámetros preconfigurados de los recursos de Google Cloud que aprovisiona la solución de app web de tres niveles. Puedes personalizar la solución si cambias algunos parámetros en el archivo main.tf.

Para personalizar la solución, completa los siguientes 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. Abre el archivo main.tf y realiza los cambios necesarios, como se muestra en los ejemplos de la siguiente tabla:

    Parámetro Código de Terraform
    Escalamiento de Cloud Run Argumento en el 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 en el archivo main.tf: redis_version

    Fragmento de código

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

    Precaución: La configuración de Terraform que proporciona Google se validó para Redis versión 6.x. Si cambias la versión, es posible que la solución implementada no funcione según lo previsto.

    Nivel de Redis Argumento en el archivo main.tf: tier

    Fragmento de código

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

    Fragmento de código

    
    resource "google_redis_instance" "main" {
      ...
      memory_size_gb = SIZE
      ...
    }
    Versión de PostgreSQL Argumento en el 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 que proporciona Google se validó para la versión 14 de PostgreSQL. Si cambias la versión, es posible que la solución implementada no funcione según lo previsto.

    Tipo de máquina de la base de datos Argumento en el 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 en el 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 proporcionan recomendaciones para usar la solución de app web de tres niveles a fin de desarrollar una arquitectura que cumpla con tus requisitos de seguridad, confiabilidad, costo y rendimiento.

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

Seguridad

Enfoque de diseño Recomendaciones
Encriptación de datos
  • De forma predeterminada, Cloud Run encripta los datos mediante una clave de encriptación administrada por Google. Para proteger tus contenedores mediante una clave que tú controlas, puedes usar claves de encriptación administradas por el cliente. Para obtener más información, consulta la página sobre Usa claves de encriptación administradas por el cliente.
  • De forma predeterminada, Memorystore usa claves de encriptación administradas por Google para encriptar datos en reposo. Para encriptar datos mediante una clave que tú controlas, puedes usar claves de encriptación administradas por el cliente. Para obtener más información, consulta Acerca de las claves de encriptación administradas por el cliente (CMEK).
  • Puedes habilitar la encriptación de datos en tránsito en Memorystore mediante el protocolo de seguridad de la capa de transporte (TLS). Para obtener más información, consulta Información acerca de la encriptación en tránsito.
Seguridad de la cadena de suministro del software Para garantizar que solo se implementen imágenes de contenedor autorizadas en los servicios de Cloud Run, puedes usar la autorización binaria.
Control de acceso
  • El servicio de Cloud Run que ejecuta la capa de la API permite la entrada desde cualquier fuente. Para mejorar la seguridad, puedes restringir la entrada a fin de permitir el tráfico solo desde las fuentes internas. Para obtener más información, consulta Restringe el ingreso a Cloud Run.
  • Para proteger tu aplicación del acceso no autorizado, puedes habilitar la función AUTH en Memorystore a fin de que las conexiones entrantes del cliente se autentiquen. Para obtener más información, consulta Información sobre Redis AUTH.

Confiabilidad

Enfoque de diseño Recomendaciones
Escalamiento de apps Los servicios de Cloud Run en la solución están configurados para realizar un ajuste de escala automático a las instancias de contenedor de forma horizontal según la carga de la solicitud. Revisa y ajusta los parámetros de ajuste de escala automático según tus requisitos. Para obtener más información, consulta Acerca del ajuste de escala automático de instancias de contenedor.
Cómo administrar solicitudes Para mejorar la capacidad de respuesta de los servicios de Cloud Run que almacenan estados específicos del cliente en instancias de contenedores, puedes usar la afinidad de sesión. Las solicitudes del mismo cliente se enrutan a la misma instancia de contenedor según el mejor esfuerzo. Para obtener más información, consulta Configura la afinidad de sesión (servicios).
Durabilidad de los datos Para proteger tus datos contra pérdidas, puedes usar copias de seguridad automáticas de la base de datos de Cloud SQL. Para obtener más información, consulta Acerca de las copias de seguridad de Cloud SQL.
Alta disponibilidad (HA) de la base de datos

La base de datos de Cloud SQL en la solución se implementa en una sola zona. Para la alta disponibilidad, puedes usar una configuración de varias zonas. Para obtener más información, consulta 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 de Google Cloud que puedes considerar.

Confiabilidad de la base de datos

La instancia de Cloud SQL en esta solución usa el tipo de máquina db-g1-small, que usa una CPU de núcleo compartido. Este tipo de máquina está diseñado para proporcionar recursos a una base de datos de bajo costo que podría ser adecuada solo para entornos de prueba y desarrollo. Si necesitas confiabilidad de nivel de producción, considera usar 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 se excluyen del ANS, consulta Lineamientos operativos.

HA de caché Para garantizar la alta disponibilidad de la capa de caché en la memoria en 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 una conmutación por error automática. Para obtener más información, consulta Capacidades de los niveles de Redis.

Costo

Enfoque de diseño Recomendaciones
Eficiencia de los recursos

Cloud Run determina la cantidad de solicitudes que se deben enviar a una instancia de contenedor según el uso de CPU y memoria. Mediante el aumento de la configuración de simultaneidad máxima, puedes reducir la cantidad de instancias de contenedor que Cloud Run necesita crear y, por lo tanto, reducir el costo. Para obtener más información, consulta Cantidad máxima de solicitudes simultáneas por instancia (servicios).

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

Uso de recursos

Si tu app necesita controlar las solicitudes de forma global, considera implementar los servicios de Cloud Run en varias regiones. La implementación entre regiones puede ayudar a reducir el costo del tráfico de transferencia de datos entre continentes. Google recomienda una implementación entre regiones si decides usar un balanceador de cargas y una CDN. Para obtener más información, consulta Entrega tráfico desde varias regiones.

Si deseas conocer más prácticas recomendadas para optimizar el costo de tus servicios de Cloud Run, consulta Optimiza el costo: Procesamiento, contenedores y modelo sin servidores.

Rendimiento de

Enfoque de diseño Recomendaciones
Tiempo de inicio de la app Para reducir el efecto de rendimiento de los inicios en frío, puedes configurar la cantidad mínima de instancias de contenedor de Cloud Run en un valor distinto de cero. Para obtener más información, consulta Sugerencias generales de desarrollo para Cloud Run.
Tiempo de respuesta del frontend

Si tu app maneja solicitudes de manera global, para ayudar a garantizar respuestas más rápidas a las solicitudes de los clientes, considera implementar los servicios de Cloud Run en varias regiones. Puedes usar un balanceador de cargas global para enrutar las solicitudes a la región más cercana. Para obtener más información, consulta Entrega tráfico desde varias regiones.

Las implementaciones multirregionales también pueden ayudar a reducir el volumen de tráfico de salida entre continentes y, por lo tanto, reducir el costo de operar la app.

Rendimiento de la base de datos

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

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

Rendimiento de la caché Para mejorar la experiencia de rendimiento de los usuarios de tu app, puedes aumentar la capacidad de la instancia de Memorystore para Redis. A mayores capacidades, la capacidad de procesamiento de la red es mayor. Si quieres obtener más información, consulta Prácticas recomendadas para la administración de memoria.

Ten en cuenta lo siguiente:

  • Antes de realizar cambios en el diseño, evalúa el impacto del costo y considera posibles compensaciones con otras características. Puedes evaluar el impacto del costo de los cambios de diseño con la calculadora de precios de Google Cloud.
  • Para implementar cambios de diseño en la solución, necesitas experiencia en codificación de Terraform y conocimiento avanzado de los servicios de Google Cloud que se usan en la solución.
  • Si modificas la configuración de Terraform que proporciona Google y, luego, experimentas errores, crea problemas en GitHub. Los problemas de GitHub se revisan según el criterio del mejor esfuerzo y no están destinados a preguntas de uso general.
  • Para obtener información sobre el diseño y la configuración de entornos de producción en Google Cloud, consulta Diseño de la zona de destino en Google Cloud y Lista de tareas para la configuración de Google Cloud.

Borra la implementación

Cuando ya no necesites la implementación de la solución, borra la implementación para evitar que se sigan facturando los recursos que creaste.

Borra a través de la consola

Usa este procedimiento si implementaste la solución a través de la consola.

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

    Ve a Implementaciones de soluciones

  2. Elige el proyecto que contenga la implementación que deseas borrar.

  3. Busca la implementación que deseas borrar.

  4. Haz clic en Acciones y elige Borrar.

  5. Ingresa el nombre de la implementación y, luego, haz clic en Confirmar.

    El campo Estado muestra Borrando.

    Si la eliminación falla, consulta la guía de solución de problemas en Error cuando se borra la implementación.

Cuando ya no necesites el proyecto de Google Cloud que usaste para la solución, puedes borrarlo. Para obtener más información, consulta Opcional: Borra el proyecto.

Borra con la CLI de Terraform

Usa este procedimiento si implementaste la solución con la CLI de Terraform.

  1. En Cloud Shell, 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. Quita los recursos que aprovisionó Terraform:

    terraform destroy
    

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

  3. Cuando se te solicite que realices las acciones, ingresa yes.

    Terraform mostrará mensajes que muestran el progreso. Después de borrar todos los recursos, Terraform muestra el siguiente mensaje:

    Destroy complete!
    

    Si la eliminación falla, consulta la guía de solución de problemas en Error cuando se borra la implementación.

Cuando ya no necesites el proyecto de Google Cloud que usaste para la solución, puedes borrarlo. Para obtener más información, consulta Opcional: Borra el proyecto.

Opcional: Borra el proyecto

Si implementaste la solución en un proyecto de Google Cloud nuevo y ya no lo necesitas, sigue estos pasos para borrarlo:

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

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. Cuando se te solicite, escribe el ID del proyecto y, luego, haz clic en Cerrar.

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

Opcional: Borra la cuenta de servicio

Si borraste el proyecto que usaste para la solución, omite esta sección.

Como se mencionó antes 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 asignaron ciertos permisos de IAM de forma temporal, es decir, los permisos se revocaron de forma automática después de que se completaron las operaciones de implementación y eliminación de la solución, pero la cuenta de servicio no se borró. Google recomienda que borres esta cuenta de servicio.

  • Si implementaste la solución desde la consola de Google Cloud, ve a la página Implementaciones de soluciones. (Si ya estás en esa página, actualiza el navegador). Un proceso se activa en segundo plano para borrar la cuenta de servicio. No es necesario hacer ninguna otra acción.

  • Si implementaste la solución con la CLI de Terraform, completa los siguientes pasos:

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

      Ir a Cuentas de servicio

    2. Elige el proyecto que usaste para la solución.

    3. Elige la cuenta de servicio que deseas borrar.

      El ID de correo electrónico de la cuenta de servicio que se creó para la solución tiene el siguiente formato:

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

      El ID de correo electrónico contiene los siguientes valores:

      • DEPLOYMENT_NAME: El nombre de la implementación.
      • NNN: Un número aleatorio de 3 dígitos.
      • PROJECT_ID: Es el ID del proyecto en el que implementaste la solución.
    4. Haz clic en Borrar.

Solucionar errores

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

Errores en la implementación a través de la consola

Si la implementación falla cuando usas la consola, haz lo siguiente:

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

    Si la implementación falló, el campo Estado muestra Con errores.

  2. Ve los detalles de los errores que causaron la falla:

    1. Haz clic en Acciones.

    2. Elige Ver registros de Cloud Build.

  3. Revisa el registro de Cloud Build y toma las medidas adecuadas para resolver el problema que causó la falla.

Errores en la implementación con la CLI de Terraform

Si la implementación falla cuando se usa 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 puedes encontrar cuando usas Terraform.

Error: API no habilitada

Si creas un proyecto y, luego, intentas implementar la solución en el proyecto nuevo de inmediato, la implementación podría fallar con 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 "No se puede asignar la dirección solicitada"

Cuando ejecutas el comando terraform apply, es posible que se produzca 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 que no se admiten, 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, el intent usaba 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, como se indica en la documentación de la API de REST de Memorystore.

Error cuando se borra una implementación

En algunos casos, los intentos de borrar una implementación podrían fallar:

  • Después de implementar una solución desde la consola, si cambias cualquier recurso que aprovisionó la solución y, luego, intentas borrar la implementación, la eliminación podría fallar. El campo Estado en la página Implementaciones de soluciones muestra Con errores, y el registro de Cloud Build muestra la causa del error.
  • Después de implementar una solución con Terraform, si cambias algún recurso con una interfaz que no es de Terraform (por ejemplo, la consola) y, luego, intentas borrar la implementación, la eliminación podría fallar. Los mensajes en el resultado del comando terraform destroy muestran la causa del error.

Revisa los registros de errores y los mensajes, identifica y borra los recursos que causaron el error y, luego, intenta borrar la implementación.

Si una implementación basada en la consola no se borra y no puedes diagnosticar el error con el registro de Cloud Build, puedes borrar la implementación con Terraform, como se describe en la siguiente sección.

Borra una implementación basada en la consola con la CLI de Terraform

En esta sección, se describe cómo borrar una implementación basada en la consola si se producen errores cuando intentas borrarla de la consola. En este enfoque, descarga la configuración de Terraform para la implementación que deseas borrar y, luego, usa Terraform para borrar la implementación.

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

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

      Ve a Implementaciones de soluciones

    2. Elige el proyecto que contenga la implementación que deseas borrar.

    3. En la lista de implementaciones, identifica la fila de la implementación que deseas borrar.

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

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

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

  2. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

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

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

    En estos comandos, reemplaza lo siguiente:

    • REGION: Es la ubicación que anotaste antes en este procedimiento.
    • PROJECT_ID: Es el ID del proyecto en el que implementaste la solución.
    • DEPLOYMENT_NAME: Es el nombre de la implementación que deseas borrar.
  4. Obtén el ID de la última revisión de la implementación que deseas borrar:

    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 es similar a este:

    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 para 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
    

    El siguiente es 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 desde Cloud Storage a Cloud Shell:

    gsutil cp -r $CONTENT_PATH $HOME
    cd $HOME/content/
    

    Espera hasta que aparezca el mensaje Operation completed, como se muestra en el siguiente ejemplo:

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

    terraform init
    

    Espera hasta ver el siguiente mensaje:

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

    terraform destroy
    

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

    Si se muestran advertencias sobre variables no declaradas, ignora las advertencias.

  9. Cuando se te solicite que realices las acciones, ingresa yes.

    Terraform mostrará mensajes que muestran el progreso. Después de borrar todos los recursos, Terraform muestra el siguiente mensaje:

    Destroy complete!
    
  10. Borra 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, luego, verifica que se haya borrado 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.

    Después de borrar el artefacto de implementación, aparece un mensaje como el que se muestra en el siguiente ejemplo:

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    

Enviar comentarios

Las soluciones de inicio rápido solo tienen fines informativos y no son productos compatibles de forma oficial. Google puede cambiar o quitar soluciones sin previo aviso.

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

Para enviar comentarios, haz lo siguiente:

  • Para ver la documentación, los instructivos en la consola o la solución, usa el botón Enviar comentarios en la página.
  • Para el código de Terraform sin modificar, crea problemas en el repositorio de GitHub. Los problemas de GitHub se revisan según el criterio del mejor esfuerzo y no están destinados a preguntas de uso general.

¿Qué sigue?

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