diciembre 21, 2025
13 min de lectura

Preguntas para la entrevista de Ingeniero Senior de Cloud en GCP: Guía completa

interview
career-advice
job-search
Preguntas para la entrevista de Ingeniero Senior de Cloud en GCP: Guía completa
MB

Milad Bonakdar

Autor

Domina los conceptos avanzados de GCP con preguntas exhaustivas para entrevistas que cubren el diseño de la arquitectura, GKE, Cloud Functions, la optimización de costos y la seguridad para puestos de ingeniero senior de cloud.


Introducción

Se espera que los ingenieros sénior de la nube de GCP diseñen arquitecturas escalables, implementen servicios avanzados, optimicen los costos y garanticen la seguridad a escala. Este rol requiere una profunda experiencia en los servicios de GCP, las mejores prácticas arquitectónicas y experiencia en producción.

Esta guía cubre preguntas esenciales para entrevistas de ingenieros sénior de la nube de GCP, centrándose en la arquitectura, los servicios avanzados y las soluciones estratégicas.


Arquitectura y Diseño

1. Diseña una aplicación de alta disponibilidad en GCP.

Respuesta: Arquitectura lista para producción con redundancia y escalabilidad:

Loading diagram...

Componentes Clave:

# Crea un grupo de instancias administrado con escalamiento automático
gcloud compute instance-groups managed create my-mig \
  --base-instance-name=my-app \
  --template=my-template \
  --size=3 \
  --zone=us-central1-a

# Configura el escalamiento automático
gcloud compute instance-groups managed set-autoscaling my-mig \
  --max-num-replicas=10 \
  --min-num-replicas=3 \
  --target-cpu-utilization=0.7 \
  --cool-down-period=90

# Crea un balanceador de carga
gcloud compute backend-services create my-backend \
  --protocol=HTTP \
  --health-checks=my-health-check \
  --global

# Agrega el grupo de instancias al backend
gcloud compute backend-services add-backend my-backend \
  --instance-group=my-mig \
  --instance-group-zone=us-central1-a \
  --global

Principios de Diseño:

  • Implementación en múltiples zonas
  • Autoescalado basado en métricas
  • Servicios administrados para bases de datos
  • CDN para contenido estático
  • Comprobaciones de estado y monitorización

Frecuencia: Muy Común Dificultad: Difícil


Google Kubernetes Engine (GKE)

2. ¿Cómo implementas y gestionas aplicaciones en GKE?

Respuesta: GKE es el servicio de Kubernetes administrado de Google.

Proceso de Implementación:

# Crea un clúster de GKE
gcloud container clusters create my-cluster \
  --num-nodes=3 \
  --machine-type=e2-medium \
  --zone=us-central1-a \
  --enable-autoscaling \
  --min-nodes=3 \
  --max-nodes=10

# Obtén las credenciales
gcloud container clusters get-credentials my-cluster \
  --zone=us-central1-a

# Implementa la aplicación
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: gcr.io/my-project/myapp:v1
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080
EOF

Características de GKE:

  • Actualización y reparación automática
  • Workload Identity para seguridad
  • Autorización Binaria
  • Integración con Cloud Monitoring

Frecuencia: Muy Común Dificultad: Difícil


Servicios Avanzados y Serverless

3. ¿Cuándo usarías Cloud Functions vs Cloud Run?

Respuesta: Elige basándote en las características de la carga de trabajo:

Cloud Functions:

  • Dirigido por eventos (Pub/Sub, Storage, HTTP)
  • De corta duración (< 9 minutos)
  • Escalado automático a cero
  • Pago por invocación

Cloud Run:

  • Basado en contenedores
  • Solicitudes HTTP o Pub/Sub
  • De mayor duración (hasta 60 minutos)
  • Más control sobre el entorno
# Ejemplo de Cloud Function
def hello_pubsub(event, context):
    """Desencadenado por un mensaje de Pub/Sub"""
    import base64
    
    if 'data' in event:
        message = base64.b64decode(event['data']).decode('utf-8')
        print(f'Mensaje recibido: {message}')
        
        # Procesa el mensaje
        process_data(message)
# Implementa Cloud Function
gcloud functions deploy hello_pubsub \
  --runtime=python39 \
  --trigger-topic=my-topic \
  --entry-point=hello_pubsub

# Implementa Cloud Run
gcloud run deploy myapp \
  --image=gcr.io/my-project/myapp:v1 \
  --platform=managed \
  --region=us-central1 \
  --allow-unauthenticated

Frecuencia: Común Dificultad: Media


