<h1 style="color:#0055A4;">Cloud Computing</h1> <h3 style="color:#b0b0b0;">Google Cloud Platform</h3> --- La computación en la nube es una forma diferente de concebir y desplegar infraestructura tecnológica: en lugar de mantener recursos físicos dedicados podemos comprarlos bajo demanda, pagando solo por el uso que hagamos de ellos. --- # Modelos de servicio - `IaaS` Infraestructura como Servicio - `PaaS` Plataforma como Servicio - `SaaS` Software como Servicio --- ## Arquitectura Jerárquica: Regiones y Zonas https://cloud.google.com/about/locations#network **Zonas**: unidades básicas de despliegue **Regiones**: áreas geográficas que contienen zonas >[!Note]Ejemplo > Identificador: `europe-west1-b`. Región: `europe-west1` (Bélgica). Zona: `b` --- ## Zonas y recursos - Recursos zonales (p.e Compute Engine) - Recursos regionales o multiregionales (p.e Storage) - Recursos globales (p.e Cloud Build) --- ## Implicaciones de las regiones - **Soberanía del dato** - **Latencia** - **Alta disponibilidad** - Coste - Disponibilidad de servicios - Transferencia de datos --- ## Implicaciones de las zonas - Alta disponibilidad - Resiliencia - Baja latencia entre zonas --- ## Estimación de latencias - Entre zonas (misma región): ~1-5 ms - Entre regiones: - Mismo continente: 10-40 ms - Diferente continente: 80-180 ms o más :wink: https://www.gcping.com/ --- # Interacción con GCP Permitir a los ingenieros gestionar, automatizar y consumir los recursos de GCP. - Con la consola: `https://console.cloud.google.com/` <br><br> - Usando `Cloud Shell` - Usando el SDK de google (CLI) - Con bibliotecas de lenguajes de programación - A través del API :star: --- ## El SDK de Google https://cloud.google.com/sdk ¡Instalemos el adecuado a nuestro equipo! <div style="display: inline-flex; justify-content: center; align-items: center; gap: 32px;"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/87/Windows_logo_-_2021.svg/512px-Windows_logo_-_2021.svg.png" width="64"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Icon-Mac.svg/256px-Icon-Mac.svg.png" width="64"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tux.svg/1727px-Tux.svg.png" width="64"> </div> --- ### The CLI tools - :arrow_right: `gcloud` (unified Google Cloud resource management) - `bq` (Big query) - `gsutil` (Cloud storage) >[!Note] Hay otros instalables bajo demanda --- ### Básicos de `gcloud` - Inicialización: `gcloud init` - Autenticación: `gcloud auth` - Estructura de una orden: ```bash gcloud [GROUP] [COMMAND] [FLAGS] ``` - Multiconfiguración ```bash gcloud config configuration list ``` --- ### Ejemplos de gestión de recursos con `gcloud` ```bash! gcloud compute instances list gcloud compute instances start operaciones gcloud compute instances stop operaciones ``` --- ### El API HTTP de GCP En GCP se accede a los recursos mediante peticiones HTTP(S) REST estandarizadas. ---- ## Representational State Transfer HTTP REST es un estilo de arquitectura para el diseño de servicios que utiliza el protocolo HTTP para intercambiar datos sobre un recurso - Los recursos se identifican con una URL - Las operaciones sobre los recursos son las de HTTP: \(C\)`POST`, \(R\)`GET`, (U)`PUT`, (D)`DELETE` - Los datos del cuerpo de la petición generalmente son `JSON` o `XML` - Es una arquitectura _stateless_ ---- ### Las VM como recursos en GCP https://cloud.google.com/compute/docs/instances/get-list#rest Universal Resource Locator: ``` https://compute.googleapis.com /compute/v1/projects/PROJECT_ID/zones/ZONE/instances ``` Hagamos una petición REST de tipo GET para obtener todas nuestras máquinas virtuales. ```bash $ curl https://compute.googleapis.com/... ``` >[!Warning]¡Cuidado! >En la URL anterior, sustituye `PROJECT_ID` y `ZONE` por los valores de tu entorno ---- ### Pero no va a funcionar... ```json= { "error": { "code": 401, "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "errors": [ { "message": "Login Required.", "domain": "global", "reason": "required", "location": "Authorization", "locationType": "header" } ], "status": "UNAUTHENTICATED", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "CREDENTIALS_MISSING", "domain": "googleapis.com", "metadata": { "method": "compute.v1.InstancesService.List", "service": "compute.googleapis.com" } } ] } } ``` Necesitamos identificarnos porque ... **en GCP todo depende de quien seas** (who is the `principal`) <!-- .element: class="fragment" data-fragment-index="1" --> ---- ### ¿Quién puede ser `principal`? - 👤 Personas (o grupos): `oscarpoblacion@gmail.com` - 🤖 Máquinas (workloads): `skynet@aso-git.iam.gserviceaccount.com` - 👽 Especiales: `allUsers` ---- Hagamos una visita rápida al gestor de identidades de GCP, el Identity and Access Management ## IAM ---- ### ...volvamos a `curl` Necesitamos añadir la cabecera `Authorization` con algo que nos identifique como `👤 Oscar` con rol `owner` ```bash= $ gcloud auth print-access-token ya29.a0AQQ_BDRHr3zaAPTvBg2KIKkx... ``` Este tipo de tokens pertenece al protocolo de seguridad OAuth2, es un token de acceso opaco que autoriza al portador (`Bearer`) del mismo ---- ### Probemos ahora: ```bash= ➜ curl https://compute.googleapis.com/compute/v1/projects/aso-git/zones/europe-west1-b/instances -H 'Authorization: Bearer ya29.a0A...' ``` ---- ### Implicaciones importantes El API permite acceder de forma programática a todos los recursos de GCP. Podemos crear software que manipule la infraestructura (de hecho, lo haremos en este curso), lo que nos lleva a un concepto importante: :::danger <h4 style="color:red"> IaaC </h4> <h4 style="color:red"> Infraestructura como Código </h4> ::: <span style="float: right">...próximamente</span> --- ## Acceso a la shell de una VM - Usando el cliente ssh desde la consola - Usando `gcloud` - Usando `ssh` clásico --- ### Usando el cliente ssh desde la consola - Aburrido - Lento - Nada ágil para operaciones complejas - Pero te saca de un apuro --- ### Usando `ssh` https://hackmd.io/@ogarcia/ssh-y-google-cloud-engine - [ ] Recordatorio del protocolo - [ ] Generación de clave pública y privada - [ ] Metadatos del proyecto vs claves por máquina - [ ] El archivo `~/.ssh/config` - [ ] Problema de las IP efímeras - [ ] Firewall -> autorizar puerto 22 ```bash $ ssh usuario@ip-efimera ``` ---- ### Operaciones útiles con ssh - `scp` - `rsync` - Agent forwarding --- ### Usando `gcloud` ```bash $ gcloud compute ssh operaciones $ gcloud compute ssh usuario@operaciones ``` ```bash $ gcloud compute scp archivo.txt usuario@instancia:~/destino $ gcloud compute scp usuario@instancia:~/archivo.txt ./ ``` --- ### ¡Extra! A través de `ssh` podemos ejecutar órdenes en la máquina remota ```bash gcloud compute ssh operaciones \ --command "curl -s https://api.my-ip.io/v2/ip.json" ``` Podríamos instalar un programa que comunicara con un sistema de gestión y, a través de él, instalar todo lo que nos hiciera falta en esa máquina, o en mil máquinas 🤯 <!-- .element: style="margin-bottom:1.5em" class="fragment" data-fragment-index="1" --> <span style="float: right;color:gray">Ansible, automated provisioning</span> <span style="float: right">...This is the way</span> <!-- .element: class="fragment" data-fragment-index="2" --> --- # Fin S2/15 :sheep:
{"title":"Introducción a Cloud Computing","description":"Presentación de Sistemas Operativos 2025-2026.","contributors":"[{\"id\":\"93855254-5bcf-438a-b2d1-f9f805e036e4\",\"add\":11489,\"del\":3608,\"latestUpdatedAt\":1757928167357}]"}
    273 views