{"id":15866987,"url":"https://github.com/amartingarcia/gcp-cloud-engineer-associate-training","last_synced_at":"2026-01-11T16:48:28.383Z","repository":{"id":122826377,"uuid":"486312715","full_name":"amartingarcia/gcp-cloud-engineer-associate-training","owner":"amartingarcia","description":"Google Cloud Enginee Associate  Exam Preparation","archived":false,"fork":false,"pushed_at":"2022-09-01T06:44:04.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-07T13:56:12.660Z","etag":null,"topics":["gcp","google"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amartingarcia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-27T18:44:50.000Z","updated_at":"2024-07-31T14:41:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"6591c89c-897b-44fa-9219-0f4a6427dae3","html_url":"https://github.com/amartingarcia/gcp-cloud-engineer-associate-training","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amartingarcia%2Fgcp-cloud-engineer-associate-training","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amartingarcia%2Fgcp-cloud-engineer-associate-training/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amartingarcia%2Fgcp-cloud-engineer-associate-training/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amartingarcia%2Fgcp-cloud-engineer-associate-training/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amartingarcia","download_url":"https://codeload.github.com/amartingarcia/gcp-cloud-engineer-associate-training/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246710635,"owners_count":20821440,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gcp","google"],"created_at":"2024-10-05T23:40:40.856Z","updated_at":"2026-01-11T16:48:28.338Z","avatar_url":"https://github.com/amartingarcia.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# training_gcp_cloud_engineer_associate\n\n# Table of Contents\n- [training_gcp_cloud_engineer_associate](#training_gcp_cloud_engineer_associate)\n- [Table of Contents](#table-of-contents)\n- [1 - Google Cloud Regions and Zones](#1---google-cloud-regions-and-zones)\n  - [Regions and Zones](#regions-and-zones)\n- [2 - Google Compute Engine](#2---google-compute-engine)\n  - [Features](#features)\n  - [Family](#family)\n    - [Example](#example)\n  - [Image](#image)\n  - [Internal and External IP](#internal-and-external-ip)\n    - [Static IP](#static-ip)\n  - [Reduce the number of steps when create and configure VM instance](#reduce-the-number-of-steps-when-create-and-configure-vm-instance)\n    - [Startup Scripts](#startup-scripts)\n  - [Instance Template](#instance-template)\n  - [Custom image](#custom-image)\n- [3 - Optimizing Costs and Perfomance](#3---optimizing-costs-and-perfomance)\n  - [Sustained use discounts](#sustained-use-discounts)\n  - [Committed use discounts](#committed-use-discounts)\n  - [Discounts for Preemptible VM instances](#discounts-for-preemptible-vm-instances)\n  - [Google Compute Engine - Billing](#google-compute-engine---billing)\n  - [Compute Engine: Live Migration \u0026 Availability Policy](#compute-engine-live-migration--availability-policy)\n  - [Custom Machine Types](#custom-machine-types)\n  - [GPUs](#gpus)\n  - [Virtual Machine - Remember](#virtual-machine---remember)\n  - [Virtual Machine - Best Practices](#virtual-machine---best-practices)\n  - [Scenarios](#scenarios)\n- [4 - Gcloud](#4---gcloud)\n  - [Gcloud example commands](#gcloud-example-commands)\n  - [Syntax](#syntax)\n    - [Examples:](#examples)\n- [5 - Instance Groups](#5---instance-groups)\n  - [Updating](#updating)\n  - [Instance Group - Scenarios](#instance-group---scenarios)\n  - [Some commands](#some-commands)\n- [6 - Cloud Load Balancing](#6---cloud-load-balancing)\n  - [Terminology](#terminology)\n  - [Features](#features-1)\n  - [Scenarios](#scenarios-1)\n- [7 - App Engine](#7---app-engine)\n  - [Compute Engine vs App Engine](#compute-engine-vs-app-engine)\n  - [Environments](#environments)\n  - [Hierarchy](#hierarchy)\n  - [Standard vs flexible](#standard-vs-flexible)\n  - [Scaling instances](#scaling-instances)\n  - [Some commands](#some-commands-1)\n  - [Request routing](#request-routing)\n  - [Deploying new versions without downtime](#deploying-new-versions-without-downtime)\n  - [Split traffic between multiple versions?](#split-traffic-between-multiple-versions)\n  - [Apps](#apps)\n    - [Instances](#instances)\n    - [Services and versions](#services-and-versions)\n  - [Cronjobs](#cronjobs)\n  - [Others files](#others-files)\n  - [Remember](#remember)\n  - [Scenarios](#scenarios-2)\n- [8 - Cloud Functions](#8---cloud-functions)\n  - [Concepts](#concepts)\n- [9 - Cloud Run](#9---cloud-run)\n  - [Command line](#command-line)\n- [10 - Block and File Storage](#10---block-and-file-storage)\n  - [Block Storage](#block-storage)\n  - [File Storage](#file-storage)\n  - [Types](#types)\n  - [Local SSDs](#local-ssds)\n  - [Persistent Disk](#persistent-disk)\n  - [PD vs SSDs](#pd-vs-ssds)\n  - [PD - Standard vs Balanced vs SSD](#pd---standard-vs-balanced-vs-ssd)\n  - [PD Snaphots](#pd-snaphots)\n    - [PD Recommendations](#pd-recommendations)\n  - [Compares](#compares)\n  - [Command line](#command-line-1)\n    - [Disks](#disks)\n    - [Images](#images)\n  - [Scenarios - Persistent Disks](#scenarios---persistent-disks)\n  - [Filestore](#filestore)\n  - [Review](#review)\n  - [Scenarios - Block and File Storage](#scenarios---block-and-file-storage)\n- [11 - Object Storage](#11---object-storage)\n  - [Object Cloud Storage](#object-cloud-storage)\n  - [Object Cloud Objects and Buckets](#object-cloud-objects-and-buckets)\n  - [Object Cloud Classes](#object-cloud-classes)\n  - [Object Cloud Object Versioning](#object-cloud-object-versioning)\n  - [Object Cloud Lifecycle Management](#object-cloud-lifecycle-management)\n  - [Object Cloud Encryption](#object-cloud-encryption)\n  - [Object Cloud Scenarios](#object-cloud-scenarios)\n  - [Object Cloud Commands](#object-cloud-commands)\n- [12 - IAM](#12---iam)\n  - [IAM](#iam)\n  - [Roles](#roles)\n    - [Roles - Example permissions](#roles---example-permissions)\n  - [Members, Role and Policy](#members-role-and-policy)\n    - [Policy](#policy)\n  - [Some commands](#some-commands-2)\n  - [Service Accounts](#service-accounts)\n    - [Service Accounts - Scenarios](#service-accounts---scenarios)\n  - [ACLs](#acls)\n- [13 - Choosing Database](#13---choosing-database)\n  - [Database Categories](#database-categories)\n  - [Relational Database](#relational-database)\n  - [OLTP Relational Databases](#oltp-relational-databases)\n  - [OLAP Relational Databases](#olap-relational-databases)\n  - [OLTP vs OLAP](#oltp-vs-olap)\n  - [NoSQL](#nosql)\n  - [In-Memory](#in-memory)\n  - [Summary](#summary)\n  - [Scenarios](#scenarios-3)\n- [14 - Exploring Database](#14---exploring-database)\n  - [CloudSQL](#cloudsql)\n  - [Commands](#commands)\n  - [CloudSQL Features](#cloudsql-features)\n  - [Cloud Spanner](#cloud-spanner)\n  - [Cloud Datastore and Cloud Firestore](#cloud-datastore-and-cloud-firestore)\n  - [BigTable](#bigtable)\n  - [Memorystore](#memorystore)\n  - [BigQuery](#bigquery)\n  - [Commands](#commands-1)\n    - [Commands - gcloud sql](#commands---gcloud-sql)\n    - [Commands - bq](#commands---bq)\n    - [Commands - cbt](#commands---cbt)\n  - [Summary](#summary-1)\n- [15 - Pub/Sub](#15---pubsub)\n  - [Pub/Sub - Summary](#pubsub---summary)\n  - [Pub/Sub - Commands](#pubsub---commands)\n- [16 - Cloud VPC](#16---cloud-vpc)\n  - [VPC](#vpc)\n  - [Firewall Rules](#firewall-rules)\n  - [Ingress and Egress Rules](#ingress-and-egress-rules)\n  - [Shared VPC](#shared-vpc)\n  - [VPC Peering](#vpc-peering)\n  - [Cloud VPN, Cloud Interconnect and Direct Peering](#cloud-vpn-cloud-interconnect-and-direct-peering)\n    - [Cloud VPN](#cloud-vpn)\n  - [Cloud Interconnect](#cloud-interconnect)\n  - [Direct Peering](#direct-peering)\n- [17 - Operations](#17---operations)\n  - [Cloud Monitoring](#cloud-monitoring)\n    - [Cloud Monitoring - Workspace](#cloud-monitoring---workspace)\n    - [Cloud Monitoring - VM](#cloud-monitoring---vm)\n  - [Cloud Logging](#cloud-logging)\n  - [Cloud Audit Logs](#cloud-audit-logs)\n  - [Cloud Routing Logs and Exports](#cloud-routing-logs-and-exports)\n  - [Cloud Trace](#cloud-trace)\n  - [Cloud Debugger](#cloud-debugger)\n  - [Cloud Profiler](#cloud-profiler)\n  - [Error Reporting](#error-reporting)\n  - [Operations - Scenarios](#operations---scenarios)\n- [18 - Organizations and IAM](#18---organizations-and-iam)\n  - [Projects, Folders and Organization](#projects-folders-and-organization)\n    - [Projects, Folders and Organization - Recommendations](#projects-folders-and-organization---recommendations)\n  - [Billing Accounts](#billing-accounts)\n    - [Billing Accounts - Budget, Alerts and Exports](#billing-accounts---budget-alerts-and-exports)\n  - [IAM Best Practices](#iam-best-practices)\n  - [User Identity Management](#user-identity-management)\n  - [IAM members/Identities](#iam-membersidentities)\n    - [IAM members/Identities - use Cases](#iam-membersidentities---use-cases)\n  - [Policy Service](#policy-service)\n  - [IAM Roles](#iam-roles)\n    - [IAM Roles - Organization, Billing and Project Roles](#iam-roles---organization-billing-and-project-roles)\n    - [IAM Roles - GCE](#iam-roles---gce)\n    - [IAM Roles - Google App Engine](#iam-roles---google-app-engine)\n    - [IAM Roles - GKE](#iam-roles---gke)\n    - [IAM Roles - Google Cloud Storage](#iam-roles---google-cloud-storage)\n    - [IAM Roles - Google Cloud BigQuery](#iam-roles---google-cloud-bigquery)\n    - [IAM Roles - Logging and Service Accounts](#iam-roles---logging-and-service-accounts)\n    - [IAM Roles - Other importante IAM Roles](#iam-roles---other-importante-iam-roles)\n- [20 - Other Services](#20---other-services)\n  - [Cloud Deployment Manager](#cloud-deployment-manager)\n  - [Cloud Marketplace (Cloud Launcher)](#cloud-marketplace-cloud-launcher)\n  - [Cloud DNS](#cloud-dns)\n  - [Cloud Dataflow](#cloud-dataflow)\n  - [Cloud Dataproc](#cloud-dataproc)\n- [21 - Extras](#21---extras)\n\n\n\n# 1 - Google Cloud Regions and Zones\n## Regions and Zones\nLos recursos de Compute Engine se alojan en varias ubicaciones en todo el mundo. Estas ubicaciones se componen de `regions` y `zones`. Una `region` es una ubicación geográfica específica donde puedes alojar recursos. Las `regions` se dividen en tres o más `zones`. Por ejemplo, la región `us-west1` corresponde a una región en la costa oeste de Estados Unidos que tiene tres zonas: `us-west1-a`, `us-west1-b` y `us-west1-c`.\n\nAlgunos recursos como las `instances` o los `Persistent Disk` son recursos de `zone`. Otros como las `IP estáticas` son `regionals`. Los recursos `regionals` pueden ser usados por cualquier recurso de esa región.\n\nSolo ciertos recursos son específicos de una región o zona. Otros recursos como las `images` son globales.\n\nCompute Engine implementa una capa de abstracción entre las zonas y los clústeres físicos donde se alojan las zonas. Un clúster representa una infraestructura física distinta que se aloja en un centro de datos. Cada zona está alojada en uno o más clústeres y Compute Engine asigna de forma independiente las zonas a los clústeres de cada organización. Por ejemplo, es posible que la `us-central1-a` zona de su organización no se asigne al mismo clúster que la `us-central1-a` zona de otra organización.\n\nEl cliente elige la `region` o `zones` donde aloja sus recursos, elegir una `zone` y `region` es importante por varios motivos:\n* __Handling failures__ (manejo de fallas): distribuya sus recruso en varias zonas y regiones para tolerar fallos\n* __Decreased network latency__ (latencia de red reducida): Para disminuir la latencia de red es posible que desee elegir una region o zona que esté más cera de su punto de servicio.\n\n* __Regions__: Las regiones son colecciones de zonas.\n* __Zones__: Es un área de despliegue dentro de una región.\n\nCiertos recursos como `Images`, `Elastics IP`, `firewall rules` y `VPC networks`, __tienen límites de `Quota definidos para todo el proyecto y límites de quota por region__. Si supera alguno de los límites de quota afectados, no podrá agregar más recursos del mismo tipo en ese proyecto o region.\n\n* [Regions-zones](https://cloud.google.com/compute/docs/regions-zones)\n* [Global/Regional/Zonal Resources](https://cloud.google.com/compute/docs/regions-zones/global-regional-zonal-resources)\n* [Virtualization](https://cloud.google.com/compute/docs/regions-zones/zone-virtualization)\n\n\n\n# 2 - Google Compute Engine\n## Features\n* Creación y manejo del ciclo de vida de las `VM instances`\n* `Load balancing` y `auto scaling` para múltiples `VM instances`\n* Añadir `storage` (\u0026 `network storage`) para las `VM instances`\n* Manejo de `network connectivity` y `configuration` para las `VM instances`\n\n* [General Instances](https://cloud.google.com/compute/docs/instances)\n\n## Family\nExisten diferentes tipos de familas para distintos Workloads.\n* General Purpose (E2, N2 N2D, N1):\n  * Best price-perfomance ratio.\n  * Para la mayoría de Workloads.\n  * Web and applications servers, Small-medium databases, Dev environments\n* Memory Optimized (M2, M1):\n  * Ultra high memory workloads\n  * Large in-memory databases and in-memory analytics\n* Compute Optimized (C2): \n  * Compute intensive Workload\n  * Gaming applications\n\n### Example\nUna vez elige la familia, deberá elegir el tipo de instancia, por ejemplo E2:\n* e2-standard-2:\n  * e2 - Machine Type Family\n  * standar - Type of workload\n  * 2 - Number of CPUs\n  * _En el caso de las standard la RAM=VCPUs*4 = 8Gb de Memoria RAM_\n* e2-highmem-2:\n  * e2 - Machine Type Family\n  * highmem - Type of workload\n  * 2 - Number of CPUs\n  * _En el caso de las highmem la RAM=VCPUs*8 = 16Gb de Memoria RAM_\n* e2-highcpu-2:\n  * e2 - Machine Type Family\n  * highcpu - Type of workload\n  * 2 - Number of CPUs\n  * _En el caso de las highcpu la RAM=VCPUs = 2Gb de Memoria RAM_\n\nA la par que se elige una máquina superior, las capabilities de Memory, Disk y Netwoking van incrementando.\n* [Family](https://cloud.google.com/compute/docs/machine-types)\n\n## Image\nImage type:\n* `Public Images`: Mantenidas por Google o alguna comunidad Open Source or proveedor externo.\n* `Custom Images`: Imágenes custom creadas por usted para sus proyecto específicos.\n\n## Internal and External IP\n* __External__: IPs accesibles desde internet.\n* __Internal__: IPs accesibles internamente desde la red corporativa.\n\u003e No puede haber dos recursos con la misma `External IP`. Sin embargo pude haber dos recursos que tengan la misma `Internal IP`, siempre que sean redes distintas, en caso contrario habría colisión de paquetes.\n* Todas las `VM Instances` tienen asignada al menos una `Internal IP`.\n* Debe tener encuenta que si una VM Instance es parada, perderá su `external IP`, excepto cuando se configura una `Static IP`.\n\n### Static IP\n* Las Static IPs pueden ser intercambiadas entre `VM instances`.\n* Deberá reservarse en la misma región que su `VM instance`.\n* Permanecen adjuntas aunque reinicimos la `VM instance`.\n* Se factura aunque no esté en uso.\n\n* [IP Address](https://cloud.google.com/compute/docs/ip-addresses?hl=en)\n\n## Reduce the number of steps when create and configure VM instance\nExisten múltiples opciones para configurar una `VM instance`:\n* `Startup Script`.\n* `Instance Template`.\n* `Custom Image`.\n\n### Startup Scripts\n* [Startup Scripts](https://cloud.google.com/compute/docs/instances/startup-scripts/linux?hl=es-419)\n\n## Instance Template\nSi queremos lanzar varias VM instances debemos indicar cada vez atributos como el tipo de máquina, o la imagen, sin embargo podemos apoyarnos en `Instance Templates` para evitar repetir los mismos pasos.\n\nEl uso de `Instance Template` permite definir: \n* `Machine type`\n* `Image`\n* `Labels`\n* `Startup Script`\n* ...\n\nUna vez creado un `Instance Template` no puede ser cambiado pero si puede hacer una copia y realizar las modificaciones necesarias.\n\nOtra caracteristica es que puede especificar una `Image family` (debia-9), de esta forma utilizará la última versión de la familia cuando se lance.\n\nNo hay costo asociado a los `Instance Template`, pero si por la creación de `VM instance`.\n\n* [Instance Template](https://cloud.google.com/compute/docs/instance-templates?hl=es_419)\n\n## Custom image\n* Cuando instalamos paquetes en una imagen limpia, puede demorarse mucho el tiempo de inicio.\n* Podemos crear una `Custom Image` con todas las actualizaciones y el software pre-instalado y crear una `Instance Template` a partir de un disco o un snapshot.\n* Una imagen custom puede ser compartida con otros proyectos.\n* Puede marcar imágenes como obsoletas.\n* Una de las ventajas de crear una `Custom Image` es garantizar que todos los estandares de seguridad se cumplan.\n* Es más recomendable el uso de `Custom Imagen` que `Startup Script`.\n* Las Image pueden ser `Regional` o `Multi-regional`.\n\n* [Custom Image](https://cloud.google.com/compute/docs/images/create-custom)\n\n\n\n# 3 - Optimizing Costs and Perfomance\n## Sustained use discounts\n* `Automatic discounts` para `VM instances`. Si está utilizando familias N1 o N2 con más de un uso del 25% del mes puedes obtener un 20% to 50% de descuento en cada minuto incremental.\n* El descuento aumenta con el uso.\n* No necesita realizar ninguna acción para habilitarlo.\n* Se aplican automáticamente cuando se lanzan instancias en `Google Kubernetes Engine` o `Google Compute Engine`.\n* __NO__ se aplica a todas las `machine types`, por ejemplo E2 y A2.\n* Si está utilizando `APP Enginx flexible` o `Dataflow` para crear las VMs __NO__ se aplicarán los descuentos.\n\n* [Sustains Discounts](https://cloud.google.com/compute/docs/sustained-use-discounts)\n\n## Committed use discounts\n* Utilizados para cargas de trabajo predecibles.\n* Puede decir que necesitará una máquina __1 año__ o __3 años__.\n* Dependiendo el tipo de máquina y la GPUs que necesite puede obtener hasta un 70% de descuento.\n* Aplicable por GCE y GKE\n* No aplicable para `App Engine Flexible` y `Dataflow`.\n* [Comitted Discounts](https://cloud.google.com/compute/docs/instances/signing-up-committed-use-discounts?hl=es_419#:~:text=When%20you%20purchase%20a%20committed,like%20machine%20types%20or%20GPUs.)\n\n## Discounts for Preemptible VM instances\n* GCP puede acabar con la instancia en cualquier momento dentro del periodo de 24h (Recibirá una advertencía de 30s).\n* VM más baratas y de corta duración.\n* El tiempo máximo que puede ejecutar estas instancias es de 24h\n* Utilízalas cuando tu app sea __fault tolerant__\n* __Cost sensitive__\n* Your workload is __NOT inmmediate__\n* Es posible que no siempre estén disponibles.\n* __NO__ tienen SLA y no pueden ser migradas a regular VM.\n* __NO__ pueden ser reiniciadas automáticamente.\n* __NO__ es aplicable al [Free Tier Credits](https://cloud.google.com/free/docs/free-cloud-features?hl=es).\n\n* [Preemptible VM](https://cloud.google.com/compute/docs/instances/preemptible)\n\n## Google Compute Engine - Billing\n* Se le __factura por segundo__ a partir del primer minuto.\n* Si para una VM no se le cobrará por el recurso, pero si por el `Storage`.\n* Buenas práticas es creaer siempre [Budgets alerts](https://cloud.google.com/billing/docs/how-to/budgets).\n\n## Compute Engine: Live Migration \u0026 Availability Policy\nCuando GCP necesita realizar alguna actualizción de hardware o software donde corre su VM, tienen una función llamada `Live Migration`, que permite la migración a otro `Host` en la misma zona.\n\n* __NO__ cambia ningún atributo o propiedad de la VM.\n* Soportado por VM que hacen uso de local SSDs.\n* __NO__ es compatible con las VM que hacen uso de GPU y preemtible instances.\n\nSe configura en `Availability Policy`:\n* `On host maintenance`:\n  * __Migrate__: Migrate VM to other hardware.\n  * __Terminate__: Stop the VM.\n* `Automatic restart`.\n\n* [Availability Policies](https://cloud.google.com/compute/docs/instances/setting-instance-scheduling-options?hl=es_419)\n\n## Custom Machine Types\n* Puede crear `Custom Machine Type` cuando las opciones proporcionados por Google no se ajustan a las necesidades.\n* Puede ajustar CPUs, Memory and GPUs.\n  * Solo disponible para algunos tipos de máquinas como E2, N2 o N1.\n  * Soporta múltiples Sistemas Operativos.\n  * Se facturará por CPU y Memory provisionada.\n\n* [Custom Machine Type](https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type)\n\n## GPUs\nLas [GPUs](https://cloud.google.com/compute/docs/gpus) son unidades de procesamiento gráfico.\nSon utilizadas para cargas de trabajo AI/ML.\n* Alto rendimiento para intensive workloads.\n* Coste elevado.\n* Utiliza imagenes con `GPU Libraries` instaladas, en caso constrario no se hará uso de ellas.\n* __NO__ es compatible con todos los tipos de máquinas, por ejemplo son soportadas en máquinas con `shared-core` or `memory-optimized`.\n* `On host maintenance`, solo puede seleccionar `Terminate VM instance`.\n* Use `Automatic restart On`.\n\n## Virtual Machine - Remember\n* Associate with a project.\n* La disponibilidad de tipos de máquinas puede variar entre regiones.\n* Solo puede cambiar el tipo de instance o ajustar CPU y Memory una vez detenida.\n* Puede filtrar sus máquinas virtuales por propiedades o labels.\n* Son `Zonals`, se ejecutan en una específica zona de una región.\n* Las imágenes son `Globals`.\n* Las `Instances Templates` son `Globals`.\n* `Automatic Basic Monitoring` está habilitada.\n  * Default metrics: CPU utilization, Network bytes o Disc throughput.\n  * Para la Memory y Disk Space, `Cloud Monitoring Agent` es necesario.\n\n## Virtual Machine - Best Practices\n* Elija la `Zone` and `Region` en base a:\n  * Cost, Regulations, Availability needs, Latency and Specific Hardwared needs.\n  * Distribuya instancias en múltiplews zonas y regiones para el HA.\n* Elija el tipo de máquinas que necesit:\n  * Por ejemplo, si tiene cargas de trabajos intensas de computación utilice máquinas con CPU optimizada.\n  * Utilice instancias con GPU cuando lo necesite.\n* Haga reservas de `commited use discounts` para workloads constante.\n* Use `preemptible instances` para aplicaciones tolerantes a fallos.\n* Utiliza labels, por ejemplo para identificar el entorno o el centro de coste.\n\n## Scenarios\n| Scenario  | Solution  |\n|---|---|\n| Prerequisitos para crear una VM  | Project, Billing Account, Compute Engines APIs enabled  |\n| Hardwared dedicado  | [Sole-tenants nodes](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes?hl=es-419)  |\n| Parcheo de miles de máquinas  | [VM Manager](https://cloud.google.com/compute/docs/vm-manager?hl=es-419) |\n| Logging to your VM  | Shh into it  |\n| you do not want to expones a VM to internet | Do not assing an external IP |\n| You want allow _HTTP trafffic to your VM | configure [Firewall Rules](https://cloud.google.com/vpc/docs/firewalls) |\n\n\n\n# 4 - Gcloud\n* __Command line interface__ para interactuar `Google Cloud Resources`.\n* La mayoría de servicios pueden ser administrados usando `Gcloud`:\n  * GCE\n  * GKE\n  * Databases\n  * etc\n\n* Puedes crear/eliminar/actualizar/leer recursos existentes y también realizar implementaciones.\n* Existen otras herramientas CLI, específicas de algunos servicios:\n* Cloud `gsutil`\n* Cloud Big Query - `bq`\n* Cloud Bigtable - `cbt`\n* Kubernetes - `kubectl`\n\n## Gcloud example commands\n```sh\n# `gcloud config list project`\n[core]\nproject = centering-aegis-348716\n\nYour active configuration is: [default]\n\n# `gcloud config configurations list`\nNAME     IS_ACTIVE  ACCOUNT                        PROJECT                 COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION\ndefault  True       adrian.cloud.test.2@gmail.com  centering-aegis-348716  europe-west4-a        europe-west4\n\n# `gcloud config configurations activate default`\nActivated [default].\n\n# `gcloud config list`\n[compute]\nregion = europe-west4\nzone = europe-west4-a\n[core]\naccount = adrian.cloud.test.2@gmail.com\ndisable_usage_reporting = False\nproject = centering-aegis-348716\n\nYour active configuration is: [default]\n\n# `gcloud config configurations describe default`\nis_active: true\nname: default\nproperties:\n  compute:\n    region: europe-west4\n    zone: europe-west4-a\n  core:\n    account: adrian.cloud.test.2@gmail.com\n    project: centering-aegis-348716\n\n# `gcloud compute instances list`\nListed 0 items.\n\n# `gcloud compute instances create my-first-instance-from-gcloud`\nCreated [https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/europe-west4-a/instances/my-first-instance-from-gcloud].\nNAME                           ZONE            MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS\nmy-first-instance-from-gcloud  europe-west4-a  n1-standard-1               10.164.0.2   34.147.92.235  RUNNING\n\n# `gcloud compute instances describe my-first-instance-from-gcloud`\ncanIpForward: false\ncpuPlatform: Intel Skylake\ncreationTimestamp: '2022-05-03T11:37:18.872-07:00'\ndeletionProtection: false\ndisks:\n- autoDelete: true\n  boot: true\n  deviceName: persistent-disk-0\n  diskSizeGb: '10'\n  guestOsFeatures:\n  - type: UEFI_COMPATIBLE\n  - type: VIRTIO_SCSI_MULTIQUEUE\n  - type: GVNIC\n  index: 0\n  interface: SCSI\n  kind: compute#attachedDisk\n  licenses:\n  - https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\n  mode: READ_WRITE\n  source: https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/europe-west4-a/disks/my-first-instance-from-gcloud\n  type: PERSISTENT\nfingerprint: ni9zVBsQDBI=\nid: '5128937407023728818'\nkind: compute#instance\nlabelFingerprint: 42WmSpB8rSM=\nlastStartTimestamp: '2022-05-03T11:37:24.595-07:00'\nmachineType: https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/europe-west4-a/machineTypes/n1-standard-1\nmetadata:\n  fingerprint: SSsPC5hcgKU=\n  kind: compute#metadata\nname: my-first-instance-from-gcloud\nnetworkInterfaces:\n- accessConfigs:\n  - kind: compute#accessConfig\n    name: external-nat\n    natIP: 34.147.92.235\n    networkTier: PREMIUM\n    type: ONE_TO_ONE_NAT\n  fingerprint: 4exhl26iz-o=\n  kind: compute#networkInterface\n  name: nic0\n  network: https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/global/networks/default\n  networkIP: 10.164.0.2\n  stackType: IPV4_ONLY\n  subnetwork: https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/regions/europe-west4/subnetworks/default\nscheduling:\n  automaticRestart: true\n  onHostMaintenance: MIGRATE\n  preemptible: false\n  provisioningModel: STANDARD\nselfLink: https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/europe-west4-a/instances/my-first-instance-from-gcloud\nserviceAccounts:\n- email: 431680528914-compute@developer.gserviceaccount.com\n  scopes:\n  - https://www.googleapis.com/auth/devstorage.read_only\n  - https://www.googleapis.com/auth/logging.write\n  - https://www.googleapis.com/auth/monitoring.write\n  - https://www.googleapis.com/auth/pubsub\n  - https://www.googleapis.com/auth/service.management.readonly\n  - https://www.googleapis.com/auth/servicecontrol\n  - https://www.googleapis.com/auth/trace.append\nshieldedInstanceConfig:\n  enableIntegrityMonitoring: true\n  enableSecureBoot: false\n  enableVtpm: true\nshieldedInstanceIntegrityPolicy:\n  updateAutoLearnPolicy: true\nstartRestricted: false\nstatus: RUNNING\ntags:\n  fingerprint: 42WmSpB8rSM=\nzone: https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/europe-west4-a\n\n# `gcloud compute instances delete my-first-instance-from-gcloud`\nThe following instances will be deleted. Any attached disks configured to be auto-deleted will be deleted unless they are attached to any other instances or the `--keep-disks` flag is \ngiven and specifies them for keeping. Deleting a disk is irreversible and any data on the disk will be lost.\n - [my-first-instance-from-gcloud] in [europe-west4-a]\n\nDo you want to continue (Y/n)?  Y\n\nDeleted [https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/europe-west4-a/instances/my-first-instance-from-gcloud].\n\n# `gcloud compute zones list`\nNAME                       REGION                   STATUS  NEXT_MAINTENANCE  TURNDOWN_DATE\nus-east1-b                 us-east1                 UP\nus-east1-c                 us-east1                 UP\nus-east1-d                 us-east1                 UP\nus-east4-c                 us-east4                 UP\nus-east4-b                 us-east4                 UP\nus-east4-a                 us-east4                 UP\nus-central1-c              us-central1              UP\nus-central1-a              us-central1              UP\nus-central1-f              us-central1              UP\nus-central1-b              us-central1              UP\nus-west1-b                 us-west1                 UP\nus-west1-c                 us-west1                 UP\nus-west1-a                 us-west1                 UP\neurope-west4-a             europe-west4             UP\neurope-west4-b             europe-west4             UP\neurope-west4-c             europe-west4             UP\neurope-west1-b             europe-west1             UP\n...................................\n\n# `gcloud compute regions list`\nNAME                     CPUS  DISKS_GB  ADDRESSES  RESERVED_ADDRESSES  STATUS  TURNDOWN_DATE\nasia-east1               0/8   0/2048    0/4        0/8                 UP\nasia-east2               0/8   0/2048    0/4        0/8                 UP\nasia-northeast1          0/8   0/2048    0/4        0/8                 UP\nasia-northeast2          0/8   0/2048    0/4        0/8                 UP\nasia-northeast3          0/8   0/2048    0/4        0/8                 UP\nasia-south1              0/8   0/2048    0/4        0/8                 UP\nasia-south2              0/8   0/2048    0/4        0/8                 UP\n....................\n\n# `gcloud compute machine-types list`\n \n# `gcloud compute machine-types list --filter zone:asia-southeast2-b`\nNAME            ZONE               CPUS  MEMORY_GB  DEPRECATED\ne2-highcpu-16   asia-southeast2-b  16    16.00\ne2-highcpu-2    asia-southeast2-b  2     2.00\ne2-highcpu-32   asia-southeast2-b  32    32.00\ne2-highcpu-4    asia-southeast2-b  4     4.00\ne2-highcpu-8    asia-southeast2-b  8     8.00\ne2-highmem-16   asia-southeast2-b  16    128.00\ne2-highmem-2    asia-southeast2-b  2     16.00\ne2-highmem-4    asia-southeast2-b  4     32.00\ne2-highmem-8    asia-southeast2-b  8     64.00\ne2-medium       asia-southeast2-b  2     4.00\ne2-micro        asia-southeast2-b  2     1.00\ne2-small        asia-southeast2-b  2     2.00\ne2-standard-16  asia-southeast2-b  16    64.00\ne2-standard-2   asia-southeast2-b  2     8.00\ne2-standard-32  asia-southeast2-b  32    128.00\ne2-standard-4   asia-southeast2-b  4     16.00\ne2-standard-8   asia-southeast2-b  8     32.00\n..............\n\n# `gcloud compute machine-types list --filter \"zone:(asia-southeast2-b asia-southeast2-c)\"`\n# `gcloud compute zones list --filter=region:us-west2`\nNAME        REGION    STATUS  NEXT_MAINTENANCE  TURNDOWN_DATE\nus-west2-a  us-west2  UP\nus-west2-b  us-west2  UP\nus-west2-c  us-west2  UP\n\n# `gcloud compute zones list --sort-by=region`\n# `gcloud compute zones list --sort-by=~region`\n# `gcloud compute zones list --uri`\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-east1-b\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-east1-c\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-east1-d\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-east4-c\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-east4-b\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-east4-a\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-central1-c\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-central1-a\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-central1-f\nhttps://www.googleapis.com/compute/v1/projects/centering-aegis-348716/zones/us-central1-b\n...\n\n# `gcloud compute regions describe us-west4`\ncreationTimestamp: '1969-12-31T16:00:00.000-08:00'\ndescription: us-west4\nid: '1430'\nkind: compute#region\nname: us-west4\nquotas:\n- limit: 8.0\n  metric: CPUS\n  usage: 0.0\n- limit: 2048.0\n  metric: DISKS_TOTAL_GB\n  usage: 0.0\n- limit: 8.0\n  metric: STATIC_ADDRESSES\n  usage: 0.0\n- limit: 4.0\n...\n\n# `gcloud compute instance-templates list`\nListed 0 items.\n\n# `gcloud compute instance-templates create instance-template-from-command-line`\nCreated [https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/global/instanceTemplates/instance-template-from-command-line].\nNAME                                 MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP\ninstance-template-from-command-line  n1-standard-1               2022-05-03T11:44:40.740-07:00\n\n# `gcloud compute instance-templates describe instance-template-from-command-line`\ncreationTimestamp: '2022-05-03T11:44:40.740-07:00'\ndescription: ''\nid: '7160651478575400695'\nkind: compute#instanceTemplate\nname: instance-template-from-command-line\nproperties:\n  canIpForward: false\n  disks:\n  - autoDelete: true\n    boot: true\n    deviceName: persistent-disk-0\n    index: 0\n    initializeParams:\n      sourceImage: https://compute.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-11\n    kind: compute#attachedDisk\n...\n\n# `gcloud compute instance-templates delete instance-template-from-command-line`\nThe following instance templates will be deleted:\n - [instance-template-from-command-line]\n\nDo you want to continue (Y/n)?  Y\n\nDeleted [https://www.googleapis.com/compute/v1/projects/centering-aegis-348716/global/instanceTemplates/instance-template-from-command-line].\n```\n\n## Syntax\n* gcloud GROUP SUBGROUP ACTION ...\n  * GROUP - `config` or `compute` or `container` or `iam` or `functions` ...\n  * SUBGROUP - `instances` or `images` or `machines-types` or `regions` or `zones` ...\n  * ACTION - `Create` or `list` or `start` or `stop` or `describe` ...\n\n### Examples:\n* Google Compute Engine:\n  * `gcloud compute instances create` [NAME]\n    * Options examples:\n      * `--mahine-type` n1-standard-1\n      * `--custom-cpu` 6 `--custom-memory` 3072MB `--custom-vm-type` (n1/n2) (Custom Machine)\n      * `--image`\n      * `--image-family`\n      * `--source-snapshot`\n      * `--source-instance-template`\n      * `--source-machine-image`\n      * `--service-account` or `--no-service-account`\n      * `--zone`\n      * `--tags`\n      * `--preemptible`\n      * `--restart-on-failure`\n      * `--deletion-protection`\n      * `--metadata/metadata-from-file`\n* gcloud compute images/regions/zones-disk-types list\n* gcloud compute instances/disks/snapshots list\n  * `--filter=\"zone:VALUE\"`\n  * `--sort-by`\n  * `--uri`\n    * gcloud compute images list --sort-by NAME --filter \"PROJECT:(windows-cloud ubuntu-os-cloud)\"\n* comandos con iam, roles, policies\n* comandos con service accounts\n* comandos configuración proyecto\n\n\n\n# 5 - Instance Groups\n`Instance Group` es un grupo de VM instances administradas como una sola entidad.\nExisten dos tipos de `Instance Groups`:\n* [Managed (MIG)](https://cloud.google.com/compute/docs/instance-groups):\n  * Idénticas VMs creadas usando una `instance template`, por lo tanto tienen la misma configuración.\n  * Features: \n    * `Autoscaling`\n    * `Autohealing`\n    * `Managed releases` ([Rolling update or Canary](https://www.techtarget.com/searchitoperations/answer/When-to-use-canary-vs-blue-green-vs-rolling-deployment)) \n    * Permiten añadir un `Load Balancer` para el balanceo de carga.\n* [Unmanaged](https://cloud.google.com/compute/docs/instance-groups/creating-groups-of-unmanaged-instances?hl=es_419):\n  * Puede tener VMs con diferentes configuraciones.\n  * __NO__ permiten el uso de `Autoscaling`, `autohealing`.\n  * __NO__ recomendadas a menos que necesite difernetes tipos de VMs.\n* Pueden ser `Zonal` o `Regional`.\n\n* [Instance Group Stateful/Stateless](https://cloud.google.com/compute/docs/instance-groups/stateful-migs?hl=es-419)\n\n## Updating\n* `Rolling update` es una actualización gradual de la VMs de un `IG` a una nueva `instance template`.\n  * Especifica nueva `template`. Opcional `canary test`.\n  * Especifica como debe realizarse la actualización. \n  * [Maximun surge](https://cloud.google.com/compute/docs/instance-groups/rolling-out-updates-to-managed-instance-groups?_ga=2.102081153.-100830343.1651250286#max_surge).\n  * [Maximun Unavailable](https://cloud.google.com/compute/docs/instance-groups/rolling-out-updates-to-managed-instance-groups?_ga=2.102081153.-100830343.1651250286#max_unavailable).\n* `Rolling Restart/replace` es una reinicio o reemplazo gradual de todas las VMs del `IG`.\n  * No hay cambios en el `Instance template` pero le gustaría reiniciarlas o reemplazarlas todas.\n  * Configure `Maximun surge` o `Max unavailable`.\n\n## Instance Group - Scenarios\n| Scenario | Solution |\n|---|---|\n| Quires un MIG managed application que sobreviva a Zonal Failures | Crea un MIG multi zona (o regional MIG) |\n| You want create VMs of different configurations in the same group  |  Create un-managed Instance Group |\n| You want to preserve VM state in an MIG  | Stateful MIG - Preserve VM states (instance name, attached Disk and metadata). Recommended for stateful workloads (database, data processing group) |\n| You want high availability in an MIG even when there are hardware/software updates | Use an instance template with availability policy automatic restart: enabled \u0026 on-host maintenance: migrate. Ensure live migration and automatic restart. |\n| You want unhealthy instances to be automaticall y replaced | Configure health check on the MIG (self healing) |\n| Avoid frequent scale up \u0026 downs | Cool-down period/initial delay\n |\n\n## Some commands\n```bash\ngcloud compute instances create my-test-vm --source-instance-template=my-instance-template-with-custom-image\ngcloud compute instance-groups managed list\ngcloud compute instance-groups managed delete my-managed-instance-group\ngcloud compute instance-groups managed create my-mig --zone us-central1-a --template my-instance-template-with-custom-image --size 1\ngcloud compute instance-groups managed set-autoscaling my-mig --max-num-replicas=2 --zone us-central1-a\ngcloud compute instance-groups managed stop-autoscaling my-mig --zone us-central1-a\ngcloud compute instance-groups managed resize my-mig --size=1 --zone=us-central1-a\ngcloud compute instance-groups managed recreate-instances my-mig --instances=my-mig-85fb --zone us-central1-a\ngcloud compute instance-groups managed delete my-managed-instance-group --region=us-central1\n```\n\n\n\n# 6 - Cloud Load Balancing\n`Cloud Load Balancing` es un servicio que permite distribuir el tráfico entre VMS de una aplicación en una o múltiples regiones.\n  * `Managed Service` y `Fully distributed`.\n  * Features importantes:\n    * `Health check `- Route to healthy instances.\n      * Recover from failures.\n    * `AutoScaling`.\n    * Global load balancing with single anycast IP.\n      * Also supports internal load balancing.\n* Benefits:\n  * `HA`.\n  * `AutoScaling`.\n  * `Resiliency`.\n\n* [Load Balancing Overview](https://cloud.google.com/load-balancing/docs/load-balancing-overview?hl=es)\n* [Types](https://cloud.google.com/load-balancing/docs/choosing-load-balancer?hl=es_419#lb-summary)\n* [Functions](https://cloud.google.com/load-balancing/docs/features?hl=es_419)\n\n## Terminology\n* `Backend` es un grupo de `endpoints` que reciven el tráfico desde __Google Cloud Load Balancer__ por ejemplo, los `IGs`. El recurso de AWS sería `AWS Target Group`. Un mismo `Load Balancer` puede servir múltiples `backends`, por ejemplo `IGs` de microservicios.\n* `Frontend` permite especificar IP address, port and protocols. Estos atributos son facilitados a los clientes para la conexión. El recurso de AWS sería AWS LB Listener.\n  * Si usa SSL, un certificado debe ser asignado al `Cloud Load Balancer`.\n* `Host and path rules` específico del `HTTP(S) Load Balancing`. Define reglas para la redirección del tráfico a los diferentes backends.\n  * Basado en `path` - test.com/a vs test.com/b\n  * Basado en `Host` - test.com vs b.test.com\n  * Basado en `HTTP headers` (Authorization header) and methods (POST, GET, etc)\n\n| Scenario | Termination Solution |\n|---|---|\n| Aplicación expuesta a internet | HTTPS |\n| Load Balancer a VM instance pasando por Google internal network | HTTP está bien pero preferible HTTPS |\n| SSL/TLS Termination/Offloading | Client to loader Balancer: HTTPS/TLS. Load balancer To vm Instance: HTTP/TCP |\n\n* [Backend](https://cloud.google.com/load-balancing/docs/backend-service?hl=es_419)\n* [Forwarding rules](https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts)\n* [Choose LB](https://cloud.google.com/static/load-balancing/images/choose-lb.svg?hl=es-419)\n\n## Features\n| Load Balancer | Type of Traffic | Proxy or pass-through | Destination Ports |\n|---|---|---|---|\n| External HTTP(S) | Global, External, HTTP or HTTPS | Proxy | HTTP on 80 or 8080 / HTTPS on 443 |\n| Internal HTTP(S) | Global, External, HTTP or HTTPS | Proxy | HTTP on 80 or 8080 / HTTPS on 443 |\n| SSL Proxy | Global, External, TCP with SSL offload | Proxy | A big list |\n| TCP Proxy | Global, External, TCP without SSL offload | Proxy | A big list |\n| External Network TCP/UDP | Regional, External, TCP or UDP | Pass-through | any |\n| Internal TCP/UDP | Regional, External, TCP or UDP | Pass-through | any |\n\n## Scenarios\n| Scenario | Solution | \n|---|---|\n| Solo las instancias healthy recivan tráfico | Configure health check |\n| HA para tus VM | Crea múltiple MIG para tus VMs in múltiples regiones y utiliza LB para balancear el tráfico |\n| Enrutar tráfico a múltiples microservicios utilizando el mismo LB  | Crea MIGs y backends para cada microservicio. Crear Host y path rules para redireccionar a cada microservicio. También puedes apuntar un backend a Cloud Storage |\n| Balancear la carga del tráfico HTTPS externo en varias regiones | Utiliza External HTTP(S) Load Balancer  |\n| Quieres terminación SSL para el tráfico no HTTPS | Utilice SSL Proxy Load Balancer |\n\n\n\n# 7 - App Engine\n* La forma más sencilla de implementar y escalar aplicaciones en GCP.\n  * Proporciona gestión de aplicaciones end-to-end.\n* Soporta lenguajes como:\n  * Go, Java, .NET, Node.js, PHP, Python, Ruby, usando `pre-configured runtimes`.\n  * Puede utilizar `custom run-time` y escribir en cualquier lenguaje.\n  * Conectividad con variedad de servicios de Google Cloud storage (Cloud SQL, etc)\n* __NO__ hay cargos por uso, se factura por recursos provisionados.\n* Features:\n  * `Automatic load balancing` \u0026 `Auto Scaling`\n  * `Managed platform updates` \u0026 `Application health monitoring`\n  * `Application versioning`\n  * `Traffic splittin`\n\n## Compute Engine vs App Engine\n* Compute Engine\n  * IAAS\n  * More Flexibility\n  * More Responsability\n    * Choosing image\n    * Installing software\n    * Choosing Hardware\n    * Fine grained Access/Permissions (Certificates/Firewall)\n    * Availability etc\n* APP Engine\n  * PaaS\n  * Serverless\n  * Lesser Responsability\n  * Lower Flexibility\n\n* [App Engine](https://cloud.google.com/appengine/docs?hl=es-419)\n\n## Environments\n* [Standard](https://cloud.google.com/appengine/docs/standard?hl=es_419) - Applications run in language specific sandboxes.\n  * Aislamiento completo del OS/Disk/Other Apps.\n  * `V1`: Java, Python, PHP, Go (Old Versions).\n    * Solo para Python and PHP runtimes:\n      * Acceso restringido a la red.\n      * Solo algunas extensiones y librearías son permitidas.\n    * __NO__ hay restricciones para Java y Go runtimes.\n  * `V2`: Java, Python, PHP, Node.js, Ruby, Go (Newer versions).\n    * Acceso completo a la red y no existen restricciones en las extensiones de los lenguajes.\n* [Flexible](https://cloud.google.com/appengine/docs/flexible?hl=es_419) - Las instancias se ejecutan dentro de contenedores Docker.\n  * Cuando usa este tipo está utilizando VM de `Google Compute Engine`.\n  * Soporta cualquier runtime siempre que pueda crear una imagen Docker.\n  * Obtiene acceso a procesos en segundo plano que se ejecunta en la VM y puede adjuntar local disks.\n\n## Hierarchy\n* `Application`: Solo puede crear una aplicación por proyecto.\n* `Services`: Multiple Microservices or App componentes.\n  * You can have multiple services in a single application.\n  * Each `Service` can have different settings.\n  * Earlier called Modules.\n* `Versions`: Each version associated with code and configuration.\n  * Each `Version` can run in one or more instances.\n  * Multiple versions can co-exist.\n  * Options to rollback and split traffic.\n\n## Standard vs flexible\n| Feature  | Standard  | Flexible  |\n|---|---|---|\n| Pricing Factors  | Instance Hours  | vCPU, Memory \u0026 Persistent Disks  |\n| Scaling  | Manual, Basic, Automatic  | Manual, Automatic  |\n| Scaling to zero  | Yes  | No. Minium one instance  |\n| Instance startup time  | Seconds  | Minutes  |\n| Rapid Scaling  | Yes  | No  |\n| Max. request timeout  | 1 to 10 minutes  | 60 minutes  |\n| Local disk  | Mostly (except forPython, PHP). Can write to /tmp  | Yes. Ephemeral. New Disk on startup.  |\n| SSH for debugging  | No  | Yes  |\n\n* [Comparison](https://cloud.google.com/appengine/docs/the-appengine-environments)\n* [Comparison V2](https://medium.com/10decoders/how-to-choose-app-engine-environment-standard-flexible-9f4c26a723b0)\n\n## Scaling instances\n* `Automatic` - Escalado automático en base a carga.\n  * Recomendado para cargas de trabajo de ejecución continua.\n    * Auto scale based on:\n      * `Target CPU Utilization.`\n      * `Target Throughput Utilization`.\n      * `Max Concurrents Requets`.\n    * Configure `Max Instances` and `Min instances`.\n* `Basic` - Instancias que son creadas cuando reciben tráfico.\n  * Recomendado para Adhoc Workloads\n    * Las instancias se terminan cuando no hay solicitudes.\n      * Trate de mantener sus costos bajos.\n      * Alta latencia por falta de instancias para atender las primeras peticiones.\n    * __NO__ soportado por `App Engine Flexible` Environment\n    * Configure `Max Instances` and `Idle Timeout`.\n* `Manual` - Configure el número de instancias.\n  * Adjust number of instances manually over time.\n\n* [Scaling](https://cloud.google.com/appengine/docs/flexible/java/how-instances-are-managed?hl=es_419)\n\n## Some commands\n\n```sh\ncd default-service\ngcloud app deploy\ngcloud app services list\ngcloud app versions list\ngcloud app instances list\ngcloud app deploy --version=v2\ngcloud app versions list\ngcloud app browse\ngcloud app browse --version 20210215t072907\ngcloud app deploy --version=v3 --no-promote\ngcloud app browse --version v3\ngcloud app services set-traffic split=v3=.5,v2=.5\ngcloud app services set-traffic splits=v3=.5,v2=.5\nwatch curl https://melodic-furnace-304906.uc.r.appspot.com/\ngcloud app services set-traffic --splits=v3=.5,v2=.5 --split-by=random\n \ncd ../my-first-service/\ngcloud app deploy\ngcloud app browse --service=my-first-service\n \ngcloud app services list\ngcloud app regions list\n \ngcloud app browse --service=my-first-service --version=20210215t075851\ngcloud app browse --version=v2\ngcloud app open-console --version=v2\ngcloud app versions list --hide-no-traffic\n```\n\n## Request routing\n* Puedes usar la combinación de los siguientes tres enfoques:\n  * Enrutamiento por URL:\n    * `https://\u003cPROJECT_ID\u003e.\u003cREGION_ID\u003e.r.appspot.com`(Default service called)\n    * `https://\u003cSERVICE\u003e-dot-\u003cPROJECT_ID\u003e.\u003cREGION_ID\u003e.r.appspot.com` (Specific service)\n    * `https://\u003cVERSION\u003e-dot-\u003cPROJECT_ID\u003e.\u003cREGION_ID\u003e.r.appspot.com` (Specific version of service)\n    * Replace `-dot-` with `.` si utiliza un dominio custom.\n  * Enrutamiento a través del fichero dispath:\n    * Configurar `dispatch.yaml` con las rutas.\n    * `gcloud app deploy dispatch.yaml`\n  * Enrutamiento con `Cloud Load Balancing`.\n    * Configure routes on Load Balancing instante\n\n## Deploying new versions without downtime\n* Option 1: I'm very confident - Deploy \u0026 shift all traffic at once:\n  * Deploy and shift all traffic at once from v1 to v2: `gcloud app deploy`\n* Option 2: I want to manage the migration from v1 to v2:\n  * STEP 1: Deploy v2 without shifting traffic (--no-promote)\n    * `gcloud app deploy --no-promote`\n  * STEP 2: Shift traffic to V2:\n    * OPTION 1: (all at once Migration); migrate all at once to v2\n      * `gcloud app services set-traffic s1 --splits V2=1`\n    * OPTION 2: Gradual migration - Gradually shift traffic to v2. Add --migrate option.\n      * Gradual migration __NO__ es soportada por App Engine Flexible environment.\n    * OPTION 3: (Splitting): Control the place of migration\n      * `gcloud app services set-traffic s1 --splits=v2=.5,v1=.5`\n      * Useful to perform A/B testing\n\n## Split traffic between multiple versions?\n* `IP splitting` - Based on requets IP address\n  * La dirección IP pùede cambiar causando problemas.\n  * Si todas las peticiones se envían desde una VPN coorporativa, probablemente salgan con la misma IP y por lo tanto accederá a la misma versión.\n* `Cookie Splitting` - Based on a cookie (`GOOGAPPUID`)\n  * Cookies pueden ser controladas por tu aplicación.\n  * Cookie splitting accurately assing users to versions\n* `Random` - Do it randomly\n\n* Include `--split-by` option in `gcloud app services set-traffic` command\n  * values: `cookie`, `ip` and `random`\n\n## Apps\n* Syntax: `gcloud app browse/create/deploy/describe/open-console`\n  * `gcloud app deploy app.yaml`\n    * `--image-url`: Only for App Engine Flexible environments. Deploy docker image.\n      * `gcloud app deploy --image-url gcr.io/PROJECT-ID/hellow-world:0.0.1`\n      * `--promote` or `--no-promote` (Should new versions receive traffic?)\n      * `--stop-previous-version` or `--no-stop-previous-version` (Should old verions be stopped after new versions recevies all traffic?)\n      * `--version` (assing a version. Otherwise, a version number is generated)\n  * `gcloud app browse --service=\"myService\" --version=\"v1\"`\n  * `gcloud app open-console --service=\"myService\" --version=\"v1\"`\n  * `gcloud app open-console logs`\n  * `gcloud app logs tail`\n  * `gcloud app regions list`\n\n### Instances\n* `gcloud app instances delete/describe/list/scp/ssh`\n* `gcloud app instances delete i1 --service=s1 --version=v1`\n* `gcloud app instances describe --service=s1 --versions=v1`\n* `gcloud app instances list`\n* `gcloud app instances scp --service=s1 --verions=v1 --recurse local_dir i1:remote_dir`\n* `glcoud app instnaces ssh --service=s1 --version=v1 i1`\n\n### Services and versions\n* `glcoud app services browse/delete/describe/list/set-traffic`\n* `gcloud app services list`\n* `gcloud app services browse myservice --version=v1`\n* `gcloud app services delete s1 s2`\n* `gcloud app services describe s1`\n* `glcoud app services set-traffic app1 --splits-v1=0.9,2=0.1`\n\n* `gcloud app versions browse/delete/describe/list/migrate/start/stop`\n* `gcloud app versions list`\n    * `--hide-no-traffic` (Only show versions that are receiving traffic)\n* `gcloud app versions browse/delete/describe v1 --service=s1`\n* `gcloud app versions migrate v2 --service=s1`\n* `gcloud app verions start/stop v1 `\n  * `--service=s1` (Only start v1 of service s1)\n\n## Cronjobs\n```yaml\ncron:\n- description: \"daily summary job\"\n  url: /task/summary\n  schedule: every 24 hours\n```\n* Permite ejecutar trabajos programados en intervalos predefinidos.\n* Casos de uso:\n  * Enviar reportes por email cada día.\n  * Refrescar los datos de la cache cada 30 minutos.\n* Se configura en el fichero `cron.yaml`.\n* Run this command - `gcloud app deploy cron.yaml`\n\n## Others files\n* `dispatch.yaml` - override routing rules\n```yaml\ndispatch:\n  - url: \"*/mobile/*\"\n    service: mobile-frontend\n  - url: \"*/work/*\"\n    service: static-backend\n```\n\n* `queue.yaml` - manage task queues\n```yaml\nqueue:\n- name: fooqueue\n  rate: 1/s\n  retry_parameters:\n    task_retry_limit: 7\n    task_age_limit: 2d\n```\n\n## Remember\n* App Engine es `Regional`.\n  * __NO__ puedes cambiar la región de tu applicación.\n* Buena opción para microservicios simples (múltiples microservicios).\n  * Usa `Standard v2` cuando necesites utilizar algún leguaje soportado.\n  * Usa `Flexible` si necesitas dockerizar aplicaciones.\n* AppEngine puede reducirse a 0 execpto cuando se utiliza `App Engine Flexible`, siempre habrá un contenedor en ejecución.\n  * Utiliza Standar cuando necesites reducir el número de instancias a 0.\n* Combine instancias residentes y dinámicas.\n  * `Resident Instances`: Se ejecutan continuamente.\n  * `Dynamic instances`: Añadidas bajo demanda de carga de trabajo.\n    * Si es muy sensible a los costes utilice siempre `Dynamic instances`.\n\n## Scenarios\n| Scenario  | Solution  |\n|---|---|\n| Crear dos aplicaciones de Google App Engine en el mismo proyecto  | No es posible, solo puede tener una applicación por proyecto. Sin embargo puede tener múltiples servicios y múltiples versiones para cada servicio.  |\n| Quiero crear dos servicios de Goole App engine dentro de la misma aplicación  | Puedes crear múltiples servicio bajo la misma aplicación. Cada servicio puede tener múltiples versiones.  |\n| Quiero mover mi aplicación de Google App Engine a una región diferente  | La aplicación es creada en una región específica. Unav ez creada no puede ser movida a otra región.  |\n| Quieres realizar Canary Deploymentes  | `gcloud app deploy --no-promote` y una vez desplegado `gcloud app services set-traffic s1 --splits v1=0.9,v2=0.1`  |\n\n\n\n# 8 - Cloud Functions\n* Ejecuta tu código en la nube sin servidores ni contenedores.\n* No necesita preocuparse por el escalado o la disponibilidad de su función.\n* `Cloud Functions` automáticamente giran entorno a las respuestas de los eventos que ocurren en la plataforma.\n  * Escalan horizontalmente.\n* Recomendadas para respuestas a eventos:\n  * `Cloud Functions` no es una buena idea para largos procesos.\n\n## Concepts\n* `Event` - Por ejemplo, subió un fichero a `Cloud Storage`.\n* `Trigger` - Respuesta de evento con una llamada a `Cloud Function`.\n  * `Trigger` - a que Function debo invocar con este evento?.\n  * `Functions` las funciones toman los datos del Event y ejecutan acciones.\n* Las Functions pueden activarse desde variedad de lugares:\n  * Cloud Storage\n  * Cloud Pub/Sub\n  * HTTP POST/GET/DELETE/PUT/OPTIONS\n  * Firebase\n  * Cloud Firestore\n  * Stack driver logging\n\n\n\n# 9 - Cloud Run\n* `Cloud Run` permite ejecutar contenedores en producción en cuestión de segundos sin necesidad de llegar a necesitar tecnologías como Kubernetes.\n  * Estandard abierto `Knative`\n  * Fully managed serverless platform para la containerización de aplicaciones..\n    * __NO__ es necesario gestionar infraestructura.\n    * Pago por uso (CPU, Memory, Requests and Networking)\n* Completa integeración end-to-end para la experiencia de los developers:\n  * __NO__ hay limitaciones de lenguajes, binarios y dependencias.\n  * Portable, porque está basado en la arquitectura de contendores.\n  * Integración con otros servicios como `Cloud Code`, `Cloud Build`, `Cloud Monitoring` \u0026 `Cloud Logging`.\n* `Anthos`, ejecuta clusters de Kubernetes donde quieras.\n  * Cloud, Multi Cloud and On-Premise.\n* `Cloud Run for Anthos` - Deploy your worklodas to Anthos clusters running on-premises or on Google Cloud.\n\n## Command line\n| Description  | Command  |\n|---|---|\n| Deploy a new container  | `gcloud run deploy SERVICE_NAME --image IMAGE_URL --revision-suffix v1`  |\n| List available revisions  | gcloud run revisions list  |\n| Adjust traffic assignmets  | `gcloud run services update-traffic myservice --to-revisions=v2=10,v1=90` |\n\n\n\n# 10 - Block and File Storage\n## Block Storage\n* Caso de uso: Disco duro conectado a un ordenador.\n* Generalmente un Block Storage puede ser conectado a una VM.\n* Puedes conectar múltiples Block storages a una misma VM.\n* Use as:\n  * Direct-attached storage (DAS) - Similiar to a hard disk.\n  * Storage Area Network (SAN) - High-speed network connection a pool of storage devices.\n    * Used database.\n\n## File Storage\n* Media workflows need huge shared storage for supporting processes like video editing\n* Enterprise users need a quick way to share files in a secure and organized way\n* These file shares are shared by serveral virtual servers\n\n## Types\n* `Block Storage`:\n  * [Persistent Disks](https://cloud.google.com/compute/docs/disks#pdspecs): Network Block Storage.\n    * [Zonal](https://cloud.google.com/compute/docs/disks#zonal-pds): Datos replicados en una zona.\n    * [Regional](https://cloud.google.com/compute/docs/disks#repds): Datos replicados en múltiples zonas.\n  * [Local SSDs](https://cloud.google.com/compute/docs/disks#localssds): Local Block storage.\n* `File Storage`:\n  * [Filestore](https://cloud.google.com/architecture/filers-on-compute-engine#filestore): High perfomance file storage.\n\n## Local SSDs\n* Físicamente conectados al host donde se encuentra la VM.\n  * Obtiene un alto [IOPS](https://es.wikipedia.org/wiki/IOPS) y baja latencia.\n  * Almacenamiento efímero pensado para datos temporales (Los datos solo persisten mientras la instancia está corriendo).\n    * Habilita `Live Migration` si desea que los datos se mantengan.\n  * Los datos son automáticamente encriptados, pero no puede configurar las `encryption keys`.\n  * `Lifecycle` adjuntado a la VM.\n  * Solo algunas máquinas soportan `Local SSDs`.\n  * Soportan `SCSI` and `NVMe` interfaces.\n* Remember:\n  * Choose `NVMe-enabled` and `multi-queue SCSI` images for best perfomance.\n  * Large `Local SSDs` (more storage), more vCPUs (attached to VM).\n\n* Advantages.\n  * Very Fast I/O.\n    * Alto rendimiento y baja latencia.\n  * Ideal para casos de uso en los que necesites altos IOPS mientras se almacena información temporal.\n    * Examples: Caches, temporary data, scratch files, etc.\n* Disadvantages.\n  * Almacenamiento efímero.\n    * Baja durabilidad, baja disponibilida, baja flexibilidad comparado con los `PDs`.\n  * __NO__ puedes detach y attach a otra VM.\n\n## Persistent Disk\n* Network block storage attached a tu VM.\n* Capacidad para provisionar la cantidad que desea.\n* Flexible:\n  * Incrementa el tamaño que necesites cuando está attached a la VM.\n  * El rendimiento aumenta con el tamaño.\n    * For higher perfomance, resize or add more PDs.\n* Independent lifecycle from VM instance.\n  * Attach/Detach de una VM a otra.\n* Options: `Regional` and `Zonal`.\n  * Zonal PDs replicated in single zone. Regional PDs replicated in 2 zones in same Region.\n  * Los regionales son el doble de costosos que lo zonales.\n* Use case: Correr una BBDD.\n\n## PD vs SSDs\n| Feature  | Persistent Disks  | Local SSDs  |\n|---|---|---|\n| Attachment to VM instance  | As a network drive  | Physically attached  |\n| Lifecycle  | Separate from VM instance  | Tied with VM instance  |\n| I/O Speed  | Lower (network latency)  | 10-100X of PDs  |\n| Snapshots  | Supported  | Not supported  |\n| Use case  | Permanent storage  | Ephemeral storage  |\n\n## PD - Standard vs Balanced vs SSD\n| Feature  | Standard  | Balanced  | SSD |\n|---|---|---|---|\n| Underlying Storage  | Hard Disk Drive  | Solid State Drive  | Solid State Drive  |\n| Referred to as  | pd-standard  | pd-balanced  | pd-ssd  |\n| Performance - Sequential IOPS (Big Data/Batch)  | Good  | Good   | Very Good  |\n| Performance - Random IOPS (transactional APPS)  | Bad  | Good   |  Very Good  |\n| Cost  | Cheapest | In Between  | Expensive  |\n| Use case  | Big Data (cost efficient)  | Balance between cost and performance  | High Performance  |\n\n## PD Snaphots\n* Snapshots puntuales de sus `Persistent Disks`.\n* Puede programar `Snapshots` (configure a schedule):\n  * Puedes configurar que sea eliminados tras X días.\n* Snapshots pueden ser `Multi-regional` y `Regional`.\n* Puedes compartir `Snapshots` entre proyectos.\n* Puedes crear nuevos discos o VM a partir de un `Snapshot`.\n* Snapshots son incrementales:\n  * Cuando elimina un snapshot solo elimina los datos que no son necesarios para otros snapshots.\n* Keep similar data together on a Persistent Disk:\n  * Separate your OS, volatile data and permanent data.\n  * Attach multiple disks if needed.\n  * This helps to better organize your snapshots and images.\n\n### PD Recommendations\n* Evite realizar snaphost más de una vez por hora.\n* Disk volume is available for use but Snapshots reducen el rendimiento.\n  * Programa snapshots en las horas de menor actividad.\n* Crear `Snapshot` desde un disco es más rápido que crearlas desde una `Image`.\n  * Sin embargo creaer discos a partir de una `Image` es más rápido que a partir de `Snapshots`.\n  * Si está creando discos a partir de un Snapshot\n    * Crea una image desde Snapshot y usa la imagen para crear discos.\n* `Snapshots` are incremental:\n  * Pero no pierde datos al eliminar Snasphots.\n  * Al borrar un snapshot, solo eliminas los datos que no son necesarios para otros snapshots.\n  * No dude en eliminar snapshots innecesarios.\n\n## Compares\n| Scenarios  | Machine Image  | PD snapshot  | Custom Image  | Instance template  |\n|---|---|---|---|---|\n| Single disk backup  | yes  | yes  | yes  | no  |\n| Multiple disk backup  | yes  | no  | no  | no  |\n| Differential backup  | yes  | yes  | no  | no  |\n| Instance cloning and replication  | yes  | no  | yes  | yes  |\n| VM instance configuration  | yes  | no  |  no | yes  |\n\n## Command line\n### Disks\n* `gcloud compute disks list/create/delete/resize/snapshot`\n  * `gcloud compute disks create my-disk-1 --zone=us-east1-a`\n    * `--size=SIZE` (1GB or 2TB)\n    * `--type=TYPE` (default pd-standard)\n    * `--image` `--image-family` -`-source-disk` `--source-snapshot`\n    * `--kms-key` `--kms-project`\n  * `gcloud compute disks resize example-disk-1 --size=6TB`\n    * Solo soporta resize incrementando el tamaño.\n  * `gcloud compute disks snapshot test --zone=us-central1-a --snapshot-names=snapshot-test`\n\n### Images\n* `gcloud compute images create/delete/deprecate/describe/export/import/list/update`\n  * Creating images.\n    * `gcloud compute images create my-image`\n      * `--source-disk` `--source-disk-zone`\n      * `--source-snapshot`\n      * `--source-image` `--source-image-project`\n      * `--source-image-family` `--source-image-project`\n  * Deprecate image.\n    * `gcloud compute images deprecate IMAGE --state=DEPRECATED`\n  * exports virtual disk images.\n    * `gcloud compute images export --image=my-image --destination-uri=gs://my-bucket/... --export-format=vmdk --project=my-project`\n\n## Scenarios - Persistent Disks\n| Scenarios  | Solution |\n|---|---|\n| Quiere mejorar el rendimiento de un PD | Aumentar el tamaño del PD o añadir más PDs o incrementerla la vCPU de su VM. |\n| Quire aumentar la durabilidad de sus PD | Optar por discos regionales (costo 2x) |\n| Realizar backup cada hora de sus PD para Disaster Recovery | Schedule hourly snapshots. |\n| Quire eliminar los snaphosts antiguos creados por el Schedule | Puede hacerlo dentro de la programación del Schedule |\n\n## Filestore\n* Almacenamiento de archivos compartidos en la nube.\n  * Soporta NFSv3 protocol\n  * Provisoned capacity\n* Adecuado para cargas de trabajo de alto rendimiento.\n  * up to 320 TB with throughput of 16 GB/s and 480K IOPS.\n* Soporta HDD (general purpose) and SSD.\n* Use cases: file share, media workflows and content management.\n\n## Review\n* `Global`.\n  * Images.\n  * Snapshots.\n  * Instances templates.\n* `Regional`.\n  * Regional managed IG.\n  * REgional PD.\n* `Zonal`.\n  * Zonal managed IG.\n  * Instances.\n  * Persistent Disks.\n\n## Scenarios - Block and File Storage\n| Scenarios  | Solution |\n|---|---|\n| Quiere IOPS muy altas pero su datos se pueden perder sin problema | Local SSDs |\n| Sistema de intercambio de archivos de alto rendimiento que pueda adjuntarse a varias VMs. | Filestore |\n| Backup de la configuración de su VM junto a los PDs adjuntos | Machine Image |\n| Facilitar creación de VM con custom Software y hardening de OS | Custom Image |\n\n\n\n# 11 - Object Storage\n## Object Cloud Storage\n* Servicio de almacenamiento más popular, flexible y económico.\n  * Serverless: Autoscaling\n* Puede almacenar grandes objetos utilizando un enfoque `key-value`.\n  * Access Contol at Object level.\n  * Los ficheros son llamados `Object Storage`.\n* Es posible almacenar todo tipo de archivos.\n\n## Object Cloud Objects and Buckets\n* Los `Objects` son almacenados en `Buckets`.\n  * El nombre de los buckets debe ser `globally unique`.\n  * El nombre de los buckets se utilizará como parte de las URLs de los objetos.\n  * No pueden contener `goog prefix`.\n  * Objetos ilimitados.\n  * Asociado a un proyecto.\n* Cada object es identificado por `unique key`.\n  * `key is unique` en el bucket.\n* El tamaño máximo de un objeto `5 TB`.\n\n## Object Cloud Classes\n* Puede haber diferentes patrones de acceso a objetos.\n* Las `Storage classes` ayudan a optimizar los costes en base al acceso necesario.\n  * Diseñado con una durabilidad de __99.99999999999% (11 9's)__.\n  * Baja latencia.\n\n| Storage Class | Name | Minimun Storage duration | Typical Monthly availabilty | Use case |\n|---|---|---|---|---|\n| Standard | STANDARD | None | \u003e99.99% in multi-region and dual region, 99.99% in regions | Uso frecuente |\n| Nearline storage | NEARLINE | 30 días | 99.95% in multi-region and dual region, 99.9% in regions | Lectura o modificación una vez al mes |\n| Coldline storage | COLDLINE | 90 días | 99.95% in multi-region and dual region, 99.9% in regions | Lectura o modificación una vez cada 3 meses. |\n| Archive storage | ARCHIVE | 365 días | 99.95% in multi-region and dual region, 99.9% in regions | Menos de una vez al año |\n\n\u003e Las Storage Class pueden definirse tanto para buckets como para objetos (nuevos).\n\n## Object Cloud Object Versioning\n* Previene el borrado accidental y proporciona histórico.\n  * Se habilita a nivel de bucket.\n    * Puede ser activado o desactivado en cualquier momento.\n  * `Live version` es la última version del objeto.\n    * Si elimina la Live version se convierte en una versión de objeto no actual.\n  * Las versiones anteriores son identificadas por `object key + generation number`.\n  * Reduce costes eliminado verions anteriores.\n\n## Object Cloud Lifecycle Management\n* Se accede a los objectos con frecuencia cuando se crean.\n  * Generalmente se reduce el tiempo de acceso pasado un tiempo.\n* Utilizando Lifecycle podemos eliminar ficheros o versiones antiguas así como cambiar de clase el objeto.\n* Se identifican los objetos con condiciones basadas en:\n  * Age, CreateBefore, isLive, MatchesStorageClass, etc.\n  * Puede establecer múltiples condiciones.\n* Puede realizar dos acciones:\n  * `SetStorageClass` - para cambiar la clase del objecto.\n  * `Deletion` actions.\n* Permite transiciones:\n  * `Standard` or `multi-regional` or `regional` to `Nearline` or `Coldline` or `Archive`.\n  * `Nearline` to `Coldline` or `Archive`.\n  * `Coldline` to `Archive`.\n\n## Object Cloud Encryption\n* `Cloud Storage` siempre cifra los datos on the `server side`.\n* Se cifra:\n  * `Google-managed encryption key` - Default\n  * `Customer-managed encryption keys` - Creadas usando `Cloud KeyManagement Service (KMS)`.\n* Opcionalmente puede cifrarlo on the `client side`, cifrando el objeto previamente y posteriormente en el lado del servidor en el bucket.\n\n## Object Cloud Scenarios\n| Scenario | Description |\n|---|---|\n| Quiero subir un fichero grande de 100Gb | Utiliza `Parallel composite uploads` (El fichero será partido en trozos y subido) |\n| Necesita almacenar registros de apps de forma permanente y no espera acceder a ellos en mucho tiempo | Archive storage |\n| Almacenar archivos a los que accederá una vez cada 3 meses | Coldline storage |\n| Necesita cambiar el Storage Class de un bucket | Por un lado debe cambiarlo en el bucket, y por otro en los objetos (no se cambiará en objetos existentes), podrá hacerlo de forma más sencilla con la CLI. |\n\n## Object Cloud Commands\n* Cloud Storage (__gsutil__).\n  * `gsutil versioning set on/off gs://BUCKET_NAME`.\n  * `gsutil uniformbucketlevelaccess set on/off gs://BUCKET_NAME`.\n  * `gsutil acl ch` (Set access permission for specific object).\n    * `gsutil acl ch -u AllUsers:R gs://BUCKET_NAME/OBJ:_PATH`.\n    * `gsutil acl ch -u john@examle.com:WRITE gs://BUCKET_NAME/OBJ_PATH`.\n    * `gsutil acl set JSON_FILE gs://BUCKET_NAME`.\n  * `gsutil iam ch MBR_TYPE:MBR_NAME:IAM_ROLE gs://BUCKET_NAME`.\n  * `gsutil signurl -d 10m YOUR_KEY gs://BUCKET_NAME/OBJ_PATH`.\n\n\n\n# 12 - IAM\n## IAM\n* `Authentication`\n* `Authorization`\n* `Identities` pueden ser:\n  * A GCP User\n  * A Group of GCP Users\n  * An App running in GCP\n  * An App runing in your data center\n  * Unauthenticated users\n* Proporciona `very granular control`:\n  * Limitación de un usuario:\n    * recurso específico\n    * desde una IP\n    * Durante la ventana de mantenimiento\n    * ...\n\n## Roles\n* `Roles` are `Permissions`.\n  * Son un conjunto de aciones sobre un conjunto de recursos.\n* 3 tipos de roles\n  * `Basic Roles` (or `Primitive Roles`) - Owner/Editor/Viewer\n    * `Viewer(roles.viewer)` - Read-only actions\n    * `Editor(roles.editor)` - Viewer + Edit actions\n    * `Owner(roles.owner)` - Editor + Manage Roles and Permissions + Billing\n    * __NO__ recomendable su uso en producción.\n  * `Predefined Roles` - Roles detallados, predefinidos y administrados por Google.\n    * Diferentes roles para distintos propósitos.\n    * Ejemplos: `Storage Admin`, `Storage Object Admin`, `Storage Object Viewer`, `Storage Object Creator`, ...\n  * `Custom Roles` - Utilizados cuando los `Predefined Roles` __NO__ son suficientes, y necesitamos crear nuestros propios roles.\n\n### Roles - Example permissions\n* Cloud storage Roles.\n  * `Storage Admin (roles/storage.admin)`.\n    * storage.buckets.*\n    * storage.objects.*\n  * `Storage Object Admin (roles/storage.objectAdmin)`.\n    * storage.objects.*\n  * `Storage Object Creator (roles/storage.objectCreator)`.\n    * storage.objects.create\n  * `Storage Object Viewer (roles/storage.objectViewer)`.\n    * storage.objects.get\n    * storage.objects.list\n* Los 4 roles tienen los permisos\n  * resourcemanager.projects.get\n  * resourcemanager.projects.list\n\n## Members, Role and Policy\n* `Member/Principal/Identity`: Who?\n* `Roles`: Permission. What Actions?\n* `Policy`: Assign Permissions to Members\n  * Map:\n    * Roles (Wath?)\n    * Members (Who?)\n    * Conditions (Which Resources?, When?, From Where?)\n  * Recuerda que los `Permissions` __NO__ se asignan directamente a los members.\n    * Los `Permissions` son representados por un `Role`.\n    * Los `Members` obtienen permissos a través de un `Role`.\n* Un `Role` puede tener múltiples permisos.\n* Un `Role` puede ser asignado a múltiples `Members`.\n\n### Policy\n* `Roles` son asignados a los usuario a través de `IAM Policy documents`.\n* Representados por `policy object`.\n  * Policy object es una lista de `bindings`.\n  * A binding, une un role y una lista de members.\n* El tipo de member se identifica con un `prefix`.\n  * user, serviceaccount, group or domain.\n\n```json\n{\n  \"bindings\": [\n    {\n      \"role\": \"roles/owner\",\n      \"members\": [\n        \"user:jie@example.com\",\n        \"serviceAccount:myAppName@appspot.gserviceacount.com\",\n        \"group:administrators@example.com\",\n        \"domain:google.com\",\n      ]\n    }\n  ]\n}\n```\n\n## Some commands\n```sh\ngcloud compute project-info describe\ngcloud auth list\ngcloud projects get-iam-policy glowing-furnace-304608\ngcloud projects add-iam-policy-binding glowing-furnace-304608 --member=user:in28minutes@gmail.com --role=roles/storage.objectAdmin\ngcloud projects remove-iam-policy-binding glowing-furnace-304608 --member=user:in28minutes@gmail.com --role=roles/storage.objectAdmin\ngcloud iam roles describe roles/storage.objectAdmin\ngcloud iam roles copy --source=roles/storage.objectAdmin --destination=my.custom.role --dest-project=glowing-furnace-304608\n```\n\n## Service Accounts\n* Utilizadas para acceder a servicios sin necesidad de utilizar credenciales personales.\n* Identificadas por una dirección de email. (Ex: `id-compute@developer.gserviceaccount.com`)\n* No tienen password\n  * Usan `public/private RSA key-pairs`.\n  * No puede logarse a través de navegadores o cookies.\n* Tipos de SA\n  * `Default service account` - creada automaticamente cuando algunos servicios son usados.\n    * __NO__ se recomienda su uso porque tienen el role `Editor` por defecto.\n  * `User managed` - Creadas por usuarios.\n    * Recomendables ya que hacen uso de un control más exaustivo de permisos.\n  * `Google-managed service accounts` - Creadas y administrados por Google.\n\n### Service Accounts - Scenarios\n| Scenario | Description |\n|---|---|\n| Una App en una VM quiere comunicarse con Cloud Storage Bucket | Configure VM para usar una SA con los permisos adecuados. |\n| Una App en una VM quiren hacer put de un mensaje a un Topic de Pub/Sub | Configure VM para usar una SA con los permisos adecuados. |\n| Una SA es un recurso o una identity? | Ambos |\n| Una VM con una SA por defecto en el proyecto A necesita acceder a un Cloud Storage Bucket del proyecto B | En el proyecto B, agregar la SA y asignar permisos de Storage Object Viewer al bucket. |\n\n## ACLs\n* Las `ACLs` definen quien tiene acceso a sus Buckets y objectos, así como el nivel de acceso que tienen.\n* Que diferencia existe con IAM\n  * IAM aplica de manera uniforme a todos los objetos dentro de un Bucket.\n  * Las ACLs pueden ser usadas para personalizar el acceso específico a difernetes objetos dentro del mismo Bucket.\n  * Recomendable utilizar `IAM`.\n* Dos tipos de acceso:\n  * `Uniform` - Recomendado y aplicado con IAM.\n  * `Fine-grained` - Utilizado con Iam y ACLs.\n\n\n\n# 13 - Choosing Database\n## Database Categories\n* Existe múltiples tipos de BBDD:\n  * Relational (OLTP and OLAP), Document, Key value, Graph In memory ...\n* Elegir el tipo de base de datos no es tarea facil:\n  * Necesitas un `fixed schema`?\n    * Necesitas flexibilidad para definir y cambiar su schema?(schemaless)\n  * Que nivel de `transactions properties` necesita? (atomicity and consistency)\n  * Que tipo de `latency` quiere conseguir? (seconds, milliseconds or microseconds)\n  * Cuantas `transactions` espera? (cientos, miles o millones... por segundo)\n  * Cuantos datos se almacenarán? (MBs, GBs, TBs or PBs)\n  * ...\n\n## Relational Database\n* Más popular.\n* `Predefined schema` con tablas y relaciones.\n* Capacidades transacionales sólidas.\n* Usadas para\n  * OLTP (Procesamiento de transacciones en línea) - banca o aplicación de negociación de acciones. Las transacciones y la estructura de los datos son muy importantes.\n  * OLAP (Procesamiento de análisis en linea) - muchas consultas estandar en una gran cantidad de datos.\n\n## OLTP Relational Databases\n* La gran mayoría de usuario realizan una gran cantidad de pequeñas transaciones.\n  * Los datos reads, updates and deletes.\n* Casos de uso:\n  * Aplicaciones tradicionales, ERP, CRM, e-commerce, banking applications.\n* BBDD populares\n  * MySQL, Oracle, SQL Server, etc.\n* Google services:\n  * `Cloud SQL`: Supports PostgreSQL, MySQL and SQL Server para bases de datos relacionales `Regional`.__(algunos TBs de datos)__.\n  * `Cloud Spanner`: Escala ilimitada para el almacenamiento de muchos datos ( soporta múltiples PBs) y 99.999% de disponibilidad paraca aplicaciones globales con escalado horizontal.\n\n## OLAP Relational Databases\n* Aplicaciones que permiten a los usuarios analizar PBs de datos.\n  * Example: Reporting applications, Data ware houses, Business intelligence applications, Analytics systems, ...\n  * Ex de app: Desea decidir las primas de seguros analizando los datos de los últimos 100 años.\n  * Los datos pueden estar consolidados por múltiples (transactionals) base de datos.\n* Google services:\n  * `BigQuery`: almacén distribuido a `Petabyte-scale`.\n\n## OLTP vs OLAP\n* OLTP vs OLAP estructura de datos similares (tablas y relaciones).\n* Pero muy difernetes en como se almacenan los datos.\n* OLTP almacenamiento en filas.\n  * Eficaz para procesar pequeñas transaciones.\n* OLAP almacenamiento en columnas.\n  * Alta compresión, puede almacenar PBs eficientemente.\n  * Datos distribuidos.\n  * Ejecuta una sola consulta en varias nodos\n\n## NoSQL\n* `Flexible schema`.\n  * Estructura los datos como necesite tu app.\n  * El schema evoluciona con el tiempo.\n* Escalado horizontal a PBs con millones de transacciones por segundo.\n* Google Services:\n  * `Cloud Firestore` (`Datastore`).\n    * Managed serverless NoSQL document database.\n    * Transacciones ACID, SQL-like queries, indexes.\n    * Designada para transacciones móviles y aplicaciones webs.\n    * Fuerte consistencia\n    * Liberías para clientes Webs y móviles.\n    * Recomendada como pequeñaa y mediana base de datos (pocos TBs).\n  * `Cloud Bigtable`.\n    * Managed, scalable NoSQL wide column database\n    * __NO__ es serverless (necesitas crear VM).\n    * Recomendado para datos \u003e 10 TBs hasta varios PBs.\n    * Recomendado para una gran carga de trabjo analítica y operativa.\n      * __No__ recomendada para cargas de trabajao transaccionales.\n\n## In-Memory\n* Recuperar datos de memoria es mucho más rapido que recuperarlos de disco. \n* Las bases de datos como `Redis` brindan una latencia muy baja al almacenar datos persistentes en memoria.\n* Google services:\n  * `Memory Store` (Redis or Memcached)\n* Caso de uso: Caching, session management, gaming leader boards, geospatial applications, ...\n\n## Summary\n| Database Type | GCP Services | Desciption |\n|---|---|---|\n| Relational OLTP databases | `Cloud SQL`, `Cloud Spanner` | Predefined schme and very stron transactional. `Cloud SQL`: MySQL, PostgreSQL, SQL Server. `Cloud Spanner`: Unlimited sacle and 99.999% de disponibilidad aplicaciones globales |\n| Relational OLAP databases | `BigQuery` | Almacenamiento columnar con predefined schema. BigData workloads |\n| NoSQL Databases | `Cloud firestore (Datastore)`, `Cloud BigTable` | `Cloud Firestore`: serverless transactional document DB, Small to Medium. `Cloud BigTable`: Large databse (10 TB - PBs) Streaming, analytical and operational worklodad. Not Serverless|\n| In Memory databases/caches | `Cloud Memorystore` | Aplicaciones que necesitan respuestas en microsegundos |\n\n## Scenarios\n| Scenario | Solution |\n|---|---|\n| Una startup con un esquema evoluciona (envolving) rápidamente (table structure) | `Cloud Datastore/Firestore`. Si sus datos están pensando en crear muy rápido entonces pondrían pensar en `Cloud Bigtable` |\n| BBDD no relacional con poco almacenamiento \u003c 10 Gb | `Cloud Datastore` |\n| BBDD global transacional con schema predefinido que necesita procesar millones de transacciones por segundo | `Cloud Spanner` |\n| BBDD local transacional con miles de transacciones por segundo | `Cloud SQL` |\n| Datos de cache de una aplicación web | `Cloud Memorystore` |\n| BBDD para el procesamiento analítico de PBs de datos | `BigQuery` |\n| BBDD para almacenar grandes volúmenes de datos de flujo de dispositivos IOT | `BigTable` |\n| BBDD para almacenar grandes flujos de datos time series | `BigTable` |\n\n\n# 14 - Exploring Database\n## CloudSQL\n* Servicio relacional administrado.\n* Soporta MySQL, PostgreSQL y SQL Server.\n* `Regional` Service with HA 99.95%\n* Utiliza SSDs o HDDs (para mejor rendimiento SSDs).\n* Puede utilizar hasta 416Gb de RAM y 30TB de almacenamiento.\n* Casos de uso\n  * Migrar sus BBDD locales MySQL, PostgreSQL y SQL Server a la nube.\n  * Reducir costes de mantenimiento de una BBDD relacional.\n  * Sin embargo, se recomienda utilizar `Cloud Spanner` si:\n    * Grandes volúmenes de datos en TB.\n    * Necesita un escalado infinito.\n    * BBDD Global que distribuya entre varias regiones.\n    * Necesitas HA 99.999%.\n\n## Commands\n```sh\n# Cloud SQL\ngcloud sql connect my-first-cloud-sql-instance --user=root --quiet\ngcloud config set project glowing-furnace-304608\ngcloud sql connect my-first-cloud-sql-instance --user=root --quiet\nuse todos\ncreate table user (id integer, username varchar(30) );\ndescribe user;\ninsert into user values (1, 'Ranga');\nselect * from user;\n\n# Cloud Spanner\nCREATE TABLE Users (\n  UserId   INT64 NOT NULL,\n  UserName  STRING(1024)\n) PRIMARY KEY(UserId);\n\n# Cloud BigTable\nbq show bigquery-public-data:samples.shakespeare\n \ngcloud --version\ncbt listinstances -project=glowing-furnace-304608\necho project = glowing-furnace-304608 \u003e ~/.cbtrc\ncat ~/.cbtrc\ncbt listinstances\n```\n\n## CloudSQL Features\n* Automatic encryption, mantenimientos y actualizaciones.\n* HA y failover\n  * Puede crear un `Standby` con automatic failover.\n  * Pre requisites: Habilitar backups automáticos y logging.\n* Puede crear `Read Replicas` sin HA.\n  * Cross-zone, Cross-region and External (NON Cloud SQL DB).\n  * Pre requisites: Habilitar backups automáticos y logging.\n* Aumenta automáticamente el tamaño sin downtime.\n* `Point-to-time` recovery, habilita logging.\n* Backups (automáticos y bajo demanda).\n* Soporte para migraciones desde otras fuentes\n  * Utiliza `Database Migration Service` (DMS).\n* Puedes exportar datos desde UI y gcloud\n\n## Cloud Spanner\n* Base de datos relacional de misión critica, administrada y globalmente distribuida con muy HA (99.999%).\n  * Sólida consistencia transaccional a escala global.\n  * `Escalado de PBs` con automatic sharding.\n* Escala horizontalmente para lecturas y escrituras.\n  * Configura número de nodos.\n  * En comparación con las réplicas de `Cloud SQL`:\n    * No puede escalar horizontalmente las réplicas de escritura\n* `Regional` and `Multi-Regional`\n* Muy cara (comparado con `Cloud SQL`), pagas por nodo y almacenamiento.\n* Puedes exportar datos desde la consola.\n  * Otra opción es utilizar `Dataflow` para automatizar la exportación.\n  * No gcloud export option.\n\n## Cloud Datastore and Cloud Firestore\n* `Datastore` Base de datos NoSQL Document con alta escalabilidad\n  * Automáticamente escala y particiona los datos a medida que crece.\n  * Recomendado para unos pocos TBs, para volumenes más grandes se recomienda `BigTable`.\n  * Soporta Transactions, Indexes y SQL Queries.\n  * No soporta `Joins` ni `Aggregate` (sum or count) operaciones.\n  * Sus casos de usos necesitasn un `flexible schema with transactions`.\n    * User Profiles and Product Catalogs\n  * Estructura Kind --\u003e Entity\n  * Puedes exportar los datos solo con gcloud.\n* `Firestore` es igual que `Datastore` pero optimizado.\n  * Optimizado para el acceso a múltiples dispositivos.\n  * Proporciona liberarías del lado del cliente.\n  * Offers Datastore and Native modes.\n\n## BigTable\n* Bases de datos `NoSQL wide column y PB scale`, compatible con la API de HBase.\n  * Diseñada para grandes volumenes de datos analíticos y operativos (IOT Streams, Analytics, Time Series Data, etc)\n  * Puede manejar millones de trasacciones read/write por segundo con una baja latencia.\n  * Admite transacciones de una sola row, por eso no es un buen candidato para aplicaciones transaccionales.\n* __NO__ es serverless, necesitas crear una instancia\n  * Puedes escalar horizontalmente con múltiples nodos sin downtime.\n* __NO__ se puede exportar datos.\n* La CLI de bigTable es `cbt`.\n\n## Memorystore\n* Completamente administrado (provisioning, replication, failover and patching)\n  * HA 99.9%\n  * Monitorizable con `Cloud Monitoring`.\n* Soporta `Redis` y `Memcached`.\n  * Usa Memcached para Reference data, databse query caching, session store\n  * Usa redis para baja latencia con persistencia y HA.\n\n## BigQuery\n* Exabyte scale modern `Datawarehousing`\n* BBDD relacional.\n* Ofrece enfoques tradicionales (Storage + Compute) y modernos (Serverlss + Realtime).\n* Siempre que hablamos de Datawarehousing es muy importante la importación y exportación\n  * Puede cargar datos de multitud de fuentes\n  * Export to `Cloud Storage` \u0026 `Data Studio`.\n* Puede configurar algunos datos de la table como Expirables.\n* access database:\n  * Cloud Console\n  * bq\n  * BigQuiery Rest API\n  * HBase API\n* Recuerde que las queries de BigQuery puede ser muy caras.\n* Una práctica recomendable es estimar las consultas antes de realizarlas.\n  * UI or bq (--dry-run)\n  * Use Pricing Calculator for 1MB data.\n\n## Commands\n### Commands - gcloud sql\n* `gcloud sql instances create/clone(/delete/describe/patch`\n  * `gcloud sql instances create INSTANCE`\n  * `gcloud sql isntances patch --backup-start-time`\n* `gcloud sql databases create/delete/describe/list/patch`\n  * `gcloud sql databases create DATABASE --instance=INSTANCE`\n* `gcloud slq connect INSTANCE [--database=DATABASE --user=root]`\n* `glcoud sql backups create/describe/list`\n  * `gcloud sql backups create --async --instance INSTANCE`\n\n### Commands - bq\n* `bq show bigquery-public-data:samples.shakespeare`\n* `bq query 'QUERY-STRING'`\n  * `--dry-run`\n* `bq extract`\n* `bq load`\n\n### Commands - cbt\n* Install `gcloud components install cbt`\n* Verify installation - `cbt listinstances`\n* Create __.cbtrc__ file with the configuration\n  * echo project=projec-id \u003e ~/.cbtrc\n    * echo instance=quickstart-instance \u003e\u003e ~/.cbtrc\n* `cbt create instance`\n* `cbt create cluster`\n* `cbt createtable/deleteinstance/deletecluster/deletetable`\n* `cbt listinstances/listclusters`\n* `cbt ls`\n\n## Summary\n* `BigQuery`, `Datastore`, `Firebase` __NO__ necesitan VM.\n  * Pero `Cloud SQL` y `BigTable` __SI__.\n* Bases de datos relacionales\n  * Small local databases --\u003e `Cloud SQL`\n  * Highly scalable global databases --\u003e `Cloud Spanner`\n  * Datawarehouse - `BigQuery`\n* Bases de datos NoSQL\n  * Transactional database para unos pocos Tbs --\u003e `Cloud Datastore`\n  * Grandes volumenes IOT o streaming analytics data --\u003e `Cloud BigTable`\n\n# 15 - Pub/Sub\n## Pub/Sub - Summary\n* Asincrono, scalable, completamente administrado.\n* Para solucinoes de HA y alta escalabilidad.\n  * Autoescala a billones de mensajes\n  * Bajo Coste, pago por uso.\n* Casos de uso\n  * Cola de mensajes. Cuando se ingestan muchos eventos.\n* Soporta push and pull.\n* `Publisher` - Envia el mensaje a pubsub.googleapis.com\n* `Subscriber` - Recibe el mensaje\n  * `Pull` - Los subscriptores hacen pull del mensaje\n  * `Push` - se envía directamente a los subscriptores.\n\n## Pub/Sub - Commands\n```sh\ngcloud config set project glowing-furnace-304608\ngcloud pubsub topics create topic-from-gcloud\ngcloud pubsub subscriptions create subscription-gcloud-1 --topic=topic-from-gcloud\ngcloud pubsub subscriptions create subscription-gcloud-2 --topic=topic-from-gcloud\ngcloud pubsub subscriptions pull subscription-gcloud-2\ngcloud pubsub subscriptions pull subscription-gcloud-1\ngcloud pubsub topics publish topic-from-gcloud --message=\"My First Message\"\ngcloud pubsub topics publish topic-from-gcloud --message=\"My Second Message\"\ngcloud pubsub topics publish topic-from-gcloud --message=\"My Third Message\"\ngcloud pubsub subscriptions pull subscription-gcloud-1 --auto-ack\ngcloud pubsub subscriptions pull subscription-gcloud-2 --auto-ack\ngcloud pubsub topics list\ngcloud pubsub topics delete topic-from-gcloud\ngcloud pubsub topics list-subscriptions my-first-topic\n```\n\n# 16 - Cloud VPC\n## VPC\n* Por defecto cada proyecto tiene a default VPC (Auto mode).\n* Puedes crear tus propias VPCs:\n  * 1 - Auto mode VPC Network\n    * Las subnets son creadas automáticamente en cada región.\n  * 2 - Custom mode VPC Network\n    * Las subnets __NO__ son creadas automáticamente.\n    * Control completo sobre el rango de direcciones IPs.\n* Opciones cuando creas una subnet\n  * Enable `Private Google Access` - Permite que las VMs se conecte a Google API usando IPs privadas.\n  * Enable `Flowlogs` - Logs sobre la VPC Network.\n\n## Firewall Rules\n* Puede controlar el tráfico de entrada y salida de su Network.\n  * Stateful - Quiere decir que si se permite el tráfico entrante el saliente también se permite.\n  * Cada Firewall Rule tiene una priorida asignada (0-65535), 0 max priority.\n  * Existe una regla por defecto con la prioridad más baja\n    * Allow all egress\n    * Deny all ingress\n    * __NO__ puede ser borrada\n    * Puedes sobreescribir las reglas por defecto con reglas con una prioridad mayor.\n  * Default VPC tiene 4 reglas adicionales con prioridad 65534.\n    * Allow incoming traffic from VM instances in same network (`default-allow-internal`)\n    * Allow incoming TCP traffic on port 22 (`default-allow-ssh`)\n    * Allow incoming TCP traffic on port 3389 (`default allow-rdp`)\n    * Allow incoming ICMP from any source on the network (`default-allow-icmp`)\n\n## Ingress and Egress Rules\n* `Ingress Rule`: Incoming traffic from outside to GCP targets.\n  * `Target`: Destination. Ex: all instances with tag X:X\n  * `Source`: Ex. CIDR or All instances \n* `Egress Rule`: Outgoin traffic to destination from GCP targets.\n  * `Target`: Source. Ex: all instances with tag X:X\n  * `Source`: Ex. CIDR or All instances\n* Con cada regla también se define\n  * `Priority` - Número con mayor o menor prioridad\n  * `Action on match` - Allow or Deny\n  * `Protocol` - TCP, UDP or ICMP\n  * `Port` - Number\n  * `Enforcement status` - Enable or Disable rule\n\n## Shared VPC\n* Permite la comunicación entre recursos que forman parte de proyectos de tu organización.\n  * Crea una organización o shared folder level (Access Needed: Shared VPC Admin).\n  * Permite que la VPC Network sea compartida entre proyectos de la misma organización\n\n## VPC Peering\n* Permite la comunicación entre VPCs en el mismo proyecto, diferentes proyecotos de la misma organización o diferentes proyectos de organizaciones distintas.\n* Para la comunicación se utilizan IPs internas\n  * Eficiente porque toda la comunicación ocurre dentro de Google Network.\n  * Seguro porque no es accesible desde internet.\n  * No hay cargos por transferencia de datos entre servicios.\n\n## Cloud VPN, Cloud Interconnect and Direct Peering\n### Cloud VPN\n* Permite conectar tu Network on-premise con la Network de GCP.\n* Se implemente mediante `IPSec VPN Tunnel`.\n* El tráfico pasa por internet, aunque está cifrado.\n* Existen dos soluciones:\n  * `HA VPN` - Servicio HA 99.99% con 2 direcciones IPs.\n    * Solo admite enrutamiento dinámico.\n  * `Classic VPN` 99.9% con 1 dirección IP.\n    * Soporta rutas estáticas y dinámicas\n\n## Cloud Interconnect\n* Conexión física directa de alta velocidad entre on-premise y VPC Networks on GCP\n  * Alta disponiblidad y alto rendimiento\n  * Existen dos tipos de conexiones\n    * Dedicated Interconnect - 10 Gbps or 100 Gbps\n    * Partner Interconnect - 50 Mbps to 10 Gbps\n* Pasa a través de en una red privada, sin embargo `Cloud VPN` pasa a través de internet.\n  * Comunicación con las IPs privadas.\n  * Reducción de costes en el tráfico de salida.\n* Puede acceder a la API de Google de forma privada desde on-premise.\n* Se recomienda para necesidades de gran ancho de banda, en caso contrario lo recomendable es `Cloud VPN`.\n\n## Direct Peering\n* Se utiliza para conectar la red de cliente a la red de Google.\n* __NO__ es un servicio de GCP.\n* Recomendado utlizar `Cloud Interconnect` y `Cloud VPN`.\n\n\n\n# 17 - Operations\n## Cloud Monitoring\n* Herramienta para monitorizar infraestructura en GCP.\n* Mide aspectos importantes de los servicios (Metrics).\n* Crear visualizaciones (Graphs y Dashboards).\n* Configurar Alerts (when metrics are NOT healthy).\n  * Define Alerting Policies\n    * Condition\n    * Notifications\n    * Documentation\n\n### Cloud Monitoring - Workspace\n* Puede usar `Cloud Monitoring` para monitorizar uno o más proyectos de GCP y una o más cuentas de AWS.\n* Permite visualizar información de múltiples proyectos.\n\n### Cloud Monitoring - VM\n* Default metrics:\n  * CPU utilization\n  * Disk traffic\n  * Network traffic\n  * Uptime information\n* Install Cloud Monitoring agente para obtener más metricas de disk, CPU, network.\n\n## Cloud Logging\n* Real time log management and analysis tool\n* Permite almancer, buscar, analizar y alertar sobre volúmenes de datos masivos.\n* Administrado y escalable.\n* Ingesta datos desde cualquier fuente.\n* Features:\n  * Logs Explorer.\n  * Logs Dashboard.\n  * Logs Metrics.\n  * Logs Router.\n* La mayoría de servicios de GCP envían logs a Cloud Logging.\n  * GKE.\n  * App Engine.\n  * Cloud Run.\n* La ingesta de logs desde GCE VMs, se hace instalando `Logging Agent`.\n\n## Cloud Audit Logs\n* `Access Transparency Logs` - captura las acciones realizadas por el equipo de GCP sobre tus recursos (No soportoado por todos los servicios).\n  * Solo para organizaciones que tienen Gold support.\n* `Cloud Audit Logs` - Quien hizo que, donde y cuando\n  * `Admin Activity logs`\n  * `Data Access Logs`\n  * `System Event Audit Logs`\n  * `Policy Denied Audit Logs`\n\n## Cloud Routing Logs and Exports\n* Puede enrutar logs desde distintas fuentes.\n* Dos tipos de Log buckets\n  * _Required\n  * _Default\n* Idealmente debería almacenar los registros en `Cloud Logging` durante un periodo de tiempo.\n  * Pueden ser exportados a `Cloud Storage Bucket`.\n  * Pueden ser exportados a `BigQuery dataset`.\n  * Pueden ser exportados a `Cloud Pub/Sub`.\n\n## Cloud Trace\n* Permite recoger trazas de los sistemas de GCP:\n  * Soporta GCP services (GCE, CKE, App Engine)\n\n## Cloud Debugger\n* Captura el estado de una aplicación\n  * Inespecciona el estado directamente en el entorno de GCP\n  * Puede tomar snapshots de variables y llamadas\n\n## Cloud Profiler\n* Permite identificar los cuellos de botella en producción\n\n## Error Reporting\n* Monitorización de excepciones en tiempo real\n\n## Operations - Scenarios\n| Scenario | Solution |\n|---|---|\n| Le gustaría almacenar todas las operaciones sobre todos los objetos de un Bucket  | Habilitar el registro de auditorías del bucket |\n| Quiere rastrear una solicitud en varios microservicios | Cloud Trace |\n| Desea identificar excepciones destacadas para un microservicio específico | Error Reporting |\n| Desea depurar un problema en producción ejecutandolo paso a paso | Cloud Debugger |\n| Desea ver los registros para una solicitud específica  | Cloud Logging |\n\n\n\n# 18 - Organizations and IAM\n## Projects, Folders and Organization\n* Existe una jerarquía bien definida\n  * Organization -\u003e Folder -\u003e Project -\u003e Resources\n* Resources, son creados en un proyecto.\n* Folder, puede contener múltiples proyects.\n* Organization, puede tener múltiples Folers.\n\n### Projects, Folders and Organization - Recommendations\n* Crea proyects separados para cada entorno\n* Crea folders para cada departamento\n* Un proyecto por aplicación\n\n## Billing Accounts\n* Billing account es obligatoria antes de crear recursos.\n* Una Billing Account puede estar asociada a uno o más proyectos.\n* Puede tener múltiples billing accounts en una Organización\n* Hay dos tipos:\n  * Self Serve\n  * Invoiced\n\n### Billing Accounts - Budget, Alerts and Exports\n* Una de las recomendaciones importantes es configurar `Cloud Billing Bugdet` para evitar sorpresas.\n  * Configure `Alerts`.\n  * Existe alertas por defecto para cuando supere el 50%, 90% y 100% del presupuesto.\n    * Opcionalmente puede enviar alertas a PubSub.\n    * `Billing admins` and `Billing Account user` son alertados por e-mail.\n* Billing data pueden ser exportados:\n  * `BigQuery`\n  * `Cloud Storage`\n\n## IAM Best Practices\n* `Principle of Least Privilege` - Asigne el mínimo privilegio\n  * Basic Roles (Primitives) __NO__ son recomendados.\n  * Utilice SAs con privilegios mínimos.\n    * Utilice una SA para un único propósito\n* Funciones separadas.\n  * Tener separada el role del que despliega, del que modifica el tráfico.\n* Monitorización constante.\n\n## User Identity Management\n* Federate Cloud Identity or Google Workspace with yuour IDP.\n* Enable Singles Sign On\n\n## IAM members/Identities\n* Google Account - representa a una persona\n* Service Account - representa una aplicación\n* Google Group - Colección\n  * Email único\n  * Ayuda a aplicar políticas de acceso a un grupo\n* Google Workspace domain - G Suite\n* Cloud Identity domain - \n\n### IAM members/Identities - use Cases\n| Scenario | Solution |\n|---|---|\n| Todos los miembros de tu equipo tienen cuentas en G Suite. Está creando un proyecto de produción y le gustaría dar acceso a su equipo de operaciones | Crear un grupo con todos los miembros del equipo, crear una política con los permisos necesarios y realizar la asginación al grupo |\n| Todos los miembros de tu equipo tienen cuentas en G Suite. Está configurando un proyecto nuevo. Desea proporcionar un acceso rápido por única vez a un miembro del equipo | Asignar la función directamente a la dirección de correo , dado que va a ser temporal |\n| Dar acceso a un auditor externo para ver los recursos de su proyecto, pero NO debería poder realizar cambios. | Aplicar role de Viewer, que aunque no esté recomendado, será algo temporal y es el único role que tiene permisos de RO sobre todos los recursos. |\n| Tu aplicación se implementa en un proyecto A en una VM y necesita acceder a un Bucket de un proyecto diferente | Asignar en el proyecto B el role a la SA del proyecto A |\n\n## Policy Service\n* Puede crear políticas a nivel de organización, por ejemplo para evitar que se creen Service Accounts.\n* Para modifiacr una `Organization Policy` necesita el role `Organization Policy Administrator`\n\n## IAM Roles\n### IAM Roles - Organization, Billing and Project Roles\n* `Organization Administrator`\n  * Puede definir la jerarquía de recursos\n  * Puede definir `Access Management Policies`\n  * Administrar otros `roles` y `users`\n* `Billing Account Creator` - crear Billing Accounts\n* `Billing Account Administrator` - Administra Billings accounts, pero __NO__ puede crear Billing Accounts.\n* `Billing Account User` - Puede asociar `Projects` y `Billing Accounts`.\n  * Generalmente se usa con `Project Creator`.\n* `Billing Account Viewer` - Puede ver los detalles de las Billing Accounts.\n\n### IAM Roles - GCE\n* `Compute Engine Admin` - Control completo sobre compute - Instances, Images, Load Balancers, Network, Firewalls, etc\n* `Compute Instance Admin` - Crear, modificar y eliminar VM y discos\n* `Compute Engine Network Admin` - Acceso completo sobre Network (routes, networks, health checks, VPN, Gateways, etc) and RO to firewall rules and SSL Certificates\n* `Compute Engine Security Admin` - Acceso completo a las firewall rules and SSL Certificates\n* `Compute Storage Admin` - Acceso completo a disks, images y snapshots\n* `Compute Engine Viewer` - RO sobre todos los recursos de compute \n* `Compute OS Admin Login` - Log in en las VM como admin user\n* `Compute OS Login` - Log in en las VM como usuario standar\n\n### IAM Roles - Google App Engine\n* `App Engine Creator` - Responsable de crear aplicaciones\n* `App Engine Admin` - acceso completo\n* `App Engine Viewer` - acceso como RO\n* `App Engine Code Viewer` - acceso para ver el código\n* `App Engine Deployer` - versiones, aplicaciones\n* `App Engine Service Admin` - split or migrate versions, start and stop a version\n\n### IAM Roles - GKE\n* `Kubernetes Engine Admin` - Acceso completo para administar los clusters y objetos de Kubernetes.\n* `Kubernetes Engine Cluster Admin` - Administrador del cluster (sin permisos en objetos)\n* `Kubernetes Engine Developer` - Puede administra algunos objetos de Kubernetes\n* `Kubernetes Engine Viewer` - get/list cluster and kubernetes api objets\n\n### IAM Roles - Google Cloud Storage\n* `Storage Admin` - Administrador total\n* `Storage Object Admin` - Administrador de objetos\n* `Storage Object Creator` - Puede crear objetoss\n* `Storage Object Viewer` - get/list\n* Container Registry utiliza los mismos permisos que Cloud Storage.\n\n### IAM Roles - Google Cloud BigQuery\n* `BigQuery Admin` - administrador completo de BigQuery\n* `BigQuery Data Owner` - administrador de datos, sin acceso a los Jobs\n* `BigQuery Data Editor` - puede actualizar datos\n* `BigQuery Data Viewer` - puede visualizar datos\n* `BigQuery Job User` - Puede crear Jobs\n* `BigQuery User` - \n\n### IAM Roles - Logging and Service Accounts\n* `roles/logging.viewer` - \n* `roles/logging.privateLogViewer` - \n* `roles/logging.admin` - \n* `roles/iam.serviceAccountAdmin` - \n* `roles/iam.serviceAccountUser` - \n* `roles/iam.serviceAccountTokenCreator` - \n* `roles/iam.serviceAccountKeyAdmin` - \n\n### IAM Roles - Other importante IAM Roles\n* `roles/iam.securityAdmin` - Obtener y modificar IAM Policy\n* `roles/iam.securityReviewer` - Listar todos los recursos y IAM policies\n* `roles/iam.organizationRoleAdmin` - Administrator todos los custom roles en una organización y proyectos\n* `roles/iam.organizationRoleViewer` - Leer todos los roles de la organización\n* `roles/iam.roleAdmin` - Acceso a los roles de un proyecto concreto\n* `roles/iam.roleViewer` - Lectura sobre todos los roles de un proyecto concreto\n* `roles/browser` - Acceso de lectura sobre una jerarquia.\n\n\n\n# 20 - Other Services\n## Cloud Deployment Manager\n* Automatiza la implementación y modificación de recursos de Google.\n* Configuración definida como YAML\n* Maneja las dependencias\n* Por defecto hace rollback cuando hay un error\n* Su uso es gratuito, solo paga por los recursos que despliega.\n\n```yaml\nresources:\n- name: vm-created-by-deployment-manager\n  type: compute.v1.instance\n  properties:\n    zone: us-central1-a\n    machineType: zones/us-central1-a/machineTypes/n1-standard-1\n    disks:\n    - deviceName: boot\n      type: PERSISTENT\n      boot: true\n      autoDelete: true\n      initializeParams:\n        sourceImage: projects/debian-cloud/global/images/family/debian-11\n    networkInterfaces:\n    - network: global/networks/default\n```\n* Puede utilizar Python o Jinja2 para los `Templates`.\n\n## Cloud Marketplace (Cloud Launcher)\n* Repositorios con imágenes preconfigurados por ejemplo, con wordpress.\n\n## Cloud DNS\n* Global Domain Name System\n* Puede manejar zonas privadas y públicas.\n\n## Cloud Dataflow\n* Se puede usar para importar y exportar de múltiples fuentes.\n* Por ejemplo, datos de Pub/Sub a BigQuery.\n\n## Cloud Dataproc\n* Servicio administrado de Spark y Hadoop.\n\n\n# 21 - Extras\n* [GCE vs GKE vs Cloud Run vs GAE vs Cloud Functions](https://cloud.google.com/blog/topics/developers-practitioners/where-should-i-run-my-stuff-choosing-google-cloud-compute-option)\n* [Database compare](https://cloud.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famartingarcia%2Fgcp-cloud-engineer-associate-training","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famartingarcia%2Fgcp-cloud-engineer-associate-training","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famartingarcia%2Fgcp-cloud-engineer-associate-training/lists"}