Redes Avanzadas

4. Explica Shared VPC y cuándo usarlo.

Respuesta: Shared VPC permite que múltiples proyectos compartan una red VPC común.

Beneficios:

  • Administración de red centralizada
  • Compartir recursos entre proyectos
  • Facturación simplificada
  • Políticas de seguridad consistentes

Arquitectura:

Loading diagram...
# Habilita Shared VPC en el proyecto host
gcloud compute shared-vpc enable my-host-project

# Adjunta el proyecto de servicio
gcloud compute shared-vpc associated-projects add my-service-project \
  --host-project=my-host-project

# Otorga permisos
gcloud projects add-iam-policy-binding my-host-project \
  --member=serviceAccount:[email protected] \
  --role=roles/compute.networkUser

Casos de Uso:

  • Grandes organizaciones
  • Entornos multi-equipo
  • Gestión de red centralizada
  • Requisitos de cumplimiento

Frecuencia: Común Dificultad: Media-Difícil


Optimización de Costos

5. ¿Cómo optimizas los costos de GCP?

Respuesta: Estrategias de optimización de costos:

1. Ajuste de tamaño (Right-sizing):

# Usa la API de Recommender
gcloud recommender recommendations list \
  --project=my-project \
  --location=us-central1 \
  --recommender=google.compute.instance.MachineTypeRecommender

2. Descuentos por Uso Comprometido:

  • Compromisos de 1 o 3 años
  • Hasta un 57% de ahorro
  • Flexible o basado en recursos

3. VMs Preemptibles:

# Crea una instancia preemptible
gcloud compute instances create my-preemptible \
  --preemptible \
  --machine-type=e2-medium

4. Ciclo de Vida del Almacenamiento:

# Establece la política de ciclo de vida
gsutil lifecycle set lifecycle.json gs://my-bucket

# lifecycle.json
{
  "lifecycle": {
    "rule": [
      {
        "action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
        "condition": {"age": 30}
      },
      {
        "action": {"type": "Delete"},
        "condition": {"age": 365}
      }
    ]
  }
}

5. Monitorización:

  • Informes de Cloud Billing
  • Alertas de presupuesto
  • Desglose de costos por servicio/proyecto

Frecuencia: Muy Común Dificultad: Media


Seguridad

6. ¿Cómo implementas las mejores prácticas de seguridad en GCP?

Respuesta: Enfoque de seguridad multicapa:

1. Mejores Prácticas de IAM:

# Usa cuentas de servicio con permisos mínimos
gcloud iam service-accounts create my-app-sa \
  --display-name="My App Service Account"

# Otorga un rol específico
gcloud projects add-iam-policy-binding my-project \
  --member=serviceAccount:[email protected] \
  --role=roles/storage.objectViewer \
  --condition='expression=resource.name.startsWith("projects/_/buckets/my-bucket"),title=bucket-access'

2. Seguridad de VPC:

  • Acceso Privado a Google
  • VPC Service Controls
  • Cloud Armor para protección DDoS

3. Encriptación de Datos:

# Claves de encriptación gestionadas por el cliente
gcloud kms keyrings create my-keyring \
  --location=global

gcloud kms keys create my-key \
  --location=global \
  --keyring=my-keyring \
  --purpose=encryption

# Usa con Cloud Storage
gsutil -o 'GSUtil:encryption_key=...' cp file.txt gs://my-bucket/

4. Monitorización:

  • Cloud Audit Logs
  • Security Command Center
  • Cloud Logging y Monitoring

Frecuencia: Muy Común Dificultad: Difícil


Análisis de Datos

7. ¿Cómo diseñas y optimizas BigQuery para análisis a gran escala?

Respuesta: BigQuery es el almacén de datos sin servidor y altamente escalable de Google.

Arquitectura:

  • Almacenamiento columnar
  • Escalado automático
  • Interfaz SQL
  • Escala de petabytes
  • Precios de pago por consulta

Diseño de Tablas:

-- Crea una tabla particionada
CREATE TABLE mydataset.events
(
  event_id STRING,
  user_id STRING,
  event_type STRING,
  event_data JSON,
  event_timestamp TIMESTAMP
)
PARTITION BY DATE(event_timestamp)
CLUSTER BY user_id, event_type
OPTIONS(
  partition_expiration_days=90,
  require_partition_filter=true
);

-- Crea una vista materializada
CREATE MATERIALIZED VIEW mydataset.daily_summary
AS
SELECT
  DATE(event_timestamp) as event_date,
  event_type,
  COUNT(*) as event_count,
  COUNT(DISTINCT user_id) as unique_users
