Solución Jump Start: app web de comercio electrónico implementada en Kubernetes

Last reviewed 2023-05-10 UTC

Esta guía te ayuda a comprender, implementar y usar la solución Jump Start de la app web de comercio electrónico implementada en Kubernetes. En esta solución, se muestra cómo compilar y ejecutar una aplicación de comercio electrónico simple para una organización de venta minorista, con un sitio web de tienda visible de forma pública. Muestra cómo crear una aplicación que pueda escalar para manejar los aumentos repentinos de uso (por ejemplo, durante eventos de escala máxima, como una oferta) y que pueda administrar solicitudes basadas en la ubicación del visitante, lo que ayuda a la tienda en línea a proporcionar un servicio coherente a una base de clientes distribuida de manera geográfica.

La aplicación se implementa como varios servicios pequeños, o microservicios, que se ejecutan en los clústeres de Kubernetes administrados por Google en Google Cloud. Cada servicio realiza una tarea específica, como proporcionar el frontend web o administrar el carrito de compras.

Esta solución es un buen punto de partida si necesitas la configuración y la flexibilidad que ofrecen las funciones de Kubernetes cuando administras tu sitio web. Una arquitectura de microservicios como esta también es especialmente útil si tienes un equipo de ingeniería más grande, ya que permite que los diferentes equipos o desarrolladores creen y administren diferentes partes de la aplicación por separado. Si esto no parece similar a tu organización, o si no estás seguro, considera probar nuestra solución App web de comercio electrónico implementada en Cloud Run. Usa Cloud Run para implementar una aplicación de tienda en línea similar sin necesidad de usar Kubernetes y no usa microservicios.

En este documento, se supone que estás familiarizado con los conceptos básicos de la nube, aunque no necesariamente con Google Cloud. Es útil tener experiencia en Terraform.

Acerca de Cymbal Shops

La aplicación que se usa en esta solución es una tienda en línea de demostración para una cadena de venta minorista imaginaria llamada Cymbal Shops, con un sitio web que los visitantes pueden usar para navegar por los productos de la empresa, agregar productos a su carrito, ir a la confirmación de la compra y comprar productos: puedes probarlo después de implementar la solución (aunque, por desgracia, no puedes comprar ninguno de los productos). Cymbal Shops tiene clientes en EE.UU. y Europa, por lo que necesita una solución de sitio web que no sea más lenta para algunos visitantes que para otros. Cymbal Shops también suele tener ventas y recibe muchos compradores durante las festividades, por lo que necesita que su sitio web pueda soportar aumentos de tráfico sin ralentizar ni tener otros problemas, y sin tener que gastar dinero en recursos en la nube que realmente no necesitan.

Productos usados

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

  • Google Kubernetes Engine (GKE): un entorno administrado para implementar, administrar y escalar aplicaciones en contenedores mediante la infraestructura de Google.
  • Ingress de varios clústeres: un servicio alojado por Google que admite la implementación de recursos de balanceo de cargas compartidos en clústeres y regiones.

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

Arquitectura

La solución implementa una aplicación de comercio electrónico con una interfaz web de acceso público. En el siguiente diagrama, se muestra la arquitectura de los recursos de Google Cloud que implementa la solución:

App web de comercio electrónico implementada en el diagrama de la solución de inicio de Kubernetes

Flujo de solicitud

