Saltar a contenido

Variables y requisitos externos

Esta referencia separa las entradas del pipeline, las entradas HCL y los requisitos que no se crean en el código. El inventario procede del commit ae1502b0: 110 declaraciones en variables.tf y 37 en remote-state.tf, distribuidas en ocho raíces. Los valores privados configurados en GitLab no son visibles en este análisis.

Variables que suministra el operador

Variable CI Proveedor / uso Contrato del código Tratamiento
CLOUD_PROVIDER Ambos aws o gcp; default aws Seleccionar explícitamente
PIPELINE_ACTION Ambos create o destroy; default destroy Seleccionar explícitamente
ENVIRONMENT Ambos Prefijo de estado; default pro Revisar correspondencia con recursos existentes
TF_STATE_TOKEN Ambos Credencial para leer otros estados; usuario HTTP oauth2 Secreto con permisos sobre los estados necesarios
REST_DB_PASSWORD Ambos, database y platform Se exporta como TF_VAR_rest_db_password Obligatoria para esas raíces; mismo valor en ambas
REST_DB_USER Ambos, database y platform Sobrescribe rest_db_user; default HCL restuser Mantener coherencia entre DB y secreto
AGENT_TOKEN AWS platform Se exporta como TF_VAR_agent_token Token del Agent EKS, secreto
GKE_AGENT_TOKEN GCP platform Se exporta como TF_VAR_gke_agent_token Token del Agent GKE, secreto
KAS_ADDRESS Ambas plataformas Se exporta como TF_VAR_kas_address Dirección del Agent Server indicada por la instalación GitLab
AWS_REGION AWS Si existe, sobrescribe TF_VAR_region Default HCL eu-west-1
GCP_PROJECT_ID GCP Si existe, exporta TF_VAR_project_id Obligatoria salvo entrada equivalente TF_VAR_project_id
GCP_REGION GCP Si existe, sobrescribe TF_VAR_region Default HCL europe-west1
GCP_SERVICE_ACCOUNT_KEY GCP Contenido JSON, escrito a un fichero por el job Credencial sensible; no es un contrato de variable tipo File

Si se usa una variable GitLab de tipo File para la clave GCP, su valor en shell será una ruta. El script actual escribiría esa ruta como si fuese JSON. Para adoptar ese tipo de variable hay que adaptar la asignación de GOOGLE_APPLICATION_CREDENTIALS; no basta con cambiar el tipo en la interfaz.

La autenticación AWS se obtiene de la cadena de credenciales del proveedor/CLI. Un runner puede recibir credenciales de entorno (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY y, cuando corresponda, AWS_SESSION_TOKEN) u otra identidad configurada. El repositorio no declara OIDC de GitLab, un rol de aprovisionamiento ni su política completa. No se documenta como implantada una federación de CI que no aparece en el código.

Las variables sensibles deben configurarse en GitLab con los controles de acceso y exposición adecuados. Si se protegen, comprobar que la rama y el contexto que las necesitan están autorizados a recibirlas. No adjuntar sus valores a issues, planes publicados o documentación.

Variables calculadas por el pipeline

STACK se fija por job. TF_ROOT, TF_STATE_NAME, los cuatro <CAPA>_STATE_NAME, TF_HTTP_ADDRESS, TF_HTTP_LOCK_ADDRESS, TF_HTTP_UNLOCK_ADDRESS, TF_HTTP_USERNAME, TF_HTTP_PASSWORD, métodos HTTP y espera de reintento se calculan en .tofu_base. CI_API_V4_URL, CI_PROJECT_ID, CI_PROJECT_DIR y CI_JOB_TOKEN los aporta GitLab. No se deben copiar valores de una ejecución anterior a una configuración permanente.

Las referencias de estado usan las siguientes familias. Todos sus parámetros HCL son obligatorios; el job los inyecta, por lo que no requieren introducirse uno a uno en la interfaz.

Familia HCL Campos declarados Consumidores
network_state_* address, username, password; además lock_address y unlock_address en Kubernetes AWS y GCP: kubernetes, database y platform
eks_state_* address, username, password AWS: database y platform
rds_state_* address, username, password AWS: platform
gke_state_* address, username, password GCP: platform
database_state_* address, username, password GCP: platform

Los username y password se marcan sensitive en HCL. El pipeline también exporta alias de lock y de platform que algunas raíces no declaran. Esto no añade nuevas dependencias o recursos. El mapa de lecturas está en estados.

Entradas HCL por raíz

