terraform
Terraform
Terraform es una herramienta de infraestructura como código (IaC) que permite a los usuarios definir y gestionar infraestructuras en múltiples proveedores de nube de manera automatizada y declarativa. Fue desarrollada por HashiCorp y es ampliamente utilizada en la industria para gestionar recursos en la nube, como servidores, bases de datos, redes, y más.
Características principales de Terraform:
-
Infraestructura como Código (IaC): Terraform permite definir la infraestructura mediante archivos de configuración que describen el estado deseado de los recursos. Estos archivos suelen estar escritos en HashiCorp Configuration Language (HCL), que es un lenguaje declarativo, aunque también se pueden escribir en JSON.
-
Declarativo: En lugar de escribir scripts detallados de los pasos para configurar la infraestructura, con Terraform simplemente declaras el estado final deseado, y la herramienta se encarga de calcular los pasos necesarios para llegar a ese estado.
-
Proveedores (Providers): Terraform soporta una amplia gama de proveedores de nube, como AWS, Azure, Google Cloud, y otros servicios. Cada proveedor tiene su propio conjunto de recursos que Terraform puede gestionar.
-
Planificación: Terraform ofrece un comando llamado
terraform plan
que permite ver qué cambios se van a aplicar a la infraestructura antes de ejecutarlos. Esto ayuda a prevenir errores y a revisar los cambios planificados. -
Aplicación de cambios: Con el comando
terraform apply
, Terraform aplica los cambios necesarios para llevar la infraestructura al estado deseado. Esto incluye la creación, modificación o destrucción de recursos. -
Estado (State): Terraform mantiene un archivo de estado que registra la infraestructura actual tal como ha sido gestionada por Terraform. Este estado se utiliza para realizar un seguimiento de los recursos y para determinar qué cambios son necesarios.
-
Modularidad: Terraform soporta la creación de módulos, que son unidades reutilizables de infraestructura. Esto permite a los equipos reutilizar configuraciones y mantener un código más organizado.
Ejemplo básico de un archivo de configuración en Terraform:
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "ExampleInstance"
}
}
En este ejemplo, se está creando una instancia de AWS EC2 en la región "us-west-2" utilizando una imagen AMI específica.
Terraform es muy útil para equipos de DevOps y desarrolladores que necesitan gestionar infraestructuras de manera escalable y repetible, especialmente en entornos de nube.
Configura Terraform
Para trabajar con Terraform, deberás configurar las credenciales de Google Cloud en tu máquina local en este caso la VM e instalar terraform:
- Instala Terraform: Si aún no lo tienes instalado, puedes descargar el Script de instalación e instalar desde VSCode la extensión de Visual Studio Code buscando la palabra
terraform
e instalando la extension deHashiCorp Terraform
Para instalar el Script solo debes ejecutar el siguiente comando desde la ubicación del script:
wget https://raw.githubusercontent.com/z2hx/Resources/main/install-terraform.sh
sudo sh install-terraform.sh
- Configura las credenciales de Google Cloud:
- Sube el archivo de clave JSON que descargamos desde el Service Account. Antes de hacer esto crearemos varios directorios en nuestra carpeta
repos
- Sube el archivo de clave JSON que descargamos desde el Service Account. Antes de hacer esto crearemos varios directorios en nuestra carpeta
cd repos/Boost/Project-1/Module-1
mkidr Terraform
cd Terraform
mkdir Keys
- Inicializa y usa Terraform:
- Crea un archivo de configuración
main.tf
para definir los recursos que deseas gestionar con Terraform en la folderterraform
. Ahora nos dirigiremos a Terraform Provider desde donde copiaremos los siguientes comandos:
- Crea un archivo de configuración
Ejemplo:
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "5.41.0"
}
}
}
provider "google" {
# Configuration options
project = "my-project-id"
region = "us-central1"
}
- Ahora debes reemplazar "my-project-id" por el
ID
del proyectoTerraform-Project
el cual se creo anteriormente. ElID
de proyecto lo encontrarás en el Dashboard de google. - Exporta la variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
con la ruta al archivo JSON:
export GOOGLE_APPLICATION_CREDENTIALS="/home/z2h/repos/Boost/Project-1/Module-1/Terraform/Keys/key.json"
echo GOOGLE_APPLICATION_CREDENTIALS="/home/z2h/repos/Boost/Project-1/Module-1/Terraform/Keys/Key.json"
- Usaremos comandos como
terraform init
,terraform plan
yterraform apply
para trabajar con tu infraestructura. Ahora ejecutemos nuestro primer comandoterraform init
Este comando lo usaremos para inicializar un directorio de trabajo de Terraform con esto preparamos el entorno para que puedas ejecutar otros comandos de Terraform, comoterraform plan
oterraform apply
.
terraform init
- Descarga los proveedores: Instala los plugins necesarios para interactuar con los servicios en la nube o infraestructura que estás gestionando.
- Configura el backend: Prepara el almacenamiento remoto para el estado de Terraform, si estás usando uno.
- Inicializa los módulos: Descarga cualquier módulo que hayas especificado en tu configuración.
Terraform Google Storage
¿Qué es Google Storage?
Google Cloud Storage es un servicio de almacenamiento en la nube proporcionado por Google. Básicamente, es un lugar donde puedes guardar archivos y datos, pero en lugar de estar en tu computadora o en un servidor local, están almacenados en la nube de Google, lo que significa que puedes acceder a ellos desde cualquier lugar y en cualquier momento.
Es como un disco duro virtual. Pero lo interesante es cómo puedes usarlo en el contexto de la ingeniería de datos. Como ingeniero de datos, a menudo necesitas almacenar grandes cantidades de datos.
Google Cloud Storage es ideal para eso. Puedes almacenar datos estructurados y no estructurados, como archivos CSV, JSON, imágenes, vídeos, etc. Y lo mejor es que puedes acceder a esos datos de manera eficiente y rápida desde otros servicios de Google Cloud, como BigQuery, Dataproc o incluso desde tus pipelines de datos personalizados.
¿Y qué otras características tiene que lo hacen bueno para la ingeniería de datos?
Tiene muchas. Por ejemplo, puedes definir políticas de ciclo de vida para tus datos. Esto significa que puedes configurar reglas para que los datos se muevan a un almacenamiento más económico después de un tiempo o incluso que se eliminen automáticamente si ya no los necesitas.
Eso podría ayudar a ahorrar costos. Otra cosa importante es la integración con herramientas de procesamiento de datos. Por ejemplo, puedes usar Google Cloud Storage como fuente o destino de datos en tus pipelines de ETL (Extracción, Transformación y Carga). También puedes aprovechar la seguridad integrada, control de acceso granular y escalabilidad masiva. Esto es crucial cuando manejas grandes volúmenes de datos y necesitas asegurarte de que solo las personas adecuadas tengan acceso a la información.
Y ¿qué tan difícil es empezar a usarlo? Google proporciona SDKs en varios lenguajes de programación como Python, Java y Go, y puedes interactuar con Google Cloud Storage desde la línea de comandos o a través de la consola web de Google Cloud. Además, puedes automatizar procesos usando scripts y conectarlo con otros servicios de Google Cloud.
Deployment Storage
Ahora procederemos a agregar otras líneas de código relacionadas con el Google storage
a nuestro terraform main.tf
. Para buscar esta configuración nos dirigiremos a google storage bucket donde encontraremos el código para configurar nuestro terraform main.tf
el código que copiaremos de esta pagina es el siguiente:
resource "google_storage_bucket" "auto-expire" {
name = "auto-expiring-bucket"
location = "US"
force_destroy = true
storage_class = "STANDARD"
uniform_bucket_level_access = true
lifecycle_rule {
action {
type = "AbortIncompleteMultipartUpload"
}
condition {
age = 1
}
}
versioning {
enabled = true
}
}
Este código lo pegaremos al final de nuestro main.tf
Ahora renombraremos las siguientes líneas de código
auto-expire
porz2h-bucket
Esta nombre se define como una variable local en tu entorno de desarrollo localauto-expiring-bucket
por elterra-buecket-id_de_tu_proyecto
Este nombre se define como una variable global por lo que tiene que ser un nombre único que otro usuario a nivel global no lo este usando. Por esta razon usamos el nombre del ID del proyecto como un sufijo.
Ahora ejecutemos el comando terraform plan
y el terraform apply
Solo debes escribir yes
cuando te lo solicite. Y por ultimo usaremos el terraform destroy
para eliminar el recurso creado.
terraform plan
terraform apply
terraform destroy
Terraform Bigquery
¿Qué es Bigquery?
Bigquery es un servicio de análisis de datos completamente gestionado y escalable en la nube de Google. Está diseñado para permitirte realizar consultas SQL sobre grandes conjuntos de datos de manera extremadamente rápida. En otras palabras, es como un motor de base de datos, pero optimizado para trabajar con grandes volúmenes de datos, incluso petabytes, de manera eficiente.
Entonces, ¿es una especie de base de datos en la nube? Exacto, pero con una diferencia clave. A diferencia de las bases de datos tradicionales que necesitan que gestiones el hardware y optimices las consultas, Bigquery se encarga automáticamente de todo eso por ti. No necesitas preocuparte por la infraestructura subyacente, como el escalado o la gestión de servidores. Simplemente cargas tus datos y puedes empezar a hacer consultas SQL.
¿Y cómo encaja BigQuery en la ingeniería de datos? Es una herramienta muy poderosa para los ingenieros de datos. Por ejemplo, cuando trabajas con grandes volúmenes de datos y necesitas hacer análisis complejos o crear reportes, BigQuery te permite hacerlo sin tener que preocuparte por el rendimiento. Puedes procesar terabytes de datos en segundos o minutos, lo cual sería muy difícil o costoso de hacer con una base de datos tradicional.
¿Y cómo se cargan los datos en BigQuery? Hay varias maneras de hacerlo. Puedes cargar datos directamente desde Google Cloud Storage, conectarte a bases de datos existentes mediante Data Transfer Service o incluso hacer streaming de datos en tiempo real. También es posible integrar BigQuery con otras herramientas de procesamiento de datos en Google Cloud, como Dataflow o Dataproc, para hacer ETL (Extracción, Transformación y Carga) antes de almacenar los datos en BigQuery.
¿Y qué tipo de consultas puedo hacer con BigQuery? Puedes hacer consultas SQL estándar. BigQuery es compatible con el estándar ANSI SQL, lo que significa que si ya sabes SQL, podrás usar BigQuery sin problemas. Además, puedes aprovechar funciones avanzadas como análisis geoespacial, machine learning integrado mediante BigQuery ML, y capacidades de análisis de datos en tiempo real.
¿Y cómo manejo el costo? Porque trabajar con grandes volúmenes de datos podría ser costoso.
BigQuery tiene un modelo de precios basado en el almacenamiento de datos y el costo de las consultas. Pagas por la cantidad de datos que almacenas y por la cantidad de datos que procesas en tus consultas. Para optimizar costos, puedes usar funciones como las consultas particionadas y las tablas particionadas, que te permiten consultar solo los datos que necesitas, minimizando el costo.
Entonces, si optimizas las consultas y manejas bien las particiones, puedes mantener los costos bajo control. Además, BigQuery tiene una capa gratuita que te permite experimentar con pequeñas cantidades de datos sin costo alguno, lo cual es útil si estás comenzando y en este bootcamp haremos uso de esta capa gratuita.
Deployment Bigquery
Ahora procederemos a crear con terraform un servicio de Bigquery
resource "google_bigquery_dataset" "demo_dataset" {
dataset_id = "demo_dataset"
}
.gitignore
Ahora agregaremos un .gitignore con el objetivo de evitar enviar al repositorio información irrelevante o confidencial. Podemos buscar un ejemplo que usaremos para este caso en este [Link](https://github.com/github/gitignore/blob/main/Terraform.gitignore Al final del texto agregaremos este línea ./Keys para omitir la carpeta donde almacenamos la llave de acceso a drive.