FROM mydataset.events
GROUP BY event_date, event_type;

Estrategias de Optimización:

1. Particionamiento:

-- Particionamiento basado en tiempo
CREATE TABLE mydataset.sales
PARTITION BY DATE(sale_date)
AS SELECT * FROM source_table;

-- Particionamiento de rango de enteros
CREATE TABLE mydataset.user_data
PARTITION BY RANGE_BUCKET(user_id, GENERATE_ARRAY(0, 1000000, 10000))
AS SELECT * FROM source_table;

-- Consulta con filtro de partición (rentable)
SELECT *
FROM mydataset.events
WHERE DATE(event_timestamp) BETWEEN '2024-01-01' AND '2024-01-31'
  AND event_type = 'purchase';

2. Clustering:

-- Agrupa por columnas filtradas frecuentemente
CREATE TABLE mydataset.logs
PARTITION BY DATE(log_timestamp)
CLUSTER BY user_id, region, status
AS SELECT * FROM source_logs;

-- Las consultas se benefician del clustering
SELECT *
FROM mydataset.logs
WHERE DATE(log_timestamp) = '2024-11-26'
  AND user_id = '12345'
  AND region = 'us-east1';

3. Optimización de Consultas:

-- Mal: SELECT * (escanea todas las columnas)
SELECT * FROM mydataset.large_table;

-- Bien: SELECT columnas específicas
SELECT user_id, event_type, event_timestamp
FROM mydataset.large_table;

-- Usa agregación aproximada para grandes conjuntos de datos
SELECT APPROX_COUNT_DISTINCT(user_id) as unique_users
FROM mydataset.events;

-- Evita las auto-uniones, usa funciones de ventana
SELECT
  user_id,
  event_timestamp,
  LAG(event_timestamp) OVER (PARTITION BY user_id ORDER BY event_timestamp) as prev_event
FROM mydataset.events;

4. Control de Costos:

# Establece el máximo de bytes facturados
bq query \
  --maximum_bytes_billed=1000000000 \
  --use_legacy_sql=false \
  'SELECT COUNT(*) FROM mydataset.large_table'

# Ejecución en seco para estimar los costos
bq query \
  --dry_run \
  --use_legacy_sql=false \
  'SELECT * FROM mydataset.large_table'

Carga de Datos:

# Carga desde Cloud Storage
bq load \
  --source_format=NEWLINE_DELIMITED_JSON \
  --autodetect \
  mydataset.mytable \
  gs://mybucket/data/*.json

# Carga con esquema
bq load \
  --source_format=CSV \
  --skip_leading_rows=1 \
  mydataset.mytable \
  gs://mybucket/data.csv \
  schema.json

# Inserciones en streaming (tiempo real)
from google.cloud import bigquery

client = bigquery.Client()
table_id = "my-project.mydataset.mytable"

rows_to_insert = [
    {"user_id": "123", "event_type": "click", "timestamp": "2024-11-26T10:00:00"},
    {"user_id": "456", "event_type": "purchase", "timestamp": "2024-11-26T10:05:00"},
]

errors = client.insert_rows_json(table_id, rows_to_insert)
if errors:
    print(f"Errores: {errors}")

Mejores Prácticas:

  • Siempre usa filtros de partición
  • Agrupa por columnas de alta cardinalidad
  • Evita SELECT *
  • Usa funciones aproximadas para grandes conjuntos de datos
  • Monitoriza los costos de las consultas
  • Usa vistas materializadas para consultas repetidas
  • Desnormaliza los datos cuando sea apropiado

Frecuencia: Muy Común Dificultad: Difícil


Servicios Avanzados de Bases de Datos

8. ¿Cuándo usarías Cloud Spanner vs Cloud SQL?

Respuesta: Elige basándote en la escala, la consistencia y los requisitos geográficos:

Cloud Spanner:

  • Base de datos relacional distribuida globalmente
  • Escalado horizontal (ilimitado)
  • Consistencia fuerte en todas las regiones
  • SLA de disponibilidad del 99.999%
  • Mayor costo

Cloud SQL:

  • Base de datos regional administrada (MySQL, PostgreSQL, SQL Server)
  • Escalado vertical (limitado)
  • Región única (con réplicas de lectura)
  • SLA de disponibilidad del 99.95%
  • Menor costo

Comparación:

CaracterísticaCloud SpannerCloud SQL
EscalaPetabytesTerabytes
ConsistenciaGlobal fuerteRegional
Disponibilidad99.999%99.95%
LatenciaUn dígito ms globalmenteBaja (regional)
CostoAltoModerado
Caso de UsoAplicaciones globales, sistemas financierosAplicaciones regionales, cargas de trabajo tradicionales

Ejemplo de Cloud Spanner:

-- Crea una instancia de Spanner
gcloud spanner instances create my-instance \
  --config=regional-us-central1 \
  --nodes=3 \
  --description="Instancia de producción"

-- Crea una base de datos
gcloud spanner databases create my-database \
  --instance=my-instance \
  --ddl='CREATE TABLE Users (
    UserId INT64 NOT NULL,
    Username STRING(100),
    Email STRING(255),
    CreatedAt TIMESTAMP
  ) PRIMARY KEY (UserId)'

-- Inserta datos
gcloud spanner databases execute-sql my-database \
  --instance=my-instance \
  --sql="INSERT INTO Users (UserId, Username, Email, CreatedAt)
        VALUES (1, 'alice', '[email protected]', CURRENT_TIMESTAMP())"

-- Consulta con consistencia fuerte
gcloud spanner databases execute-sql my-database \
  --instance=my-instance \
  --sql="SELECT * FROM Users WHERE UserId = 1"

Cliente Python:

from google.cloud import spanner

# Crea el cliente
spanner_client = spanner.Client()
instance = spanner_client.instance('my-instance')
database = instance.database('my-database')

# Lee con consistencia fuerte
def read_user(user_id):
    with database.snapshot() as snapshot:
        results = snapshot.execute_sql(
            "SELECT UserId, Username, Email FROM Users WHERE UserId = @user_id",
            params={"user_id": user_id},
            param_types={"user_id": spanner.param_types.INT64}
        )
        for row in results:
            print(f"Usuario: {row[0]}, {row[1]}, {row[2]}")

# Escribe con transacción
def create_user(user_id, username, email):
    def insert_user(transaction):
        transaction.execute_update(
            "INSERT INTO Users (UserId, Username, Email, CreatedAt) "
            "VALUES (@user_id, @username, @email, CURRENT_TIMESTAMP())",
            params={
                "user_id": user_id,
                "username": username,
                "email": email
            },
            param_types={
                "user_id": spanner.param_types.INT64,
                "username": spanner.param_types.STRING,
                "email": spanner.param_types.STRING
            }
        )
    
    database.run_in_transaction(insert_user)

Ejemplo de Cloud SQL:

# Crea una instancia de Cloud SQL
gcloud sql instances create my-instance \
  --database-version=POSTGRES_14 \
  --tier=db-n1-standard-2 \
  --region=us-central1 \
  --root-password=mypassword

# Crea una base de datos
gcloud sql databases create mydatabase \
  --instance=my-instance

# Conecta
gcloud sql connect my-instance --user=postgres

# Crea una réplica de lectura
gcloud sql instances create my-replica \
  --master-instance-name=my-instance \
  --tier=db-n1-standard-1 \
  --region=us-east1

Cuándo Usar:

Usa Cloud Spanner cuando:

  • Necesitas distribución global
  • Requiere consistencia fuerte en todas las regiones
  • Escala más allá de una sola región
  • Transacciones financieras
  • Aplicaciones de misión crítica
  • El presupuesto permite un mayor costo

Usa Cloud SQL cuando:

  • Aplicación regional
  • Familiarizado con MySQL/PostgreSQL
  • Sensible a los costos
  • Escala moderada (< 10TB)
  • Cargas de trabajo SQL existentes
  • No necesitas consistencia global

Frecuencia: Común Dificultad: Media-Difícil


Seguridad y Cumplimiento

9. ¿Cómo implementas VPC Service Controls?

Respuesta: VPC Service Controls crea perímetros de seguridad alrededor de los recursos de GCP para evitar la exfiltración de datos.

Conceptos Clave:

  • Perímetro de Servicio: Límite alrededor de los recursos
  • Niveles de Acceso: Condiciones para el acceso
  • Reglas de Ingreso/Egreso: Controla el flujo de datos

Arquitectura:

Loading diagram...

Configuración:

# Crea una política de acceso
gcloud access-context-manager policies create \
  --organization=123456789 \
  --title="Política de Producción"

# Crea un nivel de acceso
gcloud access-context-manager levels create CorpNetwork \
  --policy=accessPolicies/123456789 \
  --title="Red Corporativa" \
  --basic-level-spec=access_level.yaml

# access_level.yaml
conditions:
  - ipSubnetworks:
    - 203.0.113.0/24  # Rango de IP corporativo
  - members:
    - user:[email protected]

Crea un Perímetro de Servicio:

# Crea el perímetro
gcloud access-context-manager perimeters create production_perimeter \
  --policy=accessPolicies/123456789 \
  --title="Perímetro de Producción" \
  --resources=projects/123456789012 \
  --restricted-services=storage.googleapis.com,bigquery.googleapis.com \
  --access-levels=accessPolicies/123456789/accessLevels/CorpNetwork

# Agrega un proyecto al perímetro
gcloud access-context-manager perimeters update production_perimeter \
  --policy=accessPolicies/123456789 \
  --add-resources=projects/987654321098

Reglas de Ingreso/Egreso:

# ingress_rule.yaml
ingressPolicies:
  - ingressFrom:
      sources:
        - accessLevel: accessPolicies/123456789/accessLevels/CorpNetwork
      identities:
        - serviceAccount:[email protected]
    ingressTo:
      resources:
        - '*'
      operations:
        - serviceName: storage.googleapis.com
          methodSelectors:
            - method: '*'

# Aplica la regla de ingreso
gcloud access-context-manager perimeters update production_perimeter \
  --policy=accessPolicies/123456789 \
  --set-ingress-policies=ingress_rule.yaml

Reglas de Egreso:

# egress_rule.yaml
egressPolicies:
  - egressFrom:
      identities:
        - serviceAccount:[email protected]
    egressTo:
      resources:
        - projects/external-project-id
      operations:
        - serviceName: storage.googleapis.com
          methodSelectors:
            - method: 'google.storage.objects.create'

# Aplica la regla de egreso
gcloud access-context-manager perimeters update production_perimeter \
  --policy=accessPolicies/123456789 \
  --set-egress-policies=egress_rule.yaml

Servicios Soportados:

  • Cloud Storage
  • BigQuery
  • Cloud SQL
  • Compute Engine
  • GKE
  • Cloud Functions
  • Y muchos más

Pruebas:

# Prueba el acceso desde dentro del perímetro
from google.cloud import storage

def test_access():
    try:
        client = storage.Client()
        bucket = client.bucket('my-protected-bucket')
        blobs = list(bucket.list_blobs())
        print(f"Acceso concedido: {len(blobs)} objetos")
    except Exception as e:
        print(f"Acceso denegado: {e}")

# Esto tendrá éxito desde la red autorizada
# Esto fallará desde la red no autorizada
test_access()

Monitorización:

# Ve los registros de VPC SC
gcloud logging read \
  'protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"' \
  --limit=50 \
  --format=json

Casos de Uso:

  • Evitar la exfiltración de datos
  • Requisitos de cumplimiento (HIPAA, PCI-DSS)
  • Proteger datos sensibles
  • Aislar entornos de producción
  • Seguridad multi-inquilino

Mejores Prácticas:

  • Comienza con el modo de prueba (dry-run)
  • Prueba a fondo antes de la aplicación
  • Usa niveles de acceso para un control granular
  • Monitoriza los registros de VPC SC
  • Documenta los límites del perímetro
  • Revisiones de acceso regulares

Frecuencia: Poco Común Dificultad: Difícil


Conclusión

Las entrevistas para ingenieros sénior de la nube de GCP requieren un profundo conocimiento técnico y experiencia práctica. Concéntrate en:

  1. Arquitectura: Alta disponibilidad, escalabilidad, recuperación ante desastres
  2. GKE: Orquestación de contenedores, estrategias de implementación
  3. Serverless: Casos de uso de Cloud Functions, Cloud Run
  4. Redes: Shared VPC, conectividad híbrida
  5. Optimización de Costos: Ajuste de tamaño, uso comprometido, políticas de ciclo de vida
  6. Seguridad: IAM, encriptación, controles de VPC

Demuestra experiencia del mundo real con sistemas de producción y toma de decisiones estratégicas. ¡Buena suerte!

Newsletter subscription

Consejos de carrera semanales que realmente funcionan

Recibe las últimas ideas directamente en tu bandeja de entrada

Decorative doodle

Deja de Postularte. Comienza a Ser Contratado.

Transforma tu currículum en un imán de entrevistas con optimización impulsada por IA confiada por buscadores de empleo en todo el mundo.

Comienza gratis

Compartir esta publicación

Reduce el Tiempo de Escritura de tu Currículum en un 90%

El buscador de empleo promedio pasa más de 3 horas formateando un currículum. Nuestra IA lo hace en menos de 15 minutos, llevándote a la fase de solicitud 12 veces más rápido.