Para sobrescribir una variable puede suministrarse TF_VAR_<nombre> al job. Los mapas y listas requieren una representación válida para OpenTofu, por ejemplo JSON. Los aliases CI anteriores se exportan en before_script; cuando están presentes, sobrescriben la variable TF_VAR_* correspondiente.

En las tablas, obligatoria significa que no hay default en HCL. Se conserva null cuando el código delega la elección. Los valores mostrados no constituyen una recomendación de tamaño para producción.

aws/network

Fuente: variables.tf.

Variable Tipo Default Sensible
region string "eu-west-1" —
name string "gitlab-terraform-eks" —
vpc_cidr string "10.0.0.0/16" —
private_subnets list(string) [ "10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24" ] —
public_subnets list(string) [ "10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24" ] —
enable_nat_gateway bool true —
single_nat_gateway bool true —
tags map(string) {Project="tfm", Environment="dev", ManagedBy="opentofu"} —

aws/kubernetes

Fuente: variables.tf.

Variable Tipo Default Sensible
region string "eu-west-1" —
cluster_name string "gitlab-terraform-eks" —
cluster_version string "1.31" —
cluster_endpoint_public_access bool true —
cluster_endpoint_public_access_cidrs list(string) ["0.0.0.0/0"] —
instance_type string "t3.small" —
min_instance_count number 1 —
max_instance_count number 3 —
desired_instance_count number 1 —
tags map(string) {Project="tfm", Environment="dev", ManagedBy="opentofu"} —

aws/database

Fuente: variables.tf.

Variable Tipo Default Sensible
region string "eu-west-1" —
name string "gitlab-terraform-eks" —
rest_db_database string "restdb" —
rest_db_user string "restuser" —
rest_db_password string Obligatoria Sí
rest_db_port number 3306 —
rest_db_engine_version string "8.0" —
rest_db_instance_class string "db.t4g.micro" —
rest_db_allocated_storage number 20 —
rest_db_max_allocated_storage number 100 —
backup_retention_period number 1 —
deletion_protection bool false —
skip_final_snapshot bool true —
tags map(string) {Project="tfm", Environment="dev", ManagedBy="opentofu"} —

aws/platform

Fuente: variables.tf.

Variable Tipo Default Sensible
region string "eu-west-1" —
name string "gitlab-terraform-eks" —
aws_load_balancer_controller_namespace string "kube-system" —
aws_load_balancer_controller_service_account string "aws-load-balancer-controller" —
agent_namespace string "gitlab-agent" —
agent_token string Obligatoria Sí
kas_address string Obligatoria —
app_namespace string "app" —
rest_db_user string "restuser" —
rest_db_password string Obligatoria Sí
tags map(string) {Project="tfm", Environment="dev", ManagedBy="opentofu"} —

gcp/network

Fuente: variables.tf.

Variable Tipo Default Sensible
project_id string Obligatoria —
region string "europe-west1" —
name string "gitlab-terraform-gke" —
vpc_cidr string "10.0.0.0/16" —
private_subnets list(string) [ "10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24" ] —
public_subnets list(string) [ "10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24" ] —
enable_cloud_nat bool true —
single_nat_gateway bool true —
private_google_access bool true —
gke_pods_secondary_range_name string "gke-pods" —
gke_services_secondary_range_name string "gke-services" —
gke_pods_secondary_cidr string "10.10.0.0/16" —
gke_services_secondary_cidr string "10.20.0.0/20" —
labels map(string) {project="tfm", environment="dev", managed_by="opentofu"} —

gcp/kubernetes

Fuente: variables.tf.

Variable Tipo Default Sensible
project_id string Obligatoria —
region string "europe-west1" —
cluster_name string "gitlab-terraform-gke" —
cluster_version string null —
regional bool true —
zones list(string) [ "europe-west1-b", "europe-west1-c" ] —
cluster_endpoint_public_access bool true —
cluster_endpoint_public_access_cidrs list(string) ["0.0.0.0/0"] —
master_ipv4_cidr_block string "172.16.0.0/28" —
machine_type string "e2-small" —
disk_size_gb number 50 —
disk_type string "pd-balanced" —
min_instance_count number 1 —
max_instance_count number 3 —
desired_instance_count number 1 —
node_service_account_id string "gke-node-sa" —
node_service_account_roles list(string) [ "roles/logging.logWriter", "roles/monitoring.metricWriter", "roles/monitoring.viewer" ] —
enable_workload_identity bool true —
enable_gce_pd_csi_driver bool true —
deletion_protection bool false —
labels map(string) {project="tfm", environment="dev", managed_by="opentofu"} —

gcp/database