A continuación, se muestra el flujo de procesamiento de solicitudes de la aplicación implementada. Los pasos del flujo están numerados como se muestra en el diagrama de arquitectura anterior.

  1. Un usuario interactúa con el sitio web de Cymbal Shops en su navegador, que envía una solicitud HTTP a un balanceador de cargas de Google Cloud. Este es un balanceador de cargas que se encuentra en el perímetro de la red de Google y dirige el tráfico al destino adecuado dentro de Google Cloud.
  2. La solicitud del usuario se dirige a uno de los dos clústeres de GKE en los que se ejecuta el frontend de la aplicación. De manera predeterminada, este es el clúster más cercano al usuario: en nuestro diagrama anterior, el clúster más cercano al usuario se encuentra en Europa, así que la solicitud va para allá. Obtendrás más información sobre cómo se configura con el servicio de Ingress de varios clústeres en la siguiente sección.
  3. Uno o más de los microservicios de backend que conforman el resto de la aplicación Cymbal Shop controlan la solicitud
  4. El cartservice de la aplicación almacena el estado del carrito de compras del usuario mientras visita el sitio con una base de datos de Redis. Una base de datos de Redis se implementa únicamente en el clúster de EE.UU.

Componentes y configuración

La app Cymbal Shops se ejecuta en clústeres de Google Kubernetes Engine (GKE). Kubernetes es un sistema de código abierto para automatizar la implementación, el escalamiento y la administración de aplicaciones en contenedores, en el que la aplicación se empaqueta (o aloja en contenedores) con sus dependencias de una manera que sea independiente de su entorno. Un clúster de Kubernetes es un conjunto de máquinas, llamadas nodos, que usas para ejecutar tus contenedores. GKE con Autopilot es el servicio de Kubernetes escalable y completamente automatizado de Google, en el que tus clústeres constan de máquinas virtuales de Compute Engine en Google Cloud.

La solución Cymbal Shops incluye los siguientes componentes:

  • Tres clústeres de GKE, de la siguiente manera:
    • Un clúster, conocido como clúster de configuración, que se usa a fin de administrar el servicio de Ingress de varios clústeres para la aplicación. Ingress de varios clústeres es un servicio que te permite balancear las cargas de tráfico en un conjunto específico de clústeres con una sola dirección IP virtual para tu aplicación.
    • Dos clústeres en diferentes regiones para ejecutar los microservicios de Cymbal Shops. Cada clúster tiene servicios idénticos de Cymbal Shops, que se ejecutan en los mismos espacios de nombres de Kubernetes. Esto permite que Ingress de varios clústeres trate a ambos servicios de frontend como si fueran el mismo servicio, y elige el clúster al que se enviará el tráfico según la proximidad al visitante del sitio web. Ingress de varios clústeres también se puede usar para garantizar que el tráfico se envíe solo a clústeres en buen estado, realizar lanzamientos graduales cuando se realice la actualización y mucho más.
  • Los tres clústeres de GKE tienen habilitado Autopilot. Autopilot es una función de GKE que te permite crear clústeres en los que Google administra la configuración de tus clústeres, incluidos los nodos, el escalamiento, la seguridad y otros parámetros de configuración ya establecidos. En el caso de Cymbal Shops, esto significa que, cuando hay más visitantes del sitio que de costumbre, los clústeres pueden escalar verticalmente de forma automática la cantidad de CPU, memoria y almacenamiento que usan según las necesidades de la aplicación. Con Autopilot habilitado, el administrador de la plataforma Cymbal Shops no tiene que preocuparse por solicitar (y pagar) más recursos de la nube de los que realmente necesita la mayor parte del tiempo, o arriesgarse a tener clústeres con recursos insuficientes para hacer frente al aumento de tráfico en los días de mayor actividad.

Costo

Consulta la página App web de comercio electrónico implementada en Kubernetes para obtener un costo mensual estimado según las ubicaciones predeterminadas de los recursos y el tiempo de uso estimado. Puedes obtener más información sobre los precios de GKE, Ingress de varios clústeres y Autopilot en la página de precios de GKE.

Implementa la solución

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

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 Config Manager
(roles/config.admin)

Cuenta de servicio creada para la solución

Cuando inicias el proceso de implementación, se 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.

Visualiza 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 Cloud necesite esta información.

  • roles/container.admin
  • roles/gkehub.editor
  • roles/compute.networkAdmin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/resourcemanager.projectIamAdmin
  • roles/serviceusage.serviceUsageAdmin

