Objetos a crear:
- Dirección IP Global: Reserva una dirección IP global para el rango de trabajadores del Cloud Build, utilizada en la configuración de red.
- Conexión de Servicio de Red: Establece una conexión de red entre la red VPC del proyecto y los servicios de Google, facilitando la comunicación segura.
- Configuración de Rutas de Peering: Define cómo se importan y exportan las rutas personalizadas entre la VPC y los servicios de Google, esencial para la gestión del tráfico de red.
- Pool de Trabajadores de Cloud Build: Crea un pool de trabajadores privados para ejecutar tareas de construcción en un entorno controlado y seguro.
Otros:
- APIs de GCP Habilitadas: Activación de servicios esenciales para el proyecto como Compute Engine, Service Usage, Cloud Resource Manager, Service Networking, Cloud Build e IAM.
- Identidad de Servicio de Cloud Build: Genera una identidad de servicio específica para Cloud Build, asegurando la autenticación y autorización adecuadas para el servicio.
- Permiso IAM: Asigna roles de IAM a la cuenta de servicio de Cloud Build para utilizar el pool de trabajadores privados, permitiendo la ejecución segura de las construccion
Modulo de Terraform Registry
https://registry.terraform.io/modules/mdiloreto/cloud_build-private-worker_pool/google/1.1.3
Como llamar el codigo
module "cloud-build-private-worker-pool" {
source = "mdiloreto/cloud_build-private-worker_pool/google"
project_id = var.project_id
cb_region = var.region
network = var.network
network_id = var.network_id
workerpool_name = var.workerpool_name
alloc_range_address = var.alloc_range_address
allocation_prefix_length = var.allocation_prefix_length
cb_prefix_length = var.cb_prefix_length
reserved_peering_ranges = var.reserved_peering_ranges
workerpool_range_name = var.workerpool_range_name
peering_export_custom_routes = var.peering_export_custom_routes
peering_import_custom_routes = var.peering_import_custom_routes
}
Prerrequisitos
Crear Service Account para Terraform
Primero debemos asegurarnos que de haber creado una Service Account para autenticarnos a GCP con Terraform.
Si aun no lo implementaste, te recomiendo que veas el siguiente blog post:
Habilitar Service Usage API
Habilitar la API de Service Usage en el proyecto:
Habilitar Cloud Resource Manager API
Habilitar la Resource Manager API:
Escenarios posibles
Para ejecutar este módulo de Terraform, hay tres escenarios posibles relacionados con la configuración de la Red Virtual Privada (VPC) en Google Cloud Platform (GCP). Cada escenario tiene sus propios requisitos y consideraciones previas para la correcta implementación del módulo. A continuación, se detallan cada uno de estos escenarios:
VPC Preexistente (fuera de Terraform):
- Descripción: En este escenario, ya existe una VPC configurada manualmente o mediante otro método fuera de Terraform antes de ejecutar el módulo. La VPC debe estar en el mismo proyecto de GCP donde se planea implementar el módulo.
- Consideraciones: Es crucial que la VPC esté correctamente configurada con las subredes y las reglas de firewall necesarias para permitir el tráfico hacia y desde los recursos que el módulo creará o utilizará. Esto asegura que el pool de trabajadores de Cloud Build y las conexiones de red funcionen sin problemas.
VPC Preexistente con Acceso a Servicios Privados Habilitado:
- Descripción: Similar al primer escenario, pero con la adición de que la VPC ya tiene habilitado el Acceso a Servicios Privados (Private Services Access). Esto permite que la VPC se comunique con servicios gestionados de Google Cloud, como Cloud SQL, de forma privada, sin exponer el tráfico a Internet.
- Consideraciones: La habilitación del Acceso a Servicios Privados es fundamental si el módulo necesita interactuar con servicios gestionados de Google Cloud. Además, se debe verificar que las configuraciones de peering y las rutas estén correctamente establecidas para garantizar la comunicación privada.
Sin VPC Preexistente:
- Descripción: En este escenario, no existe una VPC configurada previamente. El módulo de Terraform necesitará crear una nueva VPC como parte de su ejecución.
- Consideraciones: Este escenario requiere que el módulo incluya recursos adicionales de Terraform para la creación y configuración de la VPC, incluidas las subredes y las reglas de firewall adecuadas. Esto puede aumentar la complejidad del módulo pero ofrece la flexibilidad de configurar la red de acuerdo con las necesidades específicas del entorno y los servicios que se van a desplegar.
VPC Preexistente con Acceso
Importante
Debido a limitaciones del Provider de GCP, no tenemos forma de solo agregar nuestro Range a una conexión existente. Por este motivo en versiones de Google-beta 4.x provider, pasaremos a tomar ownership total del recurso “Private connections to services”.
Esto quiere decir que cuando destruyamos nuestros recursos de Terraform, este objeto TAMBIEN SERÁ DESTRUIDO.
Por este motivo tenemos que tener MUCHO CUIDADO a la hora de realizar estas manipulaciones en nuestro entorno productivo.
Para chequear si tenemos PRIVATE SERVICES ACCESS habilitado es lo siguiente:
¿Cómo configurar nuestro modulo de terraform con VPC preexistente y Servicios Privados Habilitado?
Para configurar nuestro modulo con VPC preexistente debemos utilizar el siguiente codigo:
module "cloud-build-private-worker-pool" {
source = "mdiloreto/cloud_build-private-worker_pool/google"
project_id = var.project_id
cb_region = var.region
network = var.network
network_id = var.network_id
workerpool_name = var.workerpool_name
alloc_range_address = var.alloc_range_address
allocation_prefix_length = var.allocation_prefix_length
cb_prefix_length = var.cb_prefix_length
reserved_peering_ranges = var.reserved_peering_ranges
workerpool_range_name = var.workerpool_range_name
peering_export_custom_routes = var.peering_export_custom_routes
peering_import_custom_routes = var.peering_import_custom_routes
}
tfvars
:
module "cloud_build_private_worker_pool" {
source = "mdiloreto/cloud_build-private-worker_pool/google"
project_id = "your-project-id"
cb_region = "us-central1"
network = "your-vpc-network"
network_id = "projects/your-project-id/global/networks/your-vpc-network"
workerpool_name = "your-worker-pool-name"
alloc_range_address = "172.16.0.0"
allocation_prefix_length = "24"
cb_prefix_length = "26"
reserved_peering_ranges = ["cloud-build-allocation", "another-reserved-range"]
workerpool_range_name = "cloud-build-allocation"
peering_export_custom_routes = true
peering_import_custom_routes = false
}
reserved_peering_ranges
:
- Esta variable es una lista en donde debemos colocar el nuevo IP Allocation y los preexistentes.
Sin VPC Preexistente:
Cuando no existe una VPC preexistente, debemos crearla a través de nuestro codigo de terraform:
resource "google_compute_network" "vpc_network" {
project = var.project_id
name = var.network
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "vpc_network" {
project = var.project_id
name = var.subnet
ip_cidr_range = var.subnet_ip_range
region = var.region
network = google_compute_network.vpc_network.id
}
module "cloud-build-private-worker-pool" {
source = "mdiloreto/cloud_build-private-worker_pool/google"
project_id = var.project_id
cb_region = var.region
network = var.network
network_id = var.network_id
workerpool_name = var.workerpool_name
alloc_range_address = var.alloc_range_address
allocation_prefix_length = var.allocation_prefix_length
cb_prefix_length = var.cb_prefix_length
reserved_peering_ranges = var.reserved_peering_ranges
workerpool_range_name = var.workerpool_range_name
peering_export_custom_routes = var.peering_export_custom_routes
peering_import_custom_routes = var.peering_import_custom_routes
}
Leave a Reply