Google Cloud Run o cómo ejecutar su sitio web estático en 5 minutos y mucho más

TLDR; Este artículo no es muy profundo en términos técnicos sobre cómo funciona Google Cloud Run. Además, Google Cloud Run puede hacer mucho más que ejecutar un sitio web simple. El artículo solo detalla un caso de uso muy simple y mi primera experiencia con él y espero que ayude a otros que puedan ser curiosos pero no sepan por dónde comenzar (a pesar de que los Quickstarts ya existentes son probablemente todo lo que necesita).

Tuve un problema por un mes. Mis discos duros del servidor dedicado murieron por completo (fsck ni siquiera funcionaba en ellos) y finalmente decidimos deshacernos de él después de 10 años. Lamentablemente, el sitio web de negocios de mi madre estaba funcionando allí. ¡Eso es correcto! Es solo un sitio web estático con muy poco tráfico, pero sigue siendo muy bueno para ella.

No hice nada durante un mes hasta ayer. Por lo general, aprovecho la oportunidad para probar cosas nuevas cuando sucede algo similar, no quería usar ningún servicio en el que cargue los archivos HTML y eso es todo. La primera opción que vino a la mía fue usar el alojamiento de Firebase, pero ya lo hice para otro sitio de una sola página, además de que ya uso Firebase en el trabajo.

Afortunadamente, Google Next '19 ocurrió hace un par de semanas. Ayer, estaba escuchando el Podcast de Google Cloud Platform en mi viaje y el episodio trataba sobre un nuevo producto que se anunció durante el próximo ‘19: Google Cloud Run. Cuando terminé el podcast, lo vi claro: ¡voy a usar Google Cloud Run!

Pero, ¿qué es Google Cloud Run? Está sin servidor hecho de la manera correcta. Disculpe: con Google Cloud Functions puede escribir un controlador de solicitud HTTP Node.js (o Go ...) en un archivo y cargarlo. Después de implementar esa función, obtienes una URL y estás configurado, simplemente puedes señalarla. Google Cloud Run pasa al siguiente nivel. En lugar de cargar los archivos de sus funciones, ahora implementa contenedores. ¿Por qué es esto mejor? Porque ahora puedes poner lo que quieras en tu contenedor. En lugar de esperar a que su lenguaje preferido sea compatible con Cloud Functions (lo que nunca podría suceder), ahora solo crea un contenedor y ejecuta lo que quiera en él. Todo lo que tiene que hacer es abrir el puerto 8080 en el contenedor (más sobre eso más adelante). Y al igual que con Cloud Functions, todo se escala de inmediato y puede conectar sus contenedores a otros productos de Google Cloud. Imagina las posibilidades.

A partir de hoy, estoy bastante seguro de que debe haber un montón de artículos que ya hablan de lo que voy a explicar, pero la experiencia fue tan indolora, hermosa, simple y rápida que pensé que valía la pena compartirla. Entonces, aquí va!

Crear un nuevo proyecto de Google Cloud Platform

En caso de que sea la primera vez que cree un nuevo proyecto GCP (Google Cloud Platform), a continuación se detalla cómo lo hace. Si ya sabe cómo, simplemente cree un nuevo proyecto en la consola y asígnele un nombre, digamos MyWebsite, y pase a la siguiente sección.

Primero, vaya a Google Cloud Console y haga clic en Seleccionar un proyecto en la parte superior. Esto abrirá una ventana modal, haga clic en Nuevo proyecto.

Luego, solo ingrese el nombre del proyecto, dijimos que era MyWebsite y haga clic en Crear. Hay algo muy importante para recordar en este paso: el ID del proyecto es mywebsite-239106, escríbalo ya que lo usaremos más adelante.

Una vez que se crea el proyecto, selecciónelo del mismo menú desplegable Seleccione un proyecto en el que hicimos clic al principio.

Habilitar facturación (y sobre precios)

Desafortunadamente, me acabo de dar cuenta de que tienes que seguir este paso. Ya tenía habilitada mi facturación cuando probé Google Cloud Run por primera vez, así que no me di cuenta de que esto era necesario hasta ahora. Solo voy a asumir que no tienes ningún problema con esto. Al final, ejecutar un sitio web de poco tráfico será "casi" gratuito. Consulte Precios de Google Cloud Run para obtener más detalles.

Habilitar Google Cloud Run

Suponiendo que haya seleccionado su proyecto GCP, solo vaya a Google Cloud Run y ​​haga clic en Comenzar a usar Cloud Run.

Deberías terminar en la consola Google Cloud Run.

Instalar y autorizar Google Cloud SDK

Si ya tiene instalado Google Cloud SDK y sabe lo que está haciendo, probablemente puede omitir este paso (recuerde actualizar Google Cloud SDK, instalar los componentes Beta y seleccionar su proyecto recién creado).

Si está utilizando OS X, es muy probable que tenga instalado Homebrew. Si lo haces, solo escribe:

$ brew cask instalar google-cloud-sdk

Si no tiene Homebrew, le recomendaría que lo instale. Si no desea instalarlo, puede seguir las instrucciones de instalación de Google Cloud SDK, lo mismo si usa GNU / Linux.

