Esta guía le ayuda a comprender, implementar y utilizar la aplicación web dinámica con Python y JavaScript Jump Start Solution. Esta solución demuestra cómo crear y ejecutar sitios web dinámicos en Google Cloud.
La implementación y administración de esta aplicación sirve como ejemplo de implementación en el mundo real de la creación de una aplicación web dinámica con muchas de las herramientas y productos que puede usar para aplicaciones sin servidor. Puede implementar esta solución si desea obtener información sobre lo siguiente:
- Aplicación del marco REST de Django (DRF)
- Aplicación de escaparate
- Sitio web respaldado por bases de datos
Esta solución implementa la aplicación Avocano . Se trata de una tienda falsa, donde los usuarios pueden intentar comprar un artículo. Sin embargo, si un usuario agrega un artículo a su carrito, la tienda revela que es falso (Avoca, ¡no!). Aunque los usuarios en realidad no pueden comprar un aguacate, la aplicación ilustra la gestión de inventario al disminuir en uno la cantidad de producto disponible.
Avocano muestra la combinación de una API basada en Cloud Run, una base de datos Cloud SQL para PostgreSQL y una interfaz Firebase.
Consulte el código fuente de la aplicación Avocano .
Objetivos
Esta guía de solución le ayudará a aprender a utilizar Google Cloud para realizar las siguientes tareas:
- Implementar una aplicación web de acceso público
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Usar Secret Manager para almacenar contraseñas, claves y certificados.
- Otorgar solo los permisos de IAM necesarios para realizar la tarea. Esto también se conoce como aplicación del principio de privilegio mínimo.
- Implementar y operar los servicios backend.
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Personaliza tu aplicación
- Realice cambios de contenido o modifique la aplicación para agregar una función.
- Compile y vuelva a implementar de forma segura.
Productos utilizados
El siguiente es un resumen de la Google Cloud Productos que utiliza esta solución:
- Cloud Run : un servicio totalmente administrado que le permite crear e implementar aplicaciones en contenedores sin servidor. Google Cloud maneja el escalado y otras tareas de infraestructura para que usted pueda concentrarse en la lógica empresarial de su código.
- Jobs : Procesamiento de tareas basado en contenedores.
- Cloud Build : un servicio que le permite importar código fuente desde repositorios o espacios de Cloud Storage, ejecutar una compilación y producir artefactos como contenedores Docker o archivos Java.
- Cloud SQL para PostgreSQL : una base de datos de PostgreSQL basada en la nube que se administra completamente en el Google Cloudinfraestructura.
- Secret Manager : un servicio que le permite almacenar, administrar y acceder a secretos como blobs binarios o cadenas de texto. Puede utilizar Secret Manager para almacenar contraseñas de bases de datos, claves API o certificados TLS que necesita una aplicación en tiempo de ejecución.
- Almacenamiento en la nube : un servicio listo para la empresa que proporciona almacenamiento de objetos sin límites y de bajo costo para diversos tipos de datos. Los datos son accesibles desde dentro y fuera deGoogle Cloud y se replica de forma georredundante.
- Firebase : una plataforma de desarrollo que le permite crear, lanzar y monitorear aplicaciones para iOS, Android y la web.
Arquitectura
El siguiente diagrama muestra la arquitectura de la solución:
Componentes y configuración
La arquitectura incluye los siguientes componentes:
- El cliente web está alojado en Firebase Hosting.
- El cliente web llama a un backend de API escrito en Python que se ejecuta como un servicio en Cloud Run.
- La configuración y otros secretos de la aplicación Python se almacenan en Secret Manager.
- Cloud SQL para PostgreSQL se utiliza como backend de base de datos relacional para la aplicación Python.
- Los activos estáticos para la aplicación y las imágenes del contenedor se almacenan en Cloud Storage.
Costo
Para una estimación del costo de la Google Cloud recursos que utiliza la solución de aplicación web dinámica, consulte la estimación precalculada en la Google Cloud Calculadora de precios .
Utilice la estimación como punto de partida para calcular el costo de su implementación. Puede modificar la estimación para reflejar cualquier cambio de configuración que planee realizar para los recursos que se utilizan en la solución.
La estimación precalculada se basa en supuestos para ciertos factores, incluidos los siguientes:
- El Google Cloud Lugares donde se despliegan los recursos.
- La cantidad de tiempo que se utilizan los recursos.
Antes de comenzar
Para implementar esta solución, primero necesita un Google Cloud proyecto y algunos permisos de IAM.
Crea o elige un Google Cloud proyecto
Cuando implementas la solución, eliges el Google Cloud proyecto donde se despliegan los recursos. Puede crear un nuevo proyecto o utilizar un proyecto existente para la implementación.
Si desea crear un nuevo proyecto, hágalo antes de comenzar la implementación. El uso de un nuevo proyecto puede ayudar a evitar conflictos con recursos previamente aprovisionados, como los recursos que se utilizan para cargas de trabajo de producción.
Para crear un proyecto, complete los siguientes pasos:
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
Obtenga los permisos de IAM necesarios
Para iniciar el proceso de implementación, necesita los permisos de Administración de acceso e identidad (IAM) que se enumeran en la siguiente tabla.
Si creó un nuevo proyecto para esta solución, entonces tiene el rol básico de roles/owner
en ese proyecto y tiene todos los permisos necesarios. Si no tiene los roles/owner
, solicite a su administrador que le otorgue estos permisos (o los roles que incluyen estos permisos).
Se requiere permiso de IAM | Rol predefinido que incluye los permisos necesarios |
---|---|
| Administrador de uso del servicio ( roles/serviceusage.serviceUsageAdmin ) |
| Administrador de cuenta de servicio ( roles/iam.serviceAccountAdmin ) |
| Administrador de IAM del proyecto ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list | Administrador del administrador de infraestructura en la nube ( roles/config.admin ) |
iam.serviceAccount.actAs | Usuario de cuenta de servicio ( roles/iam.serviceAccountUser ) |
Acerca de los permisos temporales de cuentas de servicio
Si inicia el proceso de implementación a través de la consola, Google crea una cuenta de servicio para implementar la solución en su nombre (y eliminar la implementación más adelante, si así lo desea). A esta cuenta de servicio se le asignan temporalmente ciertos permisos de IAM; es decir, los permisos se revocan automáticamente una vez completadas las operaciones de implementación y eliminación de la solución. Google recomienda que después de eliminar la implementación, elimine la cuenta de servicio, como se describe más adelante en esta guía.
Ver los roles asignados a la cuenta de servicio
Estos roles se enumeran aquí en caso de que un administrador de suGoogle Cloud proyecto u organización necesita esta información.
-
roles/cloudsql.admin
-
roles/cloudsql.admin
-
roles/firebasehosting.admin
-
roles/iam.serviceAccountAdmin
-
roles/iam.serviceAccountUser
-
roles/resourcemanager.projectIamAdmin
-
roles/run.admin
-
roles/secretmanager.admin
-
roles/storage.admin
-
roles/compute.networkAdmin
-
roles/compute.admin
Implementar la solución
Para ayudarle a implementar esta solución con el mínimo esfuerzo, se proporciona una configuración de Terraform en GitHub. La configuración de Terraform define todos losGoogle Cloud recursos que se requieren para la solución.
Puede implementar la solución mediante uno de los siguientes métodos:
A través de la consola : utilice este método si desea 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 necesite la solución implementada, puede eliminarla a través de la consola. Es posible que sea necesario eliminar por separado todos los recursos que cree después de implementar la solución.
Para utilizar este método de implementación, siga las instrucciones en Implementación a través de la consola .
Uso de Terraform CLI : utilice este método si desea personalizar la solución o si desea automatizar el aprovisionamiento y la administración de los recursos mediante el enfoque de infraestructura como código (IaC). Descargue la configuración de Terraform desde GitHub,, opcionalmente, personalice el código según sea necesario y luego implemente la solución mediante la CLI de Terraform. Después de implementar la solución, puede continuar usando Terraform para administrarla.
Para utilizar este método de implementación, siga las instrucciones en Implementar mediante la CLI de Terraform .
Implementar a través de la consola
Complete los siguientes pasos para implementar la solución preconfigurada.
En el Google Cloud Catálogo de Jump Start Solutions, vaya a la solución Aplicación web dinámica con Python y JavaScript .
Ir a la solución Aplicación web dinámica con Python y JavaScript
Revise la información que se proporciona en la página, como el costo estimado de la solución y el tiempo estimado de implementación.
Cuando esté listo para comenzar a implementar la solución, haga clic en Implementar .
Se muestra un panel de configuración paso a paso.
Complete los pasos en el panel de configuración.
Anote el nombre que ingresa para la implementación. Este nombre será necesario más adelante cuando elimine la implementación.
Al hacer clic en Implementar , se muestra la página Implementaciones de soluciones . El campo Estado de esta página muestra Implementando .
Espere a que se implemente la solución.
Si la implementación falla, el campo Estado muestra Error . Puede utilizar el registro de Cloud Build para diagnosticar los errores. Para obtener más información, consulte Errores al implementar a través de la consola .
Una vez completada la implementación, el campo Estado cambia a Implementado .
Para ver y utilizar la solución, haga clic en el menú Acciones more_vert y seleccione Explorar esta solución .
Para obtener más información sobre cómo explorar la implementación de su solución, consulte Explorar su implementación .
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Implementar usando la CLI de Terraform
Esta sección describe cómo puede personalizar la solución o automatizar el aprovisionamiento y la administración de la solución mediante Terraform CLI. Las soluciones que implementa mediante la CLI de Terraform no se muestran en la página Implementaciones de soluciones en la Google Cloud consola.
Configurar el cliente Terraform
Puede ejecutar Terraform en Cloud Shell o en su host local. Esta guía describe cómo ejecutar Terraform en Cloud Shell, que tiene Terraform preinstalado y configurado para autenticarse con Google Cloud.
El código Terraform para esta solución está disponible en un repositorio de GitHub.
Clona el repositorio de GitHub en Cloud Shell.
Se muestra un mensaje para confirmar la descarga del repositorio de GitHub a Cloud Shell.
Haga clic en Confirmar .
Cloud Shell se inicia en una pestaña separada del navegador y el código Terraform se descarga en el directorio
$HOME/cloudshell_open
de su entorno de Cloud Shell.En Cloud Shell, verifique si el directorio de trabajo actual es
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Este es el directorio que contiene los archivos de configuración de Terraform para la solución. Si necesita cambiar a ese directorio, ejecute el siguiente comando:cd $HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
Inicialice Terraform ejecutando el siguiente comando:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Configurar las variables de Terraform
El código de Terraform que descargó incluye variables que puede usar para personalizar la implementación según sus requisitos. Por ejemplo, puede especificar el Google Cloud proyecto y la región donde desea que se implemente la solución.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.En el mismo directorio, cree un archivo de texto llamado
terraform.tfvars
.En el archivo
terraform.tfvars
, copie el siguiente fragmento de código y establezca valores para las variables requeridas.- Siga las instrucciones que se proporcionan como comentarios en el fragmento de código.
- Este fragmento de código incluye solo las variables para las que debe establecer valores. La configuración de Terraform incluye otras variables que tienen valores predeterminados. Para revisar todas las variables y los valores predeterminados, consulte el archivo
variables.tf
que está disponible en el directorio$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. - Asegúrese de que cada valor que establezca en el archivo
terraform.tfvars
coincida con el tipo de variable declarado en el archivovariables.tf
. Por ejemplo, si el tipo definido para una variable en el archivovariables.tf
esbool
, debe especificartrue
ofalse
como valor de esa variable en el archivoterraform.tfvars
.
# 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" # Whether or not to enable underlying APIs in this solution. # Example: true enable_apis = "ENABLE_APIS" # Initial image to deploy to Cloud Run service. # Example: gcr.io/hsa-public/developer-journey/app initial_run_image = "INITIAL_RUN_IMAGE" # Identifier for the deployment. Used in some resource names. # Example: dev-journey deployment_name = "DEPLOYMENT_NAME" # Whether or not to initialize a Firestore instance. # Example: true init_firestore = "INIT_FIRESTORE"
Para obtener información sobre los valores que puede asignar a las variables requeridas, consulte lo siguiente:
-
project_id
: Identificación de proyectos . -
regions
: Regiones disponibles . -
enable_apis
: configúrelo entrue
para habilitar las API subyacentes en esta solución. -
initial_run_image
: la URL de la imagen inicial que se implementará en el servicio Cloud Run. -
deployment_name
: Identificador de la implementación. -
init_firestore
: configúrelo entrue
para habilitar la inicialización de una instancia de Firestore.
Validar y revisar la configuración de Terraform
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Verifique que la configuración de Terraform no tenga errores:
terraform validate
Si el comando devuelve algún error, realice las correcciones necesarias en la configuración y luego ejecute el comando
terraform validate
nuevamente. Repita este paso hasta que el comando devuelva el siguiente mensaje:Success! The configuration is valid.
Revise los recursos que están definidos en la configuración:
terraform plan
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
El resultado del comando
terraform plan
es una lista de los recursos que Terraform aprovisiona cuando aplica la configuración.Si desea realizar algún cambio, edite la configuración y luego ejecute los comandos
terraform validate
yterraform plan
nuevamente.
Aprovisionar los recursos
Cuando no sean necesarios más cambios en la configuración de Terraform, implemente los recursos.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Aplique la configuración de Terraform:
terraform apply
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
Terraform muestra una lista de los recursos que se crearán.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso de la implementación.
Si no se puede completar la implementación, Terraform muestra los errores que causaron la falla. Revise los mensajes de error y actualice la configuración para corregir los errores. Luego ejecute nuevamente el comando
terraform apply
. Para obtener ayuda con la solución de errores de Terraform, consulte Errores al implementar la solución mediante la CLI de Terraform .Una vez creados todos los recursos, Terraform muestra el siguiente mensaje:
Apply complete!
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Explora tu implementación
Ha implementado su aplicación web dinámica de muestra. La implementación de su solución consta de múltiples servicios primarios que se han integrado en un único Google Cloud proyecto, incluyendo lo siguiente:
- Una interfaz de cliente de Firebase Hosting, escrita utilizando el marco Lit.
- Un servidor API de Cloud Run, escrito en Django utilizando Django REST Framework .
- Una base de datos Cloud SQL, usando PostgreSQL .
Para ver el Google Cloud Recursos que se despliegan y su configuración, realice un recorrido interactivo.
Opcional: personaliza tu aplicación
Para personalizar la aplicación web dinámica con la solución Python y JavaScript, puede realizar cambios en el frontend y el backend de la aplicación y luego volver a implementarla. Para seguir las instrucciones paso a paso para esta tarea directamente en Cloud Shell Editor, haga clic en Guíame.
Esta tarea tarda unos 15 minutos en completarse.
Eliminar la implementación
Cuando ya no necesite la implementación de la solución, para evitar la facturación continua de los recursos que creó, elimine la implementación.
Eliminar la implementación a través de la consola.
Utilice este procedimiento si implementó la solución a través de la consola.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
Localice la implementación que desea eliminar.
En la fila de la implementación, haga clic en
Acciones y luego seleccione Eliminar .Es posible que tengas que desplazarte para ver Acciones en la fila.
Ingrese el nombre de la implementación y luego haga clic en Confirmar .
El campo Estado muestra Eliminando .
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Eliminar la implementación mediante la CLI de Terraform
Utilice este procedimiento si implementó la solución mediante la CLI de Terraform.
En Cloud Shell, asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Elimine los recursos que fueron aprovisionados por Terraform:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Opcional: eliminar el proyecto
Si implementó la solución en un nuevo Google Cloud proyecto y, si ya no lo necesita, elimínelo completando los siguientes pasos:
- En el Google Cloud consola, vaya a la página Administrar recursos .
- En la lista de proyectos, seleccione el proyecto que desea eliminar y luego haga clic en Eliminar .
- Cuando se le solicite, escriba el ID del proyecto y luego haga clic en Apagar .
Si decide conservar el proyecto, elimine la cuenta de servicio que se creó para esta solución, como se describe en la siguiente sección.
Opcional: eliminar la cuenta de servicio
Si eliminó el proyecto que utilizó para la solución, omita esta sección.
Como se mencionó anteriormente en esta guía, cuando implementó la solución, se creó una cuenta de servicio en su nombre. A la cuenta de servicio se le asignaron ciertos permisos de IAM temporalmente ; es decir, los permisos se revocaron automáticamente 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 elimina. Google recomienda que elimine esta cuenta de servicio.
Si implementó la solución a través del Google Cloud consola, vaya a la página Implementaciones de soluciones . (Si ya está en esa página, actualice el navegador). Se activa un proceso en segundo plano para eliminar la cuenta de servicio. No es necesaria ninguna otra acción.
Si implementó la solución mediante la CLI de Terraform, complete los siguientes pasos:
En el Google Cloud consola, vaya a la página Cuentas de servicio .
Seleccione el proyecto que utilizó para la solución.
Seleccione la cuenta de servicio que desea eliminar.
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 : el ID del proyecto en el que implementó la solución.
Haga clic en Eliminar .
Solucionar errores
Las acciones que puede realizar 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 cuando usa la consola, haga lo siguiente:
Vaya a la página Implementaciones de soluciones .
Si la implementación falló, el campo Estado muestra Error .
Vea los detalles de los errores que causaron la falla:
En la fila de la implementación, haga clic en
Acciones .Es posible que tengas que desplazarte para ver Acciones en la fila.
Seleccione Ver registros de Cloud Build .
Revise el registro de Cloud Build y tome las medidas adecuadas para resolver el problema que provocó la falla.
Errores al implementar usando la CLI de Terraform
Si la implementación falla cuando usa Terraform, el resultado del comando terraform apply
incluye mensajes de error que puede revisar para diagnosticar el problema.
Los ejemplos de las siguientes secciones muestran errores de implementación que puede encontrar al utilizar Terraform.
Error de API no habilitada
Si crea un proyecto y luego intenta implementar inmediatamente la solución en el nuevo proyecto, 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, espere unos minutos y luego ejecute nuevamente el comando terraform apply
.
Error al eliminar una implementación
En determinados casos, los intentos de eliminar una implementación pueden fallar:
- Después de implementar una solución a través de la consola, si cambia algún recurso que fue aprovisionado por la solución y luego intenta eliminar la implementación, es posible que la eliminación falle. El campo Estado en la página Implementaciones de soluciones muestra Error y el registro de Cloud Build muestra la causa del error.
- Después de implementar una solución mediante la CLI de Terraform, si cambia cualquier recurso mediante una interfaz que no sea de Terraform (por ejemplo, la consola) y luego intenta eliminar la implementación, es posible que la eliminación falle. Los mensajes en la salida del comando
terraform destroy
muestran la causa del error.
Revise los registros y mensajes de error, identifique y elimine los recursos que causaron el error y luego intente eliminar la implementación nuevamente.
Si una implementación basada en consola no se elimina y no puede diagnosticar el error mediante el registro de Cloud Build, puede eliminar la implementación mediante la CLI de Terraform, como se describe en la siguiente sección.
Eliminar una implementación basada en consola mediante la CLI de Terraform
Esta sección describe cómo eliminar una implementación basada en consola si se producen errores al intentar eliminarla a través de la consola. En este enfoque, descarga la configuración de Terraform para la implementación que desea eliminar y luego usa la CLI de Terraform para eliminar la implementación.
Identifique la región donde se almacenan el código Terraform, los registros y otros datos de la implementación. Esta región puede ser diferente de la región que seleccionó al implementar la solución.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
En la lista de implementaciones, identifique la fila de la implementación que desea eliminar.
Haga clic en
Ver todo el contenido de la fila .En la columna Ubicación , observe la segunda ubicación, como se resalta en el siguiente ejemplo:
In the Google Cloud console, 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.
Cree variables de entorno para el ID del proyecto, la región y el nombre de la implementación que desea eliminar:
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
En estos comandos, reemplace lo siguiente:
- REGION : la ubicación que anotó anteriormente en este procedimiento.
- PROJECT_ID : el ID del proyecto donde implementó la solución.
- DEPLOYMENT_NAME : el nombre de la implementación que desea eliminar.
Obtenga el ID de la última revisión de la implementación que desea 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 es similar al siguiente:
projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
Obtenga 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
Descargue la configuración de Terraform desde Cloud Storage a Cloud Shell:
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/infra
Espere hasta que aparezca el mensaje
Operation completed
, como se muestra en el siguiente ejemplo:Operation completed over 45 objects/268.5 KiB
Inicializar Terraform:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Elimine los recursos implementados:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Si se muestra alguna advertencia sobre variables no declaradas, ignórela.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Elimine 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"
Espere unos segundos y luego verifique que se eliminó 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
, espere unos segundos y luego ejecute el comando nuevamente.Una vez eliminado el artefacto de implementación, se muestra un mensaje como el que se muestra en el siguiente ejemplo:
Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
No se puede asignar el error de dirección solicitada
Cuando ejecuta 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, ejecute nuevamente el comando terraform apply
.
Enviar comentarios
Las soluciones Jump Start tienen fines informativos únicamente y no son productos con soporte oficial. Google puede cambiar o eliminar soluciones sin previo aviso.
Para solucionar errores, revise los registros de Cloud Build y la salida de Terraform.
Para enviar comentarios, haga lo siguiente:
- Para obtener documentación, tutoriales en la consola o la solución, utilice el botón Enviar comentarios en la página.
Para código no modificado, cree problemas en el repositorio de GitHub correspondiente:
Los problemas de GitHub se revisan según el mejor esfuerzo y no están destinados a preguntas de uso general.
- Si tiene problemas con los productos que se utilizan en la solución, comuníquese con Atención al cliente en la nube .
¿Qué sigue?
Para seguir aprendiendo más sobre Google Cloud productos y capacidades, consulte:
,Esta guía le ayuda a comprender, implementar y utilizar la aplicación web dinámica con Python y JavaScript Jump Start Solution. Esta solución demuestra cómo crear y ejecutar sitios web dinámicos en Google Cloud.
La implementación y administración de esta aplicación sirve como ejemplo de implementación en el mundo real de la creación de una aplicación web dinámica con muchas de las herramientas y productos que puede usar para aplicaciones sin servidor. Puede implementar esta solución si desea obtener información sobre lo siguiente:
- Aplicación del marco REST de Django (DRF)
- Aplicación de escaparate
- Sitio web respaldado por bases de datos
Esta solución implementa la aplicación Avocano . Se trata de una tienda falsa, donde los usuarios pueden intentar comprar un artículo. Sin embargo, si un usuario agrega un artículo a su carrito, la tienda revela que es falso (Avoca, ¡no!). Aunque los usuarios en realidad no pueden comprar un aguacate, la aplicación ilustra la gestión de inventario al disminuir en uno la cantidad de producto disponible.
Avocano muestra la combinación de una API basada en Cloud Run, una base de datos Cloud SQL para PostgreSQL y una interfaz Firebase.
Consulte el código fuente de la aplicación Avocano .
Objetivos
Esta guía de solución le ayudará a aprender a utilizar Google Cloud para realizar las siguientes tareas:
- Implementar una aplicación web de acceso público
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Usar Secret Manager para almacenar contraseñas, claves y certificados.
- Otorgar solo los permisos de IAM necesarios para realizar la tarea. Esto también se conoce como aplicación del principio de privilegio mínimo.
- Implementar y operar los servicios backend.
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Personaliza tu aplicación
- Realice cambios de contenido o modifique la aplicación para agregar una función.
- Compile y vuelva a implementar de forma segura.
Productos utilizados
El siguiente es un resumen de la Google Cloud Productos que utiliza esta solución:
- Cloud Run : un servicio totalmente administrado que le permite crear e implementar aplicaciones en contenedores sin servidor. Google Cloud maneja el escalado y otras tareas de infraestructura para que usted pueda concentrarse en la lógica empresarial de su código.
- Jobs : Procesamiento de tareas basado en contenedores.
- Cloud Build : un servicio que le permite importar código fuente desde repositorios o espacios de Cloud Storage, ejecutar una compilación y producir artefactos como contenedores Docker o archivos Java.
- Cloud SQL para PostgreSQL : una base de datos de PostgreSQL basada en la nube que se administra completamente en el Google Cloudinfraestructura.
- Secret Manager : un servicio que le permite almacenar, administrar y acceder a secretos como blobs binarios o cadenas de texto. Puede utilizar Secret Manager para almacenar contraseñas de bases de datos, claves API o certificados TLS que necesita una aplicación en tiempo de ejecución.
- Almacenamiento en la nube : un servicio listo para la empresa que proporciona almacenamiento de objetos sin límites y de bajo costo para diversos tipos de datos. Los datos son accesibles desde dentro y fuera deGoogle Cloud y se replica de forma georredundante.
- Firebase : una plataforma de desarrollo que le permite crear, lanzar y monitorear aplicaciones para iOS, Android y la web.
Arquitectura
El siguiente diagrama muestra la arquitectura de la solución:
Componentes y configuración
La arquitectura incluye los siguientes componentes:
- El cliente web está alojado en Firebase Hosting.
- El cliente web llama a un backend de API escrito en Python que se ejecuta como un servicio en Cloud Run.
- La configuración y otros secretos de la aplicación Python se almacenan en Secret Manager.
- Cloud SQL para PostgreSQL se utiliza como backend de base de datos relacional para la aplicación Python.
- Los activos estáticos para la aplicación y las imágenes del contenedor se almacenan en Cloud Storage.
Costo
Para una estimación del costo de la Google Cloud recursos que utiliza la solución de aplicación web dinámica, consulte la estimación precalculada en la Google Cloud Calculadora de precios .
Utilice la estimación como punto de partida para calcular el costo de su implementación. Puede modificar la estimación para reflejar cualquier cambio de configuración que planee realizar para los recursos que se utilizan en la solución.
La estimación precalculada se basa en supuestos para ciertos factores, incluidos los siguientes:
- El Google Cloud Lugares donde se despliegan los recursos.
- La cantidad de tiempo que se utilizan los recursos.
Antes de comenzar
Para implementar esta solución, primero necesita un Google Cloud proyecto y algunos permisos de IAM.
Crea o elige un Google Cloud proyecto
Cuando implementas la solución, eliges el Google Cloud proyecto donde se despliegan los recursos. Puede crear un nuevo proyecto o utilizar un proyecto existente para la implementación.
Si desea crear un nuevo proyecto, hágalo antes de comenzar la implementación. El uso de un nuevo proyecto puede ayudar a evitar conflictos con recursos previamente aprovisionados, como los recursos que se utilizan para cargas de trabajo de producción.
Para crear un proyecto, complete los siguientes pasos:
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
Obtenga los permisos de IAM necesarios
Para iniciar el proceso de implementación, necesita los permisos de Administración de acceso e identidad (IAM) que se enumeran en la siguiente tabla.
Si creó un nuevo proyecto para esta solución, entonces tiene el rol básico de roles/owner
en ese proyecto y tiene todos los permisos necesarios. Si no tiene los roles/owner
, solicite a su administrador que le otorgue estos permisos (o los roles que incluyen estos permisos).
Se requiere permiso de IAM | Rol predefinido que incluye los permisos necesarios |
---|---|
| Administrador de uso del servicio ( roles/serviceusage.serviceUsageAdmin ) |
| Administrador de cuenta de servicio ( roles/iam.serviceAccountAdmin ) |
| Administrador de IAM del proyecto ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list | Administrador del administrador de infraestructura en la nube ( roles/config.admin ) |
iam.serviceAccount.actAs | Usuario de cuenta de servicio ( roles/iam.serviceAccountUser ) |
Acerca de los permisos temporales de cuentas de servicio
Si inicia el proceso de implementación a través de la consola, Google crea una cuenta de servicio para implementar la solución en su nombre (y eliminar la implementación más adelante, si así lo desea). A esta cuenta de servicio se le asignan temporalmente ciertos permisos de IAM; es decir, los permisos se revocan automáticamente una vez completadas las operaciones de implementación y eliminación de la solución. Google recomienda que después de eliminar la implementación, elimine la cuenta de servicio, como se describe más adelante en esta guía.
Ver los roles asignados a la cuenta de servicio
Estos roles se enumeran aquí en caso de que un administrador de suGoogle Cloud proyecto u organización necesita esta información.
-
roles/cloudsql.admin
-
roles/cloudsql.admin
-
roles/firebasehosting.admin
-
roles/iam.serviceAccountAdmin
-
roles/iam.serviceAccountUser
-
roles/resourcemanager.projectIamAdmin
-
roles/run.admin
-
roles/secretmanager.admin
-
roles/storage.admin
-
roles/compute.networkAdmin
-
roles/compute.admin
Implementar la solución
Para ayudarle a implementar esta solución con el mínimo esfuerzo, se proporciona una configuración de Terraform en GitHub. La configuración de Terraform define todos losGoogle Cloud recursos que se requieren para la solución.
Puede implementar la solución mediante uno de los siguientes métodos:
A través de la consola : utilice este método si desea 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 necesite la solución implementada, puede eliminarla a través de la consola. Es posible que sea necesario eliminar por separado todos los recursos que cree después de implementar la solución.
Para utilizar este método de implementación, siga las instrucciones en Implementación a través de la consola .
Uso de Terraform CLI : utilice este método si desea personalizar la solución o si desea automatizar el aprovisionamiento y la administración de los recursos mediante el enfoque de infraestructura como código (IaC). Descargue la configuración de Terraform desde GitHub,, opcionalmente, personalice el código según sea necesario y luego implemente la solución mediante la CLI de Terraform. Después de implementar la solución, puede continuar usando Terraform para administrarla.
Para utilizar este método de implementación, siga las instrucciones en Implementar mediante la CLI de Terraform .
Implementar a través de la consola
Complete los siguientes pasos para implementar la solución preconfigurada.
En el Google Cloud Catálogo de Jump Start Solutions, vaya a la solución Aplicación web dinámica con Python y JavaScript .
Ir a la solución Aplicación web dinámica con Python y JavaScript
Revise la información que se proporciona en la página, como el costo estimado de la solución y el tiempo estimado de implementación.
Cuando esté listo para comenzar a implementar la solución, haga clic en Implementar .
Se muestra un panel de configuración paso a paso.
Complete los pasos en el panel de configuración.
Anote el nombre que ingresa para la implementación. Este nombre será necesario más adelante cuando elimine la implementación.
Al hacer clic en Implementar , se muestra la página Implementaciones de soluciones . El campo Estado de esta página muestra Implementando .
Espere a que se implemente la solución.
Si la implementación falla, el campo Estado muestra Error . Puede utilizar el registro de Cloud Build para diagnosticar los errores. Para obtener más información, consulte Errores al implementar a través de la consola .
Una vez completada la implementación, el campo Estado cambia a Implementado .
Para ver y utilizar la solución, haga clic en el menú Acciones more_vert y seleccione Explorar esta solución .
Para obtener más información sobre cómo explorar la implementación de su solución, consulte Explorar su implementación .
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Implementar usando la CLI de Terraform
Esta sección describe cómo puede personalizar la solución o automatizar el aprovisionamiento y la administración de la solución mediante Terraform CLI. Las soluciones que implementa mediante la CLI de Terraform no se muestran en la página Implementaciones de soluciones en la Google Cloud consola.
Configurar el cliente Terraform
Puede ejecutar Terraform en Cloud Shell o en su host local. Esta guía describe cómo ejecutar Terraform en Cloud Shell, que tiene Terraform preinstalado y configurado para autenticarse con Google Cloud.
El código Terraform para esta solución está disponible en un repositorio de GitHub.
Clona el repositorio de GitHub en Cloud Shell.
Se muestra un mensaje para confirmar la descarga del repositorio de GitHub a Cloud Shell.
Haga clic en Confirmar .
Cloud Shell se inicia en una pestaña separada del navegador y el código Terraform se descarga en el directorio
$HOME/cloudshell_open
de su entorno de Cloud Shell.En Cloud Shell, verifique si el directorio de trabajo actual es
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Este es el directorio que contiene los archivos de configuración de Terraform para la solución. Si necesita cambiar a ese directorio, ejecute el siguiente comando:cd $HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
Inicialice Terraform ejecutando el siguiente comando:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Configurar las variables de Terraform
El código de Terraform que descargó incluye variables que puede usar para personalizar la implementación según sus requisitos. Por ejemplo, puede especificar el Google Cloud proyecto y la región donde desea que se implemente la solución.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.En el mismo directorio, cree un archivo de texto llamado
terraform.tfvars
.En el archivo
terraform.tfvars
, copie el siguiente fragmento de código y establezca valores para las variables requeridas.- Siga las instrucciones que se proporcionan como comentarios en el fragmento de código.
- Este fragmento de código incluye solo las variables para las que debe establecer valores. La configuración de Terraform incluye otras variables que tienen valores predeterminados. Para revisar todas las variables y los valores predeterminados, consulte el archivo
variables.tf
que está disponible en el directorio$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. - Asegúrese de que cada valor que establezca en el archivo
terraform.tfvars
coincida con el tipo de variable declarado en el archivovariables.tf
. Por ejemplo, si el tipo definido para una variable en el archivovariables.tf
esbool
, debe especificartrue
ofalse
como valor de esa variable en el archivoterraform.tfvars
.
# 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" # Whether or not to enable underlying APIs in this solution. # Example: true enable_apis = "ENABLE_APIS" # Initial image to deploy to Cloud Run service. # Example: gcr.io/hsa-public/developer-journey/app initial_run_image = "INITIAL_RUN_IMAGE" # Identifier for the deployment. Used in some resource names. # Example: dev-journey deployment_name = "DEPLOYMENT_NAME" # Whether or not to initialize a Firestore instance. # Example: true init_firestore = "INIT_FIRESTORE"
Para obtener información sobre los valores que puede asignar a las variables requeridas, consulte lo siguiente:
-
project_id
: Identificación de proyectos . -
regions
: Regiones disponibles . -
enable_apis
: configúrelo entrue
para habilitar las API subyacentes en esta solución. -
initial_run_image
: la URL de la imagen inicial que se implementará en el servicio Cloud Run. -
deployment_name
: Identificador de la implementación. -
init_firestore
: configúrelo entrue
para habilitar la inicialización de una instancia de Firestore.
Validar y revisar la configuración de Terraform
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Verifique que la configuración de Terraform no tenga errores:
terraform validate
Si el comando devuelve algún error, realice las correcciones necesarias en la configuración y luego ejecute el comando
terraform validate
nuevamente. Repita este paso hasta que el comando devuelva el siguiente mensaje:Success! The configuration is valid.
Revise los recursos que están definidos en la configuración:
terraform plan
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
El resultado del comando
terraform plan
es una lista de los recursos que Terraform aprovisiona cuando aplica la configuración.Si desea realizar algún cambio, edite la configuración y luego ejecute los comandos
terraform validate
yterraform plan
nuevamente.
Aprovisionar los recursos
Cuando no sean necesarios más cambios en la configuración de Terraform, implemente los recursos.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Aplique la configuración de Terraform:
terraform apply
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
Terraform muestra una lista de los recursos que se crearán.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso de la implementación.
Si no se puede completar la implementación, Terraform muestra los errores que causaron la falla. Revise los mensajes de error y actualice la configuración para corregir los errores. Luego ejecute nuevamente el comando
terraform apply
. Para obtener ayuda con la solución de errores de Terraform, consulte Errores al implementar la solución mediante la CLI de Terraform .Una vez creados todos los recursos, Terraform muestra el siguiente mensaje:
Apply complete!
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Explora tu implementación
Ha implementado su aplicación web dinámica de muestra. La implementación de su solución consta de múltiples servicios primarios que se han integrado en un único Google Cloud proyecto, incluyendo lo siguiente:
- Una interfaz de cliente de Firebase Hosting, escrita utilizando el marco Lit.
- Un servidor API de Cloud Run, escrito en Django utilizando Django REST Framework .
- Una base de datos Cloud SQL, usando PostgreSQL .
Para ver el Google Cloud Recursos que se despliegan y su configuración, realice un recorrido interactivo.
Opcional: personaliza tu aplicación
Para personalizar la aplicación web dinámica con la solución Python y JavaScript, puede realizar cambios en el frontend y el backend de la aplicación y luego volver a implementarla. Para seguir las instrucciones paso a paso para esta tarea directamente en Cloud Shell Editor, haga clic en Guíame.
Esta tarea tarda unos 15 minutos en completarse.
Eliminar la implementación
Cuando ya no necesite la implementación de la solución, para evitar la facturación continua de los recursos que creó, elimine la implementación.
Eliminar la implementación a través de la consola.
Utilice este procedimiento si implementó la solución a través de la consola.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
Localice la implementación que desea eliminar.
En la fila de la implementación, haga clic en
Acciones y luego seleccione Eliminar .Es posible que tengas que desplazarte para ver Acciones en la fila.
Ingrese el nombre de la implementación y luego haga clic en Confirmar .
El campo Estado muestra Eliminando .
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Eliminar la implementación mediante la CLI de Terraform
Utilice este procedimiento si implementó la solución mediante la CLI de Terraform.
En Cloud Shell, asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Elimine los recursos que fueron aprovisionados por Terraform:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Opcional: eliminar el proyecto
Si implementó la solución en un nuevo Google Cloud proyecto y, si ya no lo necesita, elimínelo completando los siguientes pasos:
- En el Google Cloud consola, vaya a la página Administrar recursos .
- En la lista de proyectos, seleccione el proyecto que desea eliminar y luego haga clic en Eliminar .
- Cuando se le solicite, escriba el ID del proyecto y luego haga clic en Apagar .
Si decide conservar el proyecto, elimine la cuenta de servicio que se creó para esta solución, como se describe en la siguiente sección.
Opcional: eliminar la cuenta de servicio
Si eliminó el proyecto que utilizó para la solución, omita esta sección.
Como se mencionó anteriormente en esta guía, cuando implementó la solución, se creó una cuenta de servicio en su nombre. A la cuenta de servicio se le asignaron ciertos permisos de IAM temporalmente ; es decir, los permisos se revocaron automáticamente 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 elimina. Google recomienda que elimine esta cuenta de servicio.
Si implementó la solución a través del Google Cloud consola, vaya a la página Implementaciones de soluciones . (Si ya está en esa página, actualice el navegador). Se activa un proceso en segundo plano para eliminar la cuenta de servicio. No es necesaria ninguna otra acción.
Si implementó la solución mediante la CLI de Terraform, complete los siguientes pasos:
En el Google Cloud consola, vaya a la página Cuentas de servicio .
Seleccione el proyecto que utilizó para la solución.
Seleccione la cuenta de servicio que desea eliminar.
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 : el ID del proyecto en el que implementó la solución.
Haga clic en Eliminar .
Solucionar errores
Las acciones que puede realizar 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 cuando usa la consola, haga lo siguiente:
Vaya a la página Implementaciones de soluciones .
Si la implementación falló, el campo Estado muestra Error .
Vea los detalles de los errores que causaron la falla:
En la fila de la implementación, haga clic en
Acciones .Es posible que tengas que desplazarte para ver Acciones en la fila.
Seleccione Ver registros de Cloud Build .
Revise el registro de Cloud Build y tome las medidas adecuadas para resolver el problema que provocó la falla.
Errores al implementar usando la CLI de Terraform
Si la implementación falla cuando usa Terraform, el resultado del comando terraform apply
incluye mensajes de error que puede revisar para diagnosticar el problema.
Los ejemplos de las siguientes secciones muestran errores de implementación que puede encontrar al utilizar Terraform.
Error de API no habilitada
Si crea un proyecto y luego intenta implementar inmediatamente la solución en el nuevo proyecto, 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, espere unos minutos y luego ejecute nuevamente el comando terraform apply
.
Error al eliminar una implementación
En determinados casos, los intentos de eliminar una implementación pueden fallar:
- Después de implementar una solución a través de la consola, si cambia algún recurso que fue aprovisionado por la solución y luego intenta eliminar la implementación, es posible que la eliminación falle. El campo Estado en la página Implementaciones de soluciones muestra Error y el registro de Cloud Build muestra la causa del error.
- Después de implementar una solución mediante la CLI de Terraform, si cambia cualquier recurso mediante una interfaz que no sea de Terraform (por ejemplo, la consola) y luego intenta eliminar la implementación, es posible que la eliminación falle. Los mensajes en la salida del comando
terraform destroy
muestran la causa del error.
Revise los registros y mensajes de error, identifique y elimine los recursos que causaron el error y luego intente eliminar la implementación nuevamente.
Si una implementación basada en consola no se elimina y no puede diagnosticar el error mediante el registro de Cloud Build, puede eliminar la implementación mediante la CLI de Terraform, como se describe en la siguiente sección.
Eliminar una implementación basada en consola mediante la CLI de Terraform
Esta sección describe cómo eliminar una implementación basada en consola si se producen errores al intentar eliminarla a través de la consola. En este enfoque, descarga la configuración de Terraform para la implementación que desea eliminar y luego usa la CLI de Terraform para eliminar la implementación.
Identifique la región donde se almacenan el código Terraform, los registros y otros datos de la implementación. Esta región puede ser diferente de la región que seleccionó al implementar la solución.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
En la lista de implementaciones, identifique la fila de la implementación que desea eliminar.
Haga clic en
Ver todo el contenido de la fila .En la columna Ubicación , observe la segunda ubicación, como se resalta en el siguiente ejemplo:
In the Google Cloud console, 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.
Cree variables de entorno para el ID del proyecto, la región y el nombre de la implementación que desea eliminar:
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
En estos comandos, reemplace lo siguiente:
- REGION : la ubicación que anotó anteriormente en este procedimiento.
- PROJECT_ID : el ID del proyecto donde implementó la solución.
- DEPLOYMENT_NAME : el nombre de la implementación que desea eliminar.
Obtenga el ID de la última revisión de la implementación que desea 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 es similar al siguiente:
projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
Obtenga 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
Descargue la configuración de Terraform desde Cloud Storage a Cloud Shell:
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/infra
Espere hasta que aparezca el mensaje
Operation completed
, como se muestra en el siguiente ejemplo:Operation completed over 45 objects/268.5 KiB
Inicializar Terraform:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Elimine los recursos implementados:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Si se muestra alguna advertencia sobre variables no declaradas, ignórela.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Elimine 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"
Espere unos segundos y luego verifique que se eliminó 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
, espere unos segundos y luego ejecute el comando nuevamente.Una vez eliminado el artefacto de implementación, se muestra un mensaje como el que se muestra en el siguiente ejemplo:
Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
No se puede asignar el error de dirección solicitada
Cuando ejecuta 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, ejecute nuevamente el comando terraform apply
.
Enviar comentarios
Las soluciones Jump Start tienen fines informativos únicamente y no son productos con soporte oficial. Google puede cambiar o eliminar soluciones sin previo aviso.
Para solucionar errores, revise los registros de Cloud Build y la salida de Terraform.
Para enviar comentarios, haga lo siguiente:
- Para obtener documentación, tutoriales en la consola o la solución, utilice el botón Enviar comentarios en la página.
Para código no modificado, cree problemas en el repositorio de GitHub correspondiente:
Los problemas de GitHub se revisan según el mejor esfuerzo y no están destinados a preguntas de uso general.
- Si tiene problemas con los productos que se utilizan en la solución, comuníquese con Atención al cliente en la nube .
¿Qué sigue?
Para seguir aprendiendo más sobre Google Cloud productos y capacidades, consulte:
,Esta guía le ayuda a comprender, implementar y utilizar la aplicación web dinámica con Python y JavaScript Jump Start Solution. Esta solución demuestra cómo crear y ejecutar sitios web dinámicos en Google Cloud.
La implementación y administración de esta aplicación sirve como ejemplo de implementación en el mundo real de la creación de una aplicación web dinámica con muchas de las herramientas y productos que puede usar para aplicaciones sin servidor. Puede implementar esta solución si desea obtener información sobre lo siguiente:
- Aplicación del marco REST de Django (DRF)
- Aplicación de escaparate
- Sitio web respaldado por bases de datos
Esta solución implementa la aplicación Avocano . Se trata de una tienda falsa, donde los usuarios pueden intentar comprar un artículo. Sin embargo, si un usuario agrega un artículo a su carrito, la tienda revela que es falso (Avoca, ¡no!). Aunque los usuarios en realidad no pueden comprar un aguacate, la aplicación ilustra la gestión de inventario al disminuir en uno la cantidad de producto disponible.
Avocano muestra la combinación de una API basada en Cloud Run, una base de datos Cloud SQL para PostgreSQL y una interfaz Firebase.
Consulte el código fuente de la aplicación Avocano .
Objetivos
Esta guía de solución le ayudará a aprender a utilizar Google Cloud para realizar las siguientes tareas:
- Implementar una aplicación web de acceso público
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Usar Secret Manager para almacenar contraseñas, claves y certificados.
- Otorgar solo los permisos de IAM necesarios para realizar la tarea. Esto también se conoce como aplicación del principio de privilegio mínimo.
- Implementar y operar los servicios backend.
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Personaliza tu aplicación
- Realice cambios de contenido o modifique la aplicación para agregar una función.
- Compile y vuelva a implementar de forma segura.
Productos utilizados
El siguiente es un resumen de la Google Cloud Productos que utiliza esta solución:
- Cloud Run : un servicio totalmente administrado que le permite crear e implementar aplicaciones en contenedores sin servidor. Google Cloud maneja el escalado y otras tareas de infraestructura para que usted pueda concentrarse en la lógica empresarial de su código.
- Jobs : Procesamiento de tareas basado en contenedores.
- Cloud Build : un servicio que le permite importar código fuente desde repositorios o espacios de Cloud Storage, ejecutar una compilación y producir artefactos como contenedores Docker o archivos Java.
- Cloud SQL para PostgreSQL : una base de datos de PostgreSQL basada en la nube que se administra completamente en el Google Cloudinfraestructura.
- Secret Manager : un servicio que le permite almacenar, administrar y acceder a secretos como blobs binarios o cadenas de texto. Puede utilizar Secret Manager para almacenar contraseñas de bases de datos, claves API o certificados TLS que necesita una aplicación en tiempo de ejecución.
- Almacenamiento en la nube : un servicio listo para la empresa que proporciona almacenamiento de objetos sin límites y de bajo costo para diversos tipos de datos. Los datos son accesibles desde dentro y fuera deGoogle Cloud y se replica de forma georredundante.
- Firebase : una plataforma de desarrollo que le permite crear, lanzar y monitorear aplicaciones para iOS, Android y la web.
Arquitectura
El siguiente diagrama muestra la arquitectura de la solución:
Componentes y configuración
La arquitectura incluye los siguientes componentes:
- El cliente web está alojado en Firebase Hosting.
- El cliente web llama a un backend de API escrito en Python que se ejecuta como un servicio en Cloud Run.
- La configuración y otros secretos de la aplicación Python se almacenan en Secret Manager.
- Cloud SQL para PostgreSQL se utiliza como backend de base de datos relacional para la aplicación Python.
- Los activos estáticos para la aplicación y las imágenes del contenedor se almacenan en Cloud Storage.
Costo
Para una estimación del costo de la Google Cloud recursos que utiliza la solución de aplicación web dinámica, consulte la estimación precalculada en la Google Cloud Calculadora de precios .
Utilice la estimación como punto de partida para calcular el costo de su implementación. Puede modificar la estimación para reflejar cualquier cambio de configuración que planee realizar para los recursos que se utilizan en la solución.
La estimación precalculada se basa en supuestos para ciertos factores, incluidos los siguientes:
- El Google Cloud Lugares donde se despliegan los recursos.
- La cantidad de tiempo que se utilizan los recursos.
Antes de comenzar
Para implementar esta solución, primero necesita un Google Cloud proyecto y algunos permisos de IAM.
Crea o elige un Google Cloud proyecto
Cuando implementas la solución, eliges el Google Cloud proyecto donde se despliegan los recursos. Puede crear un nuevo proyecto o utilizar un proyecto existente para la implementación.
Si desea crear un nuevo proyecto, hágalo antes de comenzar la implementación. El uso de un nuevo proyecto puede ayudar a evitar conflictos con recursos previamente aprovisionados, como los recursos que se utilizan para cargas de trabajo de producción.
Para crear un proyecto, complete los siguientes pasos:
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
Obtenga los permisos de IAM necesarios
Para iniciar el proceso de implementación, necesita los permisos de Administración de acceso e identidad (IAM) que se enumeran en la siguiente tabla.
Si creó un nuevo proyecto para esta solución, entonces tiene el rol básico de roles/owner
en ese proyecto y tiene todos los permisos necesarios. Si no tiene los roles/owner
, solicite a su administrador que le otorgue estos permisos (o los roles que incluyen estos permisos).
Se requiere permiso de IAM | Rol predefinido que incluye los permisos necesarios |
---|---|
| Administrador de uso del servicio ( roles/serviceusage.serviceUsageAdmin ) |
| Administrador de cuenta de servicio ( roles/iam.serviceAccountAdmin ) |
| Administrador de IAM del proyecto ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list | Administrador del administrador de infraestructura en la nube ( roles/config.admin ) |
iam.serviceAccount.actAs | Usuario de cuenta de servicio ( roles/iam.serviceAccountUser ) |
Acerca de los permisos temporales de cuentas de servicio
Si inicia el proceso de implementación a través de la consola, Google crea una cuenta de servicio para implementar la solución en su nombre (y eliminar la implementación más adelante, si así lo desea). A esta cuenta de servicio se le asignan temporalmente ciertos permisos de IAM; es decir, los permisos se revocan automáticamente una vez completadas las operaciones de implementación y eliminación de la solución. Google recomienda que después de eliminar la implementación, elimine la cuenta de servicio, como se describe más adelante en esta guía.
Ver los roles asignados a la cuenta de servicio
Estos roles se enumeran aquí en caso de que un administrador de suGoogle Cloud proyecto u organización necesita esta información.
-
roles/cloudsql.admin
-
roles/cloudsql.admin
-
roles/firebasehosting.admin
-
roles/iam.serviceAccountAdmin
-
roles/iam.serviceAccountUser
-
roles/resourcemanager.projectIamAdmin
-
roles/run.admin
-
roles/secretmanager.admin
-
roles/storage.admin
-
roles/compute.networkAdmin
-
roles/compute.admin
Implementar la solución
Para ayudarle a implementar esta solución con el mínimo esfuerzo, se proporciona una configuración de Terraform en GitHub. La configuración de Terraform define todos losGoogle Cloud recursos que se requieren para la solución.
Puede implementar la solución mediante uno de los siguientes métodos:
A través de la consola : utilice este método si desea 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 necesite la solución implementada, puede eliminarla a través de la consola. Es posible que sea necesario eliminar por separado todos los recursos que cree después de implementar la solución.
Para utilizar este método de implementación, siga las instrucciones en Implementación a través de la consola .
Uso de Terraform CLI : utilice este método si desea personalizar la solución o si desea automatizar el aprovisionamiento y la administración de los recursos mediante el enfoque de infraestructura como código (IaC). Descargue la configuración de Terraform desde GitHub,, opcionalmente, personalice el código según sea necesario y luego implemente la solución mediante la CLI de Terraform. Después de implementar la solución, puede continuar usando Terraform para administrarla.
Para utilizar este método de implementación, siga las instrucciones en Implementar mediante la CLI de Terraform .
Implementar a través de la consola
Complete los siguientes pasos para implementar la solución preconfigurada.
En el Google Cloud Catálogo de Jump Start Solutions, vaya a la solución Aplicación web dinámica con Python y JavaScript .
Ir a la solución Aplicación web dinámica con Python y JavaScript
Revise la información que se proporciona en la página, como el costo estimado de la solución y el tiempo estimado de implementación.
Cuando esté listo para comenzar a implementar la solución, haga clic en Implementar .
Se muestra un panel de configuración paso a paso.
Complete los pasos en el panel de configuración.
Anote el nombre que ingresa para la implementación. Este nombre será necesario más adelante cuando elimine la implementación.
Al hacer clic en Implementar , se muestra la página Implementaciones de soluciones . El campo Estado de esta página muestra Implementando .
Espere a que se implemente la solución.
Si la implementación falla, el campo Estado muestra Error . Puede utilizar el registro de Cloud Build para diagnosticar los errores. Para obtener más información, consulte Errores al implementar a través de la consola .
Una vez completada la implementación, el campo Estado cambia a Implementado .
Para ver y utilizar la solución, haga clic en el menú Acciones more_vert y seleccione Explorar esta solución .
Para obtener más información sobre cómo explorar la implementación de su solución, consulte Explorar su implementación .
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Implementar usando la CLI de Terraform
Esta sección describe cómo puede personalizar la solución o automatizar el aprovisionamiento y la administración de la solución mediante Terraform CLI. Las soluciones que implementa mediante la CLI de Terraform no se muestran en la página Implementaciones de soluciones en la Google Cloud consola.
Configurar el cliente Terraform
Puede ejecutar Terraform en Cloud Shell o en su host local. Esta guía describe cómo ejecutar Terraform en Cloud Shell, que tiene Terraform preinstalado y configurado para autenticarse con Google Cloud.
El código Terraform para esta solución está disponible en un repositorio de GitHub.
Clona el repositorio de GitHub en Cloud Shell.
Se muestra un mensaje para confirmar la descarga del repositorio de GitHub a Cloud Shell.
Haga clic en Confirmar .
Cloud Shell se inicia en una pestaña separada del navegador y el código Terraform se descarga en el directorio
$HOME/cloudshell_open
de su entorno de Cloud Shell.En Cloud Shell, verifique si el directorio de trabajo actual es
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Este es el directorio que contiene los archivos de configuración de Terraform para la solución. Si necesita cambiar a ese directorio, ejecute el siguiente comando:cd $HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
Inicialice Terraform ejecutando el siguiente comando:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Configurar las variables de Terraform
El código de Terraform que descargó incluye variables que puede usar para personalizar la implementación según sus requisitos. Por ejemplo, puede especificar el Google Cloud proyecto y la región donde desea que se implemente la solución.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.En el mismo directorio, cree un archivo de texto llamado
terraform.tfvars
.En el archivo
terraform.tfvars
, copie el siguiente fragmento de código y establezca valores para las variables requeridas.- Siga las instrucciones que se proporcionan como comentarios en el fragmento de código.
- Este fragmento de código incluye solo las variables para las que debe establecer valores. La configuración de Terraform incluye otras variables que tienen valores predeterminados. Para revisar todas las variables y los valores predeterminados, consulte el archivo
variables.tf
que está disponible en el directorio$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. - Asegúrese de que cada valor que establezca en el archivo
terraform.tfvars
coincida con el tipo de variable declarado en el archivovariables.tf
. Por ejemplo, si el tipo definido para una variable en el archivovariables.tf
esbool
, debe especificartrue
ofalse
como valor de esa variable en el archivoterraform.tfvars
.
# 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" # Whether or not to enable underlying APIs in this solution. # Example: true enable_apis = "ENABLE_APIS" # Initial image to deploy to Cloud Run service. # Example: gcr.io/hsa-public/developer-journey/app initial_run_image = "INITIAL_RUN_IMAGE" # Identifier for the deployment. Used in some resource names. # Example: dev-journey deployment_name = "DEPLOYMENT_NAME" # Whether or not to initialize a Firestore instance. # Example: true init_firestore = "INIT_FIRESTORE"
Para obtener información sobre los valores que puede asignar a las variables requeridas, consulte lo siguiente:
-
project_id
: Identificación de proyectos . -
regions
: Regiones disponibles . -
enable_apis
: configúrelo entrue
para habilitar las API subyacentes en esta solución. -
initial_run_image
: la URL de la imagen inicial que se implementará en el servicio Cloud Run. -
deployment_name
: Identificador de la implementación. -
init_firestore
: configúrelo entrue
para habilitar la inicialización de una instancia de Firestore.
Validar y revisar la configuración de Terraform
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Verifique que la configuración de Terraform no tenga errores:
terraform validate
Si el comando devuelve algún error, realice las correcciones necesarias en la configuración y luego ejecute el comando
terraform validate
nuevamente. Repita este paso hasta que el comando devuelva el siguiente mensaje:Success! The configuration is valid.
Revise los recursos que están definidos en la configuración:
terraform plan
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
El resultado del comando
terraform plan
es una lista de los recursos que Terraform aprovisiona cuando aplica la configuración.Si desea realizar algún cambio, edite la configuración y luego ejecute los comandos
terraform validate
yterraform plan
nuevamente.
Aprovisionar los recursos
Cuando no sean necesarios más cambios en la configuración de Terraform, implemente los recursos.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Aplique la configuración de Terraform:
terraform apply
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
Terraform muestra una lista de los recursos que se crearán.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso de la implementación.
Si no se puede completar la implementación, Terraform muestra los errores que causaron la falla. Revise los mensajes de error y actualice la configuración para corregir los errores. Luego ejecute nuevamente el comando
terraform apply
. Para obtener ayuda con la solución de errores de Terraform, consulte Errores al implementar la solución mediante la CLI de Terraform .Una vez creados todos los recursos, Terraform muestra el siguiente mensaje:
Apply complete!
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Explora tu implementación
Ha implementado su aplicación web dinámica de muestra. La implementación de su solución consta de múltiples servicios primarios que se han integrado en un único Google Cloud proyecto, incluyendo lo siguiente:
- Una interfaz de cliente de Firebase Hosting, escrita utilizando el marco Lit.
- Un servidor API de Cloud Run, escrito en Django utilizando Django REST Framework .
- Una base de datos Cloud SQL, usando PostgreSQL .
Para ver el Google Cloud Recursos que se despliegan y su configuración, realice un recorrido interactivo.
Opcional: personaliza tu aplicación
Para personalizar la aplicación web dinámica con la solución Python y JavaScript, puede realizar cambios en el frontend y el backend de la aplicación y luego volver a implementarla. Para seguir las instrucciones paso a paso para esta tarea directamente en Cloud Shell Editor, haga clic en Guíame.
Esta tarea tarda unos 15 minutos en completarse.
Eliminar la implementación
Cuando ya no necesite la implementación de la solución, para evitar la facturación continua de los recursos que creó, elimine la implementación.
Eliminar la implementación a través de la consola.
Utilice este procedimiento si implementó la solución a través de la consola.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
Localice la implementación que desea eliminar.
En la fila de la implementación, haga clic en
Acciones y luego seleccione Eliminar .Es posible que tengas que desplazarte para ver Acciones en la fila.
Ingrese el nombre de la implementación y luego haga clic en Confirmar .
El campo Estado muestra Eliminando .
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Eliminar la implementación mediante la CLI de Terraform
Utilice este procedimiento si implementó la solución mediante la CLI de Terraform.
En Cloud Shell, asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Elimine los recursos que fueron aprovisionados por Terraform:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Opcional: eliminar el proyecto
Si implementó la solución en un nuevo Google Cloud proyecto y, si ya no lo necesita, elimínelo completando los siguientes pasos:
- En el Google Cloud consola, vaya a la página Administrar recursos .
- En la lista de proyectos, seleccione el proyecto que desea eliminar y luego haga clic en Eliminar .
- Cuando se le solicite, escriba el ID del proyecto y luego haga clic en Apagar .
Si decide conservar el proyecto, elimine la cuenta de servicio que se creó para esta solución, como se describe en la siguiente sección.
Opcional: eliminar la cuenta de servicio
Si eliminó el proyecto que utilizó para la solución, omita esta sección.
Como se mencionó anteriormente en esta guía, cuando implementó la solución, se creó una cuenta de servicio en su nombre. A la cuenta de servicio se le asignaron ciertos permisos de IAM temporalmente ; es decir, los permisos se revocaron automáticamente 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 elimina. Google recomienda que elimine esta cuenta de servicio.
Si implementó la solución a través del Google Cloud consola, vaya a la página Implementaciones de soluciones . (Si ya está en esa página, actualice el navegador). Se activa un proceso en segundo plano para eliminar la cuenta de servicio. No es necesaria ninguna otra acción.
Si implementó la solución mediante la CLI de Terraform, complete los siguientes pasos:
En el Google Cloud consola, vaya a la página Cuentas de servicio .
Seleccione el proyecto que utilizó para la solución.
Seleccione la cuenta de servicio que desea eliminar.
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 : el ID del proyecto en el que implementó la solución.
Haga clic en Eliminar .
Solucionar errores
Las acciones que puede realizar 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 cuando usa la consola, haga lo siguiente:
Vaya a la página Implementaciones de soluciones .
Si la implementación falló, el campo Estado muestra Error .
Vea los detalles de los errores que causaron la falla:
En la fila de la implementación, haga clic en
Acciones .Es posible que tengas que desplazarte para ver Acciones en la fila.
Seleccione Ver registros de Cloud Build .
Revise el registro de Cloud Build y tome las medidas adecuadas para resolver el problema que provocó la falla.
Errores al implementar usando la CLI de Terraform
Si la implementación falla cuando usa Terraform, el resultado del comando terraform apply
incluye mensajes de error que puede revisar para diagnosticar el problema.
Los ejemplos de las siguientes secciones muestran errores de implementación que puede encontrar al utilizar Terraform.
Error de API no habilitada
Si crea un proyecto y luego intenta implementar inmediatamente la solución en el nuevo proyecto, 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, espere unos minutos y luego ejecute nuevamente el comando terraform apply
.
Error al eliminar una implementación
En determinados casos, los intentos de eliminar una implementación pueden fallar:
- Después de implementar una solución a través de la consola, si cambia algún recurso que fue aprovisionado por la solución y luego intenta eliminar la implementación, es posible que la eliminación falle. El campo Estado en la página Implementaciones de soluciones muestra Error y el registro de Cloud Build muestra la causa del error.
- Después de implementar una solución mediante la CLI de Terraform, si cambia cualquier recurso mediante una interfaz que no sea de Terraform (por ejemplo, la consola) y luego intenta eliminar la implementación, es posible que la eliminación falle. Los mensajes en la salida del comando
terraform destroy
muestran la causa del error.
Revise los registros y mensajes de error, identifique y elimine los recursos que causaron el error y luego intente eliminar la implementación nuevamente.
Si una implementación basada en consola no se elimina y no puede diagnosticar el error mediante el registro de Cloud Build, puede eliminar la implementación mediante la CLI de Terraform, como se describe en la siguiente sección.
Eliminar una implementación basada en consola mediante la CLI de Terraform
Esta sección describe cómo eliminar una implementación basada en consola si se producen errores al intentar eliminarla a través de la consola. En este enfoque, descarga la configuración de Terraform para la implementación que desea eliminar y luego usa la CLI de Terraform para eliminar la implementación.
Identifique la región donde se almacenan el código Terraform, los registros y otros datos de la implementación. Esta región puede ser diferente de la región que seleccionó al implementar la solución.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
En la lista de implementaciones, identifique la fila de la implementación que desea eliminar.
Haga clic en
Ver todo el contenido de la fila .En la columna Ubicación , observe la segunda ubicación, como se resalta en el siguiente ejemplo:
In the Google Cloud console, 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.
Cree variables de entorno para el ID del proyecto, la región y el nombre de la implementación que desea eliminar:
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
En estos comandos, reemplace lo siguiente:
- REGION : la ubicación que anotó anteriormente en este procedimiento.
- PROJECT_ID : el ID del proyecto donde implementó la solución.
- DEPLOYMENT_NAME : el nombre de la implementación que desea eliminar.
Obtenga el ID de la última revisión de la implementación que desea 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 es similar al siguiente:
projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
Obtenga 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
Descargue la configuración de Terraform desde Cloud Storage a Cloud Shell:
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/infra
Espere hasta que aparezca el mensaje
Operation completed
, como se muestra en el siguiente ejemplo:Operation completed over 45 objects/268.5 KiB
Inicializar Terraform:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Elimine los recursos implementados:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Si se muestra alguna advertencia sobre variables no declaradas, ignórela.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Elimine 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"
Espere unos segundos y luego verifique que se eliminó 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
, espere unos segundos y luego ejecute el comando nuevamente.Una vez eliminado el artefacto de implementación, se muestra un mensaje como el que se muestra en el siguiente ejemplo:
Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
No se puede asignar el error de dirección solicitada
Cuando ejecuta 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, ejecute nuevamente el comando terraform apply
.
Enviar comentarios
Las soluciones Jump Start tienen fines informativos únicamente y no son productos con soporte oficial. Google puede cambiar o eliminar soluciones sin previo aviso.
Para solucionar errores, revise los registros de Cloud Build y la salida de Terraform.
Para enviar comentarios, haga lo siguiente:
- Para obtener documentación, tutoriales en la consola o la solución, utilice el botón Enviar comentarios en la página.
Para código no modificado, cree problemas en el repositorio de GitHub correspondiente:
Los problemas de GitHub se revisan según el mejor esfuerzo y no están destinados a preguntas de uso general.
- Si tiene problemas con los productos que se utilizan en la solución, comuníquese con Atención al cliente en la nube .
¿Qué sigue?
Para seguir aprendiendo más sobre Google Cloud productos y capacidades, consulte:
,Esta guía le ayuda a comprender, implementar y utilizar la aplicación web dinámica con Python y JavaScript Jump Start Solution. Esta solución demuestra cómo crear y ejecutar sitios web dinámicos en Google Cloud.
La implementación y administración de esta aplicación sirve como ejemplo de implementación en el mundo real de la creación de una aplicación web dinámica con muchas de las herramientas y productos que puede usar para aplicaciones sin servidor. Puede implementar esta solución si desea obtener información sobre lo siguiente:
- Aplicación del marco REST de Django (DRF)
- Aplicación de escaparate
- Sitio web respaldado por bases de datos
Esta solución implementa la aplicación Avocano . Se trata de una tienda falsa, donde los usuarios pueden intentar comprar un artículo. Sin embargo, si un usuario agrega un artículo a su carrito, la tienda revela que es falso (Avoca, ¡no!). Aunque los usuarios en realidad no pueden comprar un aguacate, la aplicación ilustra la gestión de inventario al disminuir en uno la cantidad de producto disponible.
Avocano muestra la combinación de una API basada en Cloud Run, una base de datos Cloud SQL para PostgreSQL y una interfaz Firebase.
Consulte el código fuente de la aplicación Avocano .
Objetivos
Esta guía de solución le ayudará a aprender a utilizar Google Cloud para realizar las siguientes tareas:
- Implementar una aplicación web de acceso público
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Usar Secret Manager para almacenar contraseñas, claves y certificados.
- Otorgar solo los permisos de IAM necesarios para realizar la tarea. Esto también se conoce como aplicación del principio de privilegio mínimo.
- Implementar y operar los servicios backend.
- Conectar una aplicación a un Google Cloud base de datos siguiente Google CloudPrácticas de seguridad recomendadas por:
- Personaliza tu aplicación
- Realice cambios de contenido o modifique la aplicación para agregar una función.
- Compile y vuelva a implementar de forma segura.
Productos utilizados
El siguiente es un resumen de la Google Cloud Productos que utiliza esta solución:
- Cloud Run : un servicio totalmente administrado que le permite crear e implementar aplicaciones en contenedores sin servidor. Google Cloud maneja el escalado y otras tareas de infraestructura para que usted pueda concentrarse en la lógica empresarial de su código.
- Jobs : Procesamiento de tareas basado en contenedores.
- Cloud Build : un servicio que le permite importar código fuente desde repositorios o espacios de Cloud Storage, ejecutar una compilación y producir artefactos como contenedores Docker o archivos Java.
- Cloud SQL para PostgreSQL : una base de datos de PostgreSQL basada en la nube que se administra completamente en el Google Cloudinfraestructura.
- Secret Manager : un servicio que le permite almacenar, administrar y acceder a secretos como blobs binarios o cadenas de texto. Puede utilizar Secret Manager para almacenar contraseñas de bases de datos, claves API o certificados TLS que necesita una aplicación en tiempo de ejecución.
- Almacenamiento en la nube : un servicio listo para la empresa que proporciona almacenamiento de objetos sin límites y de bajo costo para diversos tipos de datos. Los datos son accesibles desde dentro y fuera deGoogle Cloud y se replica de forma georredundante.
- Firebase : una plataforma de desarrollo que le permite crear, lanzar y monitorear aplicaciones para iOS, Android y la web.
Arquitectura
El siguiente diagrama muestra la arquitectura de la solución:
Componentes y configuración
La arquitectura incluye los siguientes componentes:
- El cliente web está alojado en Firebase Hosting.
- El cliente web llama a un backend de API escrito en Python que se ejecuta como un servicio en Cloud Run.
- La configuración y otros secretos de la aplicación Python se almacenan en Secret Manager.
- Cloud SQL para PostgreSQL se utiliza como backend de base de datos relacional para la aplicación Python.
- Los activos estáticos para la aplicación y las imágenes del contenedor se almacenan en Cloud Storage.
Costo
Para una estimación del costo de la Google Cloud recursos que utiliza la solución de aplicación web dinámica, consulte la estimación precalculada en la Google Cloud Calculadora de precios .
Utilice la estimación como punto de partida para calcular el costo de su implementación. Puede modificar la estimación para reflejar cualquier cambio de configuración que planee realizar para los recursos que se utilizan en la solución.
La estimación precalculada se basa en supuestos para ciertos factores, incluidos los siguientes:
- El Google Cloud Lugares donde se despliegan los recursos.
- La cantidad de tiempo que se utilizan los recursos.
Antes de comenzar
Para implementar esta solución, primero necesita un Google Cloud proyecto y algunos permisos de IAM.
Crea o elige un Google Cloud proyecto
Cuando implementas la solución, eliges el Google Cloud proyecto donde se despliegan los recursos. Puede crear un nuevo proyecto o utilizar un proyecto existente para la implementación.
Si desea crear un nuevo proyecto, hágalo antes de comenzar la implementación. El uso de un nuevo proyecto puede ayudar a evitar conflictos con recursos previamente aprovisionados, como los recursos que se utilizan para cargas de trabajo de producción.
Para crear un proyecto, complete los siguientes pasos:
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
Obtenga los permisos de IAM necesarios
Para iniciar el proceso de implementación, necesita los permisos de Administración de acceso e identidad (IAM) que se enumeran en la siguiente tabla.
Si creó un nuevo proyecto para esta solución, entonces tiene el rol básico de roles/owner
en ese proyecto y tiene todos los permisos necesarios. Si no tiene los roles/owner
, solicite a su administrador que le otorgue estos permisos (o los roles que incluyen estos permisos).
Se requiere permiso de IAM | Rol predefinido que incluye los permisos necesarios |
---|---|
| Administrador de uso del servicio ( roles/serviceusage.serviceUsageAdmin ) |
| Administrador de cuenta de servicio ( roles/iam.serviceAccountAdmin ) |
| Administrador de IAM del proyecto ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list | Administrador del administrador de infraestructura en la nube ( roles/config.admin ) |
iam.serviceAccount.actAs | Usuario de cuenta de servicio ( roles/iam.serviceAccountUser ) |
Acerca de los permisos temporales de cuentas de servicio
Si inicia el proceso de implementación a través de la consola, Google crea una cuenta de servicio para implementar la solución en su nombre (y eliminar la implementación más adelante, si así lo desea). A esta cuenta de servicio se le asignan temporalmente ciertos permisos de IAM; es decir, los permisos se revocan automáticamente una vez completadas las operaciones de implementación y eliminación de la solución. Google recomienda que después de eliminar la implementación, elimine la cuenta de servicio, como se describe más adelante en esta guía.
Ver los roles asignados a la cuenta de servicio
Estos roles se enumeran aquí en caso de que un administrador de suGoogle Cloud proyecto u organización necesita esta información.
-
roles/cloudsql.admin
-
roles/cloudsql.admin
-
roles/firebasehosting.admin
-
roles/iam.serviceAccountAdmin
-
roles/iam.serviceAccountUser
-
roles/resourcemanager.projectIamAdmin
-
roles/run.admin
-
roles/secretmanager.admin
-
roles/storage.admin
-
roles/compute.networkAdmin
-
roles/compute.admin
Implementar la solución
Para ayudarle a implementar esta solución con el mínimo esfuerzo, se proporciona una configuración de Terraform en GitHub. La configuración de Terraform define todos losGoogle Cloud recursos que se requieren para la solución.
Puede implementar la solución mediante uno de los siguientes métodos:
A través de la consola : utilice este método si desea 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 necesite la solución implementada, puede eliminarla a través de la consola. Es posible que sea necesario eliminar por separado todos los recursos que cree después de implementar la solución.
Para utilizar este método de implementación, siga las instrucciones en Implementación a través de la consola .
Uso de Terraform CLI : utilice este método si desea personalizar la solución o si desea automatizar el aprovisionamiento y la administración de los recursos mediante el enfoque de infraestructura como código (IaC). Descargue la configuración de Terraform desde GitHub,, opcionalmente, personalice el código según sea necesario y luego implemente la solución mediante la CLI de Terraform. Después de implementar la solución, puede continuar usando Terraform para administrarla.
Para utilizar este método de implementación, siga las instrucciones en Implementar mediante la CLI de Terraform .
Implementar a través de la consola
Complete los siguientes pasos para implementar la solución preconfigurada.
En el Google Cloud Catálogo de Jump Start Solutions, vaya a la solución Aplicación web dinámica con Python y JavaScript .
Ir a la solución Aplicación web dinámica con Python y JavaScript
Revise la información que se proporciona en la página, como el costo estimado de la solución y el tiempo estimado de implementación.
Cuando esté listo para comenzar a implementar la solución, haga clic en Implementar .
Se muestra un panel de configuración paso a paso.
Complete los pasos en el panel de configuración.
Anote el nombre que ingresa para la implementación. Este nombre será necesario más adelante cuando elimine la implementación.
Al hacer clic en Implementar , se muestra la página Implementaciones de soluciones . El campo Estado de esta página muestra Implementando .
Espere a que se implemente la solución.
Si la implementación falla, el campo Estado muestra Error . Puede utilizar el registro de Cloud Build para diagnosticar los errores. Para obtener más información, consulte Errores al implementar a través de la consola .
Una vez completada la implementación, el campo Estado cambia a Implementado .
Para ver y utilizar la solución, haga clic en el menú Acciones more_vert y seleccione Explorar esta solución .
Para obtener más información sobre cómo explorar la implementación de su solución, consulte Explorar su implementación .
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Implementar usando la CLI de Terraform
Esta sección describe cómo puede personalizar la solución o automatizar el aprovisionamiento y la administración de la solución mediante Terraform CLI. Las soluciones que implementa mediante la CLI de Terraform no se muestran en la página Implementaciones de soluciones en la Google Cloud consola.
Configurar el cliente Terraform
Puede ejecutar Terraform en Cloud Shell o en su host local. Esta guía describe cómo ejecutar Terraform en Cloud Shell, que tiene Terraform preinstalado y configurado para autenticarse con Google Cloud.
El código Terraform para esta solución está disponible en un repositorio de GitHub.
Clona el repositorio de GitHub en Cloud Shell.
Se muestra un mensaje para confirmar la descarga del repositorio de GitHub a Cloud Shell.
Haga clic en Confirmar .
Cloud Shell se inicia en una pestaña separada del navegador y el código Terraform se descarga en el directorio
$HOME/cloudshell_open
de su entorno de Cloud Shell.En Cloud Shell, verifique si el directorio de trabajo actual es
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Este es el directorio que contiene los archivos de configuración de Terraform para la solución. Si necesita cambiar a ese directorio, ejecute el siguiente comando:cd $HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
Inicialice Terraform ejecutando el siguiente comando:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Configurar las variables de Terraform
El código de Terraform que descargó incluye variables que puede usar para personalizar la implementación según sus requisitos. Por ejemplo, puede especificar el Google Cloud proyecto y la región donde desea que se implemente la solución.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.En el mismo directorio, cree un archivo de texto llamado
terraform.tfvars
.En el archivo
terraform.tfvars
, copie el siguiente fragmento de código y establezca valores para las variables requeridas.- Siga las instrucciones que se proporcionan como comentarios en el fragmento de código.
- Este fragmento de código incluye solo las variables para las que debe establecer valores. La configuración de Terraform incluye otras variables que tienen valores predeterminados. Para revisar todas las variables y los valores predeterminados, consulte el archivo
variables.tf
que está disponible en el directorio$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. - Asegúrese de que cada valor que establezca en el archivo
terraform.tfvars
coincida con el tipo de variable declarado en el archivovariables.tf
. Por ejemplo, si el tipo definido para una variable en el archivovariables.tf
esbool
, debe especificartrue
ofalse
como valor de esa variable en el archivoterraform.tfvars
.
# 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" # Whether or not to enable underlying APIs in this solution. # Example: true enable_apis = "ENABLE_APIS" # Initial image to deploy to Cloud Run service. # Example: gcr.io/hsa-public/developer-journey/app initial_run_image = "INITIAL_RUN_IMAGE" # Identifier for the deployment. Used in some resource names. # Example: dev-journey deployment_name = "DEPLOYMENT_NAME" # Whether or not to initialize a Firestore instance. # Example: true init_firestore = "INIT_FIRESTORE"
Para obtener información sobre los valores que puede asignar a las variables requeridas, consulte lo siguiente:
-
project_id
: Identificación de proyectos . -
regions
: Regiones disponibles . -
enable_apis
: configúrelo entrue
para habilitar las API subyacentes en esta solución. -
initial_run_image
: la URL de la imagen inicial que se implementará en el servicio Cloud Run. -
deployment_name
: Identificador de la implementación. -
init_firestore
: configúrelo entrue
para habilitar la inicialización de una instancia de Firestore.
Validar y revisar la configuración de Terraform
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Verifique que la configuración de Terraform no tenga errores:
terraform validate
Si el comando devuelve algún error, realice las correcciones necesarias en la configuración y luego ejecute el comando
terraform validate
nuevamente. Repita este paso hasta que el comando devuelva el siguiente mensaje:Success! The configuration is valid.
Revise los recursos que están definidos en la configuración:
terraform plan
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
El resultado del comando
terraform plan
es una lista de los recursos que Terraform aprovisiona cuando aplica la configuración.Si desea realizar algún cambio, edite la configuración y luego ejecute los comandos
terraform validate
yterraform plan
nuevamente.
Aprovisionar los recursos
Cuando no sean necesarios más cambios en la configuración de Terraform, implemente los recursos.
Asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Aplique la configuración de Terraform:
terraform apply
Terraform le solicita que ingrese valores para las variables que no tienen valores predeterminados. Introduzca los valores requeridos.
Terraform muestra una lista de los recursos que se crearán.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso de la implementación.
Si no se puede completar la implementación, Terraform muestra los errores que causaron la falla. Revise los mensajes de error y actualice la configuración para corregir los errores. Luego ejecute nuevamente el comando
terraform apply
. Para obtener ayuda con la solución de errores de Terraform, consulte Errores al implementar la solución mediante la CLI de Terraform .Una vez creados todos los recursos, Terraform muestra el siguiente mensaje:
Apply complete!
Cuando ya no necesite la solución, puede eliminar la implementación para evitar la facturación continua por la Google Cloud recursos. Para obtener más información, consulte Eliminar la implementación .
Explora tu implementación
Ha implementado su aplicación web dinámica de muestra. La implementación de su solución consta de múltiples servicios primarios que se han integrado en un único Google Cloud proyecto, incluyendo lo siguiente:
- Una interfaz de cliente de Firebase Hosting, escrita utilizando el marco Lit.
- Un servidor API de Cloud Run, escrito en Django utilizando Django REST Framework .
- Una base de datos Cloud SQL, usando PostgreSQL .
Para ver el Google Cloud Recursos que se despliegan y su configuración, realice un recorrido interactivo.
Opcional: personaliza tu aplicación
Para personalizar la aplicación web dinámica con la solución Python y JavaScript, puede realizar cambios en el frontend y el backend de la aplicación y luego volver a implementarla. Para seguir las instrucciones paso a paso para esta tarea directamente en Cloud Shell Editor, haga clic en Guíame.
Esta tarea tarda unos 15 minutos en completarse.
Eliminar la implementación
Cuando ya no necesite la implementación de la solución, para evitar la facturación continua de los recursos que creó, elimine la implementación.
Eliminar la implementación a través de la consola.
Utilice este procedimiento si implementó la solución a través de la consola.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
Localice la implementación que desea eliminar.
En la fila de la implementación, haga clic en
Acciones y luego seleccione Eliminar .Es posible que tengas que desplazarte para ver Acciones en la fila.
Ingrese el nombre de la implementación y luego haga clic en Confirmar .
El campo Estado muestra Eliminando .
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Eliminar la implementación mediante la CLI de Terraform
Utilice este procedimiento si implementó la solución mediante la CLI de Terraform.
En Cloud Shell, asegúrese de que el directorio de trabajo actual sea
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
. Si no es así, vaya a ese directorio.Elimine los recursos que fueron aprovisionados por Terraform:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Si la eliminación falla, consulte la guía de solución de problemas en Error al eliminar una implementación .
Cuando ya no necesites el Google Cloud proyecto que utilizó para la solución, puede eliminar el proyecto. Para obtener más información, consulte Opcional: eliminar el proyecto .
Opcional: eliminar el proyecto
Si implementó la solución en un nuevo Google Cloud proyecto y, si ya no lo necesita, elimínelo completando los siguientes pasos:
- En el Google Cloud consola, vaya a la página Administrar recursos .
- En la lista de proyectos, seleccione el proyecto que desea eliminar y luego haga clic en Eliminar .
- Cuando se le solicite, escriba el ID del proyecto y luego haga clic en Apagar .
Si decide conservar el proyecto, elimine la cuenta de servicio que se creó para esta solución, como se describe en la siguiente sección.
Opcional: eliminar la cuenta de servicio
Si eliminó el proyecto que utilizó para la solución, omita esta sección.
Como se mencionó anteriormente en esta guía, cuando implementó la solución, se creó una cuenta de servicio en su nombre. A la cuenta de servicio se le asignaron ciertos permisos de IAM temporalmente ; es decir, los permisos se revocaron automáticamente 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 elimina. Google recomienda que elimine esta cuenta de servicio.
Si implementó la solución a través del Google Cloud consola, vaya a la página Implementaciones de soluciones . (Si ya está en esa página, actualice el navegador). Se activa un proceso en segundo plano para eliminar la cuenta de servicio. No es necesaria ninguna otra acción.
Si implementó la solución mediante la CLI de Terraform, complete los siguientes pasos:
En el Google Cloud consola, vaya a la página Cuentas de servicio .
Seleccione el proyecto que utilizó para la solución.
Seleccione la cuenta de servicio que desea eliminar.
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 : el ID del proyecto en el que implementó la solución.
Haga clic en Eliminar .
Solucionar errores
Las acciones que puede realizar 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 cuando usa la consola, haga lo siguiente:
Vaya a la página Implementaciones de soluciones .
Si la implementación falló, el campo Estado muestra Error .
Vea los detalles de los errores que causaron la falla:
En la fila de la implementación, haga clic en
Acciones .Es posible que tengas que desplazarte para ver Acciones en la fila.
Seleccione Ver registros de Cloud Build .
Revise el registro de Cloud Build y tome las medidas adecuadas para resolver el problema que provocó la falla.
Errores al implementar usando la CLI de Terraform
Si la implementación falla cuando usa Terraform, el resultado del comando terraform apply
incluye mensajes de error que puede revisar para diagnosticar el problema.
Los ejemplos de las siguientes secciones muestran errores de implementación que puede encontrar al utilizar Terraform.
Error de API no habilitada
Si crea un proyecto y luego intenta implementar inmediatamente la solución en el nuevo proyecto, 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, espere unos minutos y luego ejecute nuevamente el comando terraform apply
.
Error al eliminar una implementación
En determinados casos, los intentos de eliminar una implementación pueden fallar:
- Después de implementar una solución a través de la consola, si cambia algún recurso que fue aprovisionado por la solución y luego intenta eliminar la implementación, es posible que la eliminación falle. El campo Estado en la página Implementaciones de soluciones muestra Error y el registro de Cloud Build muestra la causa del error.
- Después de implementar una solución mediante la CLI de Terraform, si cambia cualquier recurso mediante una interfaz que no sea de Terraform (por ejemplo, la consola) y luego intenta eliminar la implementación, es posible que la eliminación falle. Los mensajes en la salida del comando
terraform destroy
muestran la causa del error.
Revise los registros y mensajes de error, identifique y elimine los recursos que causaron el error y luego intente eliminar la implementación nuevamente.
Si una implementación basada en consola no se elimina y no puede diagnosticar el error mediante el registro de Cloud Build, puede eliminar la implementación mediante la CLI de Terraform, como se describe en la siguiente sección.
Eliminar una implementación basada en consola mediante la CLI de Terraform
Esta sección describe cómo eliminar una implementación basada en consola si se producen errores al intentar eliminarla a través de la consola. En este enfoque, descarga la configuración de Terraform para la implementación que desea eliminar y luego usa la CLI de Terraform para eliminar la implementación.
Identifique la región donde se almacenan el código Terraform, los registros y otros datos de la implementación. Esta región puede ser diferente de la región que seleccionó al implementar la solución.
En el Google Cloud consola, vaya a la página Implementaciones de soluciones .
Seleccione el proyecto que contiene la implementación que desea eliminar.
En la lista de implementaciones, identifique la fila de la implementación que desea eliminar.
Haga clic en
Ver todo el contenido de la fila .En la columna Ubicación , observe la segunda ubicación, como se resalta en el siguiente ejemplo:
In the Google Cloud console, 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.
Cree variables de entorno para el ID del proyecto, la región y el nombre de la implementación que desea eliminar:
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
En estos comandos, reemplace lo siguiente:
- REGION : la ubicación que anotó anteriormente en este procedimiento.
- PROJECT_ID : el ID del proyecto donde implementó la solución.
- DEPLOYMENT_NAME : el nombre de la implementación que desea eliminar.
Obtenga el ID de la última revisión de la implementación que desea 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 es similar al siguiente:
projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
Obtenga 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
Descargue la configuración de Terraform desde Cloud Storage a Cloud Shell:
gcloud storage cp $CONTENT_PATH $HOME --recursive cd $HOME/content/infra
Espere hasta que aparezca el mensaje
Operation completed
, como se muestra en el siguiente ejemplo:Operation completed over 45 objects/268.5 KiB
Inicializar Terraform:
terraform init
Espere hasta que vea el siguiente mensaje:
Terraform has been successfully initialized!
Elimine los recursos implementados:
terraform destroy
Terraform muestra una lista de los recursos que serán destruidos.
Si se muestra alguna advertencia sobre variables no declaradas, ignórela.
Cuando se le solicite realizar las acciones, ingrese
yes
.Terraform muestra mensajes que muestran el progreso. Una vez eliminados todos los recursos, Terraform muestra el siguiente mensaje:
Destroy complete!
Elimine 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"
Espere unos segundos y luego verifique que se eliminó 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
, espere unos segundos y luego ejecute el comando nuevamente.Una vez eliminado el artefacto de implementación, se muestra un mensaje como el que se muestra en el siguiente ejemplo:
Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
No se puede asignar el error de dirección solicitada
Cuando ejecuta 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, ejecute nuevamente el comando terraform apply
.
Enviar comentarios
Las soluciones Jump Start tienen fines informativos únicamente y no son productos con soporte oficial. Google puede cambiar o eliminar soluciones sin previo aviso.
Para solucionar errores, revise los registros de Cloud Build y la salida de Terraform.
Para enviar comentarios, haga lo siguiente:
- Para obtener documentación, tutoriales en la consola o la solución, utilice el botón Enviar comentarios en la página.
Para código no modificado, cree problemas en el repositorio de GitHub correspondiente:
Los problemas de GitHub se revisan según el mejor esfuerzo y no están destinados a preguntas de uso general.
- Si tiene problemas con los productos que se utilizan en la solución, comuníquese con Atención al cliente en la nube .
¿Qué sigue?
Para seguir aprendiendo más sobre Google Cloud productos y capacidades, consulte: