SCBL002
Descripción general
En este lab, automatizarás la creación de instancias y bases de datos de Spanner con el SDK de Google Cloud, la interfaz de línea de comandos (CLI) y Terraform.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
- Crear instancias y bases de datos con gcloud CLI
- Automatizar la infraestructura de Spanner con Terraform
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
En este lab práctico, se te proporcionarán credenciales temporales nuevas para acceder a Google Cloud y realizar las actividades en un entorno de nube real, no en uno de simulación o demostración.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
Nota: Usa una ventana de navegador privada o de incógnito para ejecutar el lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
- Tiempo para completar el lab (recuerda que, una vez que comienzas un lab, no puedes pausarlo)
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses en este lab para evitar cargos adicionales en tu cuenta.
Active Google Cloud Shell
Google Cloud Shell es una máquina virtual que cuenta con herramientas de desarrollo. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.
Google Cloud Shell proporciona acceso de línea de comandos a sus recursos de GCP.
-
En GCP Console, en la barra de herramientas superior derecha, haga clic en el botón Abrir Cloud Shell.

-
Haga clic en Continue (Continuar):

Toma unos minutos aprovisionar y conectarse con el entorno. Cuando está conectado, ya está autenticado y el proyecto está configurado en su PROJECT_ID . Por ejemplo:

gcloud es la herramienta de línea de comandos para Google Cloud Platform. Viene preinstalada en Cloud Shell y es compatible con la función “tab-completion”.
Puede mostrar el nombre de la cuenta activa con este comando:
gcloud auth list
Resultado:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Puede mostrar el ID del proyecto con este comando:
gcloud config list project
Resultado:
[core]
project = <project_ID>
Resultado de ejemplo:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Tarea 1. Crea instancias y bases de datos con gcloud CLI
-
En la barra de título de la consola de Google Cloud, haz clic en Activar Cloud Shell (
). Si se te solicita, haz clic en Continuar.
-
Ejecuta el siguiente comando para configurar el ID del proyecto:
gcloud config set project {{{project_0.project_id|placeholder_project_id}}}
- Desde la ventana de Cloud Shell, ejecuta el siguiente comando para crear una instancia de Spanner llamada test-spanner-instance.
Ten en cuenta los parámetros de configuración y la capacidad de Spanner. Si se te solicita autorizar el comando, hazlo.
gcloud spanner instances create test-spanner-instance --config=regional-{{{project_0.default_region|place_holder_text}}} --description="test-spanner-instance" --processing-units=100
- El comando no debería tardar mucho tiempo. En la consola, navega hasta el servicio de Spanner y verifica que se haya creado la instancia.
Para ver la instancia, también puedes ejecutar el siguiente comando. Pruébalo ahora.
gcloud spanner instances list
- Antes de crear la base de datos de mascotas, necesitas un archivo que contenga el código DDL. Escribe el siguiente comando para crear el archivo y abrirlo en el editor de código nano.
nano pets-db-schema.sql
- Pega el siguiente código en Nano. Escribe
Ctrl+X
y luego Y
. Por último, presiona la tecla INTRO para guardar el archivo.
CREATE TABLE Owners (
OwnerID STRING(36) NOT NULL,
OwnerName STRING(MAX) NOT NULL
) PRIMARY KEY (OwnerID);
CREATE TABLE Pets (
PetID STRING(36) NOT NULL,
OwnerID STRING(36) NOT NULL,
PetType STRING(MAX) NOT NULL,
PetName STRING(MAX) NOT NULL,
Breed STRING(MAX) NOT NULL,
) PRIMARY KEY (PetID);
- Ahora que tienes el archivo de esquema, ejecuta el siguiente comando para crear la base de datos.
gcloud spanner databases create pets-db --instance=test-spanner-instance --database-dialect=GOOGLE_STANDARD_SQL --ddl-file=./pets-db-schema.sql
- Inserta un propietario y todos los perros que posee. Las claves primarias de Propietarios y Mascotas usan UUID. Ingresa el siguiente comando con el objetivo de crear un UUID para el propietario y almacenarlo en una variable.
owner_uuid=$(cat /proc/sys/kernel/random/uuid)
echo $owner_uuid
- Inserta el propietario Doug.
Nota: El parámetro --data
te permite pasar los campos en pares de nombre y valor.
gcloud spanner rows insert --table=Owners --database=pets-db --instance=test-spanner-instance --data=OwnerID=$owner_uuid,OwnerName=Doug
- Inserta todos los perros de Doug con los siguientes comandos.
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Rusty',PetType='Dog',Breed='Poodle'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Duchess',PetType='Dog',Breed='Terrier'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Gretyl',PetType='Dog',Breed='Shepherd'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Gigi',PetType='Dog',Breed='Retriever'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Noir',PetType='Dog',Breed='Schnoodle'
gcloud spanner rows insert --table=Pets --database=pets-db --instance=test-spanner-instance --data=PetID=$(cat /proc/sys/kernel/random/uuid),OwnerID=$owner_uuid,PetName='Bree',PetType='Dog',Breed='Mutt'
- Veamos si funcionó. Ejecuta la siguiente consulta.
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='SELECT o.OwnerName, p.PetName, p.PetType, p.Breed FROM Owners as o JOIN Pets AS p ON o.OwnerID = p.OwnerID'
-
También puedes ir a la consola y ver los datos. Elige Spanner en la lista de productos. Luego, selecciona test-spanner-instance > pets-db (en Databases) > Pets (en Tables) > Data en el menú de la izquierda.
-
Borra la base de datos con el siguiente comando.
gcloud spanner databases delete pets-db --instance=test-spanner-instance
-
En la consola, verifica que se haya borrado la base de datos.
-
Por último, borra la instancia con el siguiente comando.
gcloud spanner instances delete test-spanner-instance --quiet
Nota: El parámetro --quiet
ejecuta el comando sin solicitarle nada al usuario. Esto también se podría haber agregado al comando anterior. Esto es útil si estás escribiendo una canalización automatizada y no hay un usuario al que preguntarle.
- En la consola, verifica que se haya borrado la instancia.
Tarea 2. Automatiza la infraestructura de Spanner con Terraform
- Crea una carpeta para tus archivos de Terraform y úsala con los siguientes comandos.
mkdir terraform-spanner
cd terraform-spanner
- Necesitas varios archivos para el módulo de Terraform. Ejecuta el siguiente comando para crear los archivos vacíos.
touch main.tf provider.tf terraform.tfvars variables.tf
- Haz clic en el botón Abrir editor para abrir el editor de código. En el panel Explorador de la izquierda, busca la carpeta
terraform-spanner
que acabas de crear y expándela. Selecciona el archivo provider.tf
para abrirlo en el editor y agrégale el siguiente código.
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 4.0"
}
}
}
provider "google" {
project = var.project_id
region = var.region
}
Nota: El código en el bloque de Terraform descarga el proveedor de Google del sitio web de Hashicorp. El código en el bloque del proveedor establece que el proveedor use la región y el ID del proyecto correctos, que establecerás como variables más adelante.
- Abre el archivo
main.tf
y agrega el siguiente bloque de recursos. Este código crea la instancia de Spanner.
resource "google_spanner_instance" "db-instance" {
name = "terraform-spanner-instance"
config = "regional-${var.region}"
display_name = "TF Spanner Instance"
processing_units = var.processing_units
force_destroy = var.force_destroy
}
- En el mismo archivo, debajo del código anterior, agrega el siguiente código, que crea la base de datos de mascotas. Observa el código DDL que define las tablas.
resource "google_spanner_database" "test-database" {
instance = google_spanner_instance.db-instance.name
name = "pets-db"
# Can't run destroy unless set to false
deletion_protection = var.deletion_protection
ddl = [
"CREATE TABLE Owners (OwnerID STRING(36) NOT NULL, OwnerName STRING(MAX) NOT NULL) PRIMARY KEY (OwnerID)",
"CREATE TABLE Pets (PetID STRING(36) NOT NULL, OwnerID STRING(36) NOT NULL, PetType STRING(MAX) NOT NULL, PetName STRING(MAX) NOT NULL, Breed STRING(MAX) NOT NULL) PRIMARY KEY (PetID)",
]
}
- Abre el archivo
variables.tf
. En este archivo, declaras las variables que se usan en el módulo de Terraform. Agrega el siguiente código.
variable "deletion_protection" {
description = "If set to true, you cannot run terraform destroy if there are databases created."
type = bool
default = false
}
variable "force_destroy" {
description = "If set to true, running terraform destroy will delete all backups."
type = bool
default = true
}
variable "processing_units" {
type = number
default = 100
}
variable "project_id" {
description = "The GCP Project ID."
type = string
}
variable "region" {
type = string
}
- Todas las variables, excepto
project_id
y region
, tienen una configuración predeterminada. Usa el archivo terraform.tfvars
para establecer esos valores de variables. Abre ese archivo y agrega lo siguiente.
project_id = "{{{project_0.project_id|placeholder_project_id}}}"
region = "{{{project_0.default_region|place_holder_text}}}"
- Veamos si funciona. Haz clic en el botón Abrir terminal. Ten en cuenta que es posible que debas volver a la pestaña original primero si el editor abrió una pestaña o ventana nuevas. En el símbolo del sistema, ingresa el siguiente comando.
terraform init
- Suponiendo que no hubo errores con el comando anterior, ingresa el siguiente y analiza el resultado. Debería decir que se agregarán dos recursos.
terraform plan
- Por último, ingresa el siguiente comando para crear la instancia de Spanner y la base de datos de mascotas. Debes escribir
yes
cuando se te solicite.
terraform apply
-
Espera que se complete el comando de Terraform. En la consola, navega hasta el servicio de Spanner y verifica que se hayan creado la instancia y la base de datos. No hay un botón de actualización, por lo que es posible que debas hacer clic en otro producto y, luego, volver a Spanner para actualizar la lista de instancias.
-
Regresa a la terminal y, luego, ingresa el siguiente comando para borrar la instancia de Spanner.
terraform destroy -auto-approve
¡Felicitaciones! Automatizaste la creación de instancias y bases de datos de Spanner con el SDK de Google Cloud, la interfaz de línea de comandos (CLI) y Terraform.
Finalice su lab
Cuando haya completado su lab, haga clic en End Lab. Qwiklabs quitará los recursos que usó y limpiará la cuenta por usted.
Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Submit.
La cantidad de estrellas indica lo siguiente:
- 1 estrella = Muy insatisfecho
- 2 estrellas = Insatisfecho
- 3 estrellas = Neutral
- 4 estrellas = Satisfecho
- 5 estrellas = Muy satisfecho
Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, use la pestaña Support.
Copyright 2024 Google LLC. Todos los derechos reservados. Google y el logotipo de Google son marcas de Google LLC. El resto de los nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que están asociados.