Elige un método de implementación

Puedes implementar esta solución con los siguientes métodos:

  • Desde la consola: Usa este método si deseas probar la solución como está 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 borrarla mediante 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 mediante el uso del enfoque de la infraestructura como código (IaC). Descarga la configuración de Terraform desde GitHub y opcionalmente personaliza el código según sea necesario e implementa la solución mediante 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 Terraform.

Implementar desde 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 solución App web de comercio electrónico implementada en Kubernetes.

    Ir a la app web de comercio electrónico implementada en la solución de Kubernetes

  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.

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.

Continúa con la sección Explora Cymbal Shops para descubrir cómo probar y explorar tu solución.

Implementa con 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 mediante Terraform. Las soluciones que implementas mediante el código de Terraform no se muestran en la página Implementaciones de soluciones en la consola de Google Cloud.

Una vez que termines con la solución, también puedes borrarla con Terraform; para ello, sigue las instrucciones en Borra con Terraform.

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-ecommerce-microservices-on-gke/infra. 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-ecommerce-microservices-on-gke/infra
    
  4. Inicializa Terraform mediante 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-ecommerce-microservices-on-gke/infra. 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-ecommerce-microservices-on-gke/infra.
    • 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"

Para obtener información sobre los valores que puedes asignar a la variable project_id, consulta Identifica proyectos.

Valida y revisa la configuración de Terraform

  1. Asegúrate de que el directorio de trabajo actual sea $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra. 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 realizar algún cambio, edita 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-ecommerce-microservices-on-gke/infra. 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 que se generan cuando se implementa la solución con Terraform.

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

    Apply complete!
    

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.

Continúa con la sección Explora Cymbal Shops para descubrir cómo probar y explorar tu solución.

Explora Cymbal Shops

¡Felicitaciones! Ya implementaste el sitio web de Cymbal Shops. Puedes visitar el sitio web de Cymbal Shops y echar un vistazo y, luego, explorar cómo funciona la solución en la consola de Google Cloud. Ten en cuenta que pueden transcurrir unos cinco minutos después de que la aplicación se implemente de forma correcta para que el sitio aparezca en la dirección proporcionada.

Visita el sitio de Cymbal Shops

La forma de encontrar el sitio de Cymbal Shops depende de cómo hayas implementado la solución.

Implementaciones de la consola

Si implementaste la solución desde la consola, puedes visitar el sitio directamente desde la página Implementaciones de soluciones:

  • Haz clic en el menú Acciones y selecciona Ver app web para visitar el sitio.

Implementaciones de Terraform

Si implementaste la solución con Terraform, primero busca la dirección IP para el frontend que proporciona Ingress de varios clústeres. Puedes hacerlo desde la línea de comandos mediante Google Cloud CLI (el enfoque más simple) o desde la consola de Google Cloud.

gcloud

  1. Asegúrate de tener la última versión de Google Cloud CLI instalada. Recomendamos ejecutar el comando desde Cloud Shell, donde la herramienta ya está instalada.
  2. Ejecuta el siguiente comando para obtener la dirección IP y reemplaza PROJECT_ID por el ID del proyecto de Google Cloud:

    gcloud compute addresses list \
       --filter="name=('multi-cluster-ingress-ip-address-1')" \
       --project=PROJECT_ID
    
  3. Copia y pega la dirección que muestra el comando en tu navegador para visitar el sitio web.

Consola

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Selecciona Navegador de objetos en el menú de navegación.

  3. En la lista Navegador de objetos, expande la sección networking.gke.io y, luego, selecciona MultiClusterIngress. Es posible que debas desplazarte hacia abajo para encontrar esta sección.

  4. En la página MultiClusterIngress, selecciona frontend-multi-cluster-ingress.

  5. En la página de detalles frontend-multi-cluster-ingress, busca la dirección IP. Haz clic en esta dirección para visitar el sitio web.

