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:
ENVIRONMENTno modifica los nombres cloud. Para aislar por nombres se deben coordinar al menosname,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_REGIONdejazonescon sus defaults deeurope-west1; actualizar ambas configuraciones de forma coherente. - Credenciales DB:
REST_DB_USERyREST_DB_PASSWORDdeben ser coherentes endatabaseyplatform. 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_gatewayno se usa;vpc_cidres lógico.nameen las raíces platform no se utiliza para renombrar el namespace o los releases. - Disponibilidad y conservación: AWS fija
multi_az=falseen el recurso; no hay variable para activarlo. GCP permiteZONAL/REGIONALpara SQL. Revisar backups, protección de eliminación y snapshots antes de cargar datos que deban conservarse. - Workload Identity: habilitar el pool y anotar
appno crea por sí solo el binding IAM ni modifica las cuentasrest/webusadas 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.tfdel commit revisado. Los 37 parámetros de estado se declaran en los seisremote-state.tfde 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.