Fuente: variables.tf.

Variable Tipo Default Sensible
project_id string Obligatoria —
region string "europe-west1" —
name string "gitlab-terraform-gke" —
rest_db_database string "restdb" —
rest_db_user string "restuser" —
rest_db_password string Obligatoria Sí
rest_db_port number 3306 —
rest_db_engine_version string "MYSQL_8_0" —
rest_db_instance_tier string "db-f1-micro" —
rest_db_disk_size number 20 —
rest_db_disk_autoresize bool true —
rest_db_disk_autoresize_limit number 100 —
rest_db_availability_type string "ZONAL" —
backup_enabled bool true —
backup_start_time string "02:00" —
deletion_protection bool false —
private_service_access_prefix_length number 16 —
labels map(string) {project="tfm", environment="dev", managed_by="opentofu"} —

gcp/platform

Fuente: variables.tf.

Variable Tipo Default Sensible
project_id string Obligatoria —
region string "europe-west1" —
name string "gitlab-terraform-gke" —
agent_namespace string "gitlab-agent" —
gke_agent_token string Obligatoria Sí
kas_address string Obligatoria —
app_namespace string "app" —
app_service_account_name string "app" —
create_app_service_account bool true —
enable_app_workload_identity bool false —
app_google_service_account_email string null —
rest_db_user string "restuser" —
rest_db_password string Obligatoria Sí
labels map(string) {project="tfm", environment="dev", managed_by="opentofu"} —

Ajustes que deben coordinarse

  • Entornos: ENVIRONMENT no modifica los nombres cloud. Para aislar por nombres se deben coordinar al menos name, cluster_name, la identidad de nodos GCP y las etiquetas, además de las cuentas/proyectos y redes elegidos. No cambiar el nombre de estado de recursos existentes como sustituto de una migración.
  • Regiones GCP: cambiar GCP_REGION deja zones con sus defaults de europe-west1; actualizar ambas configuraciones de forma coherente.
  • Credenciales DB: REST_DB_USER y REST_DB_PASSWORD deben ser coherentes en database y platform. Un cambio de secreto no garantiza que un pod ya arrancado recargue sus variables de entorno.
  • Red GCP: solo se consume el primer elemento de cada lista de subredes. single_nat_gateway no se usa; vpc_cidr es lógico. name en las raíces platform no se utiliza para renombrar el namespace o los releases.
  • Disponibilidad y conservación: AWS fija multi_az=false en el recurso; no hay variable para activarlo. GCP permite ZONAL/REGIONAL para SQL. Revisar backups, protección de eliminación y snapshots antes de cargar datos que deban conservarse.
  • Workload Identity: habilitar el pool y anotar app no crea por sí solo el binding IAM ni modifica las cuentas rest/web usadas por las aplicaciones.

Dependencias externas a estas raíces

Requisito Qué debe existir antes de la fase correspondiente
GitLab Proyecto, runner funcional, acceso al registro de imágenes, backend de estado accesible, permisos y variables
Identidad AWS Autenticación y permisos para los recursos EC2/VPC, IAM, EKS, RDS y recursos asociados que define el código; verificar capacidad de acceso al clúster
Proyecto GCP Facturación, APIs de Compute/GKE/Cloud SQL/Service Networking/IAM necesarias y cuotas
Identidad GCP Cuenta autorizada para aprovisionar recursos y acceder al API Kubernetes durante bootstrap; no se proporciona una política IAM completa en el repo
GitLab Agents Registro de eks-agent y gke-agent, tokens y KAS_ADDRESS; véase acceso
Exposición AWS Certificado ACM y DNS de la aplicación, adaptados al manifiesto Ingress
Aplicación Credencial de lectura del Container Registry y Secret registry en cada clúster; no lo crea Terraform ni el deploy inspeccionado
Entornos de GitLab Conexiones de clúster y permisos según el flujo de despliegue; su configuración privada no es verificable desde el repositorio

Las categorías de permisos anteriores no son una política de privilegios mínimos validada. Deben concretarse para la cuenta y organización antes de ejecutar. Ninguna credencial cloud es necesaria para compilar o publicar este sitio de documentación.

Fuentes

  • Pipeline: mapeo de entradas y backend.
  • Las tablas por raíz enlazan a cada variables.tf del commit revisado. Los 37 parámetros de estado se declaran en los seis remote-state.tf de las capas consumidoras.
  • Proveedor AWS: autenticación.
  • Memoria §7.2.7, páginas impresas 43–49 (PDF 49–55). El inventario completo y los requisitos ausentes se obtienen del código.