Explorar el sitio web

Ahora puedes interactuar con el sitio web de Cymbal Shops tal como lo verían sus clientes, lo que incluye, por ejemplo, navegar por los productos, agregar productos al carrito y pagar como invitado.

Explora tu solución

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

Empieza el recorrido

Borrar 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. Selecciona el proyecto que contenga la implementación que deseas borrar.

  3. Busca la implementación que deseas borrar.

  4. Haz clic en Acciones y selecciona 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 Terraform

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

  1. En Cloud Shell, asegúrate de que el directorio de trabajo actual sea $HOME/cloudshell_open/terraform-ecommerce-microservices-on-gke/infra. 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. Tu visita a esa página activa un proceso en el backend para borrar la cuenta de servicio. No es necesario realizar ninguna otra acción.

  • Si implementaste la solución con 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. Selecciona el proyecto que usaste para la solución.

    3. Selecciona 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 desde 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. Selecciona 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 mediante 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.

Se produjo un error cuando se creaba el atributo: el recurso ya existe

Si implementas esta solución en un proyecto en el que Ingress de varios clústeres ya está configurado, verás un error similar al siguiente:

Error: Error creating Feature: Resource already exists - apply blocked by lifecycle params: &beta.Feature{Name:(*string)(0xc0017d1d00), Labels:map[string]string{}, ResourceState:(*beta.FeatureResourceState)(0xc001b9d890), Spec:(*beta.FeatureSpec)(0xc001792f00), State:(*beta.FeatureState)(0xc001792f50), CreateTime:(*string)(0xc001792fd0), UpdateTime:(*string)(0xc001792ff0), DeleteTime:(*string)(nil), Project:(*string)(0xc0017d1d40), Location:(*string)(0xc0017d1ca0)}.
running tf apply: terraform apply failed: running terraform failed: exit status 1

Esto se debe a que esta solución implementa un clúster de GKE de configuración nuevo en el proyecto seleccionado. Un proyecto (en particular, la flota de un proyecto) puede contener solo un clúster de configuración para configurar Ingress de varios clústeres. Para solucionar este problema, quita el clúster de configuración de Ingress de varios clústeres existente o vuelve a comenzar en un proyecto nuevo.

Error: trabajo: default/kubernetes-manifests-deployer-job se encuentra en estado de error

Terraform de esta solución implementa un trabajo de Kubernetes llamado kubernetes-manifests-deployer-job. Este trabajo de Kubernetes implementa los recursos de Kubernetes (microservicios de Cymbal Shops, la base de datos de Redis, etc.) necesarios para esta solución en los tres clústeres.

Debido a que este trabajo de Kubernetes es complejo y depende de la preparación de los tres clústeres, puede que, en ocasiones, falle con un mensaje de error similar al siguiente:

kubernetes_job.kubernetes_manifests_deployer_job: Creation errored after 5m8s
...
Error: job: default/kubernetes-manifests-deployer-job is in failed state

Si recibes este error, es probable que algunos, si no todos, de la infraestructura de Google Cloud de la solución ya estén aprovisionados, aunque el resto de la implementación no se haya completado correctamente. Recomendamos borrar el proyecto para evitar que se te facturen estos recursos y reintentar la implementación en un proyecto nuevo independiente.

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 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 mediante Terraform, si cambias algún recurso mediante 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 mediante el registro de Cloud Build, puedes borrar la implementación mediante Terraform, como se describe en la siguiente sección.

Borra una implementación basada en la consola con 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 seleccionaste 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. Selecciona 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/infra
    

    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 mediante 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 Jump Start 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.
  • Si tienes problemas con los productos que se usan en la solución, comunícate con Atención al cliente de Cloud.

    También recomendamos revisar la lista de problemas (tanto abiertos como cerrados) en el repositorio de GitHub de la solución.

¿Qué sigue?