Entonces, una vez que se instala Google Cloud SDK, debe autorizarlo con la cuenta de Google que utilizó para crear su proyecto. Escriba lo siguiente:

$ gcloud auth login

A continuación, instale los componentes Beta de Google Cloud SDK:

$ gcloud components install beta

Finalmente, seleccione su proyecto (¿recuerda la ID del proyecto que escribimos antes?):

$ gcloud config set project mywebsite-239016

Instalar Docker

Nuevamente, en OS X si tienes Homebrew solo escribe:

$ brew cask install docker

Si no, simplemente descargue Docker y siga las instrucciones. Es bastante sencillo.

Crea el contenedor

Finalmente, la parte interesante. Lo que vamos a hacer a continuación es implementar una página HTML simple y servirla a través de Google Cloud Run. Primero creemos un nuevo directorio y organicemos un poco las cosas:

sitio web $ mkdir
sitio web de $ cd
$ mkdir html nginx

En el directorio html, cree un archivo index.html con este contenido:


 ¡Hola desde Google Cloud Run! 

Para servir este archivo solo necesitamos un servidor web. Vamos a usar nginx. Dije que Google Cloud Run usa contenedores, lo que significa que simplemente podemos usar un contenedor nginx existente. El único problema con el contenedor nginx predeterminado es que sirve archivos en el puerto 80, sin embargo, Google Cloud Run espera que los contenedores sirvan cosas en el puerto 8080. Por lo tanto, solo proporcionaremos un nuevo archivo de configuración a nginx más adelante.

Cree un nuevo Dockerfile dentro del directorio del sitio web:

$ cat Dockerfile
DE nginx
COPIAR html / usr / share / nginx / html
COPY nginx / default.conf /etc/nginx/conf.d/default.conf

En este Dockerfile solo le estamos diciendo a Docker que cree un nuevo contenedor basado en el contenedor nginx y estamos agregando nuestro directorio html (que contiene nuestro index.html) más un archivo de configuración nginx que crearemos a continuación.

En el directorio nginx, cree un archivo default.conf (observe cómo escuchamos en el puerto 8080):

$ cat nginx / default.conf
servidor {
    escucha 8080;
    nombre_servidor localhost;
    ubicación / {
        root / usr / share / nginx / html;
        index index.html index.htm;
    }
    # redirige las páginas de error del servidor a la página estática /50x.html
    error_page 500 502 503 504 /50x.html;
    ubicación = /50x.html {
        root / usr / share / nginx / html;
    }
}

Después de todo esto, debe tener esta estructura de directorio:

$ árbol
.
├── Dockerfile
├── html
│ └── index.html
└── nginx
    └── default.conf

Tenga en cuenta que en el directorio html o en otro lugar podría haber agregado más archivos: más archivos HTML, archivos CSS, imágenes, etc. Si es un sitio web grande, probablemente sea mejor subir contenido a Google Cloud Storage y mantener el contenedor pequeño.

Construye e implementa el contenedor

Ahora podemos construir el contenedor y empujarlo. Esto se hace con un comando de Google Cloud SDK:

$ gcloud builds submit --tag gcr.io/mywebsite-239106/hello

Hemos especificado nuestro proyecto mywebsite-239106 y un nombre para nuestro nuevo servicio de Google Cloud Run hola.

Finalmente, podemos implementar el nuevo contenedor en Google Cloud Run:

$ gcloud beta run deploy --image gcr.io/mywebsite-239106/hello

Si todo salió bien, debería ver un mensaje como este:

La revisión del servicio [hello] [hello-00001] se ha implementado y está sirviendo el tráfico en https://hello-7ss2wutasq-uc.a.run.app

¡Y parece que la URL generada está en funcionamiento!

También puedes echar un vistazo a la consola Google Cloud Run para obtener más detalles:

Después de esto, puede realizar cambios en su sitio web y seguir construyendo e implementando el nuevo contenedor. Google Cloud Run enumerará todas las revisiones que haya implementado.

Asignar un dominio

Lo siguiente que puede hacer es asignar un dominio al nuevo servicio Google Cloud Run. No voy a pasar por esto aquí porque requiere que actualices los registros DNS de tu dominio y eso realmente depende del servicio que estés utilizando, pero debo decir que el proceso es muy sencillo. Una vez que se realiza la implementación, solo necesita hacer clic en Administrar dominios personalizados (ver imagen de arriba).

Oh! Y la mejor parte de esto es que los certificados ya están administrados por usted. Me sorprendió gratamente que sin hacer nada, un certificado Let’s Encrypt ya estaba configurado para mi dominio y HTTP y HTTPS funcionaban a la perfección.

¡Y eso fue todo!

Por cierto, mencioné algo sobre Firebase y el trabajo. Usamos Firebase y otras cosas de Google Cloud Platform en el trabajo. Solo quería compartir un nuevo proyecto en el que hemos estado trabajando durante algunos meses. Es un nuevo concepto bastante bueno para compartir pantalla y también tiene un nombre curioso. Compruébalo: https://www.rumpus.co/