CloudFlare Workers: Hello World

CloudFlare Workers: Hello World

Instalación, primeros pasos y deploy de un workers de CloudFlare.

Soy un apasionado de Serverless, por lo tanto ante cualquier herramienta relacionada con la ejecución de código sin servidor siempre tengo motivación de probarla. Luego de un post en Linkedin publicado por Damian Gonzalez, sobre los servicios de CloudFlare me sembró una duda al rededor de Workers.

De los distintos servicios que tengo oportunidad de probar, algunos me dejan mas indiferentes que otros, definitivamente no es el caso de Workers de CloudFlare, desde la documentación, implementación y deploy, fue todo muy natural y directo a continuación mis primeros comentarios de un simple Hello World con ClouFlare Workers.

Paso a paso de creación del proyecto y Deploy

El primer paso es instalar la herramienta de la interfaz de linea de comando que permite realizar el deploy de nuestro código en CloudFlare. La herramienta es wrangler.

Instalar wrangler:

npm install -g wrangler

Login

Antes de realizar el login en la plataforma de CloudFlare , es necesario crear una cuenta, los pasos para crear una cuenta estan en la documentación en el siguiente Link

El login web a travez del comando wrangler login redirecciona al navegador que tengamos por defector , una ves en el navegador realizamos login(user, passw) y luego naturalmente redirige al aceptar términos y condiciones, finalmente en la terminal nos aparece un mensaje confirmando el login.

 ⛅️ wrangler 2.1.15
--------------------
Attempting to login via OAuth...
Opening a link in your default browser: https://dash.cloudflare.com/oauth2/auth?response_type=code&client_id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Successfully logged in.

Aprovecho para mostrar un resumen de los comandos que tiene wrangrler, que son muy completos e interesantes

wrangler

Commands:
  wrangler init [name]         📥 Create a wrangler.toml configuration file
  wrangler dev [script]        👂 Start a local server for developing your worker
  wrangler publish [script]    🆙 Publish your Worker to Cloudflare.
  wrangler delete [script]     🗑  Delete your Worker from Cloudflare.
  wrangler tail [worker]       🦚 Starts a log tailing session for a published Worker.
  wrangler secret              🤫 Generate a secret that can be referenced in a Worker
  wrangler secret:bulk <json>  🗄️  Bulk upload secrets for a Worker
  wrangler kv:namespace        🗂️  Interact with your Workers KV Namespaces
  wrangler kv:key              🔑 Individually manage Workers KV key-value pairs
  wrangler kv:bulk             💪 Interact with multiple Workers KV key-value pairs at once
  wrangler pages               ⚡️ Configure Cloudflare Pages
  wrangler r2                  📦 Interact with an R2 store
  wrangler dispatch-namespace  📦 Interact with a dispatch namespace
  wrangler d1                  🗄  Interact with a D1 database
  wrangler pubsub              📮 Interact and manage Pub/Sub Brokers
  wrangler login               🔓 Login to Cloudflare
  wrangler logout              🚪 Logout from Cloudflare
  wrangler whoami              🕵️  Retrieve your user info and test your auth config
  wrangler types               📝 Generate types from bindings & module rules in config

De este listado, para esta primera etapa quiero destacar wrangler whoami que nos permite verificar si estamos bien conectados

 wrangler whoami
 ⛅️ wrangler 2.1.15
--------------------
Getting User settings...
👋 You are logged in with an OAuth Token, associated with the email 'XXXXXXXXXXXXXXXX'!
┌────────────────────────────────┬──────────────────────────────────┐
│ Account Name                   │ Account ID                       │
├────────────────────────────────┼──────────────────────────────────┤
│ XXXXXXXX@XXXXXXX.com's Account │  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  │

Crear un nuevo proyecto

Para crear un nuevo proyecto utilizamos el commando wrangler init <YOUR_WORKER>, remplazando el < YOUR_WORKER > por el nombre del proyecto, en nuestro caso: olcb_hello_world

Como en la mayoría de los init nos da una serie de configuraciones para completar, en este tutorial seleccione javascript como lenguaje y que se generen los test automáticamente con jest.

A continuación un resumen de la salida de la consola al comando init

 wrangler init olcb_hello_world                                   
 ⛅️ wrangler 2.1.15
--------------------
Using npm as package manager.
✨ Created olcb_hello_world/wrangler.toml
Would you like to use git to manage this Worker? (y/n)
✨ Initialized git repository at olcb_hello_world
No package.json found. Would you like to create one? (y/n)
✨ Created olcb_hello_world/package.json
Would you like to use TypeScript? (y/n)
Would you like to create a Worker at olcb_hello_world/src/index.js?
  None
❯ Fetch handler
  Scheduled handler
✨ Created olcb_hello_world/src/index.js
Would you like us to write your first test? (y/n)
Which test runner would you like to use?
  Vitest
❯ Jest

El código

En este post no nos detendremos en el código, la intención es probar el circuito de deploy y las herramientas que nos presenta workers para trabajar, con lo cual dejaremos el código que nos entrega por defecto el comando de inicialización del proyecto en el paso anterior, que es un simple "Hello World".

export default {
  async fetch(request) {
    return new Response("Hello World!");
  },
};

Deploy

Una ves realizado los pasos anteriores solo nos queda el deploy, para el deploy tenemos el comando wrangler publish que tomara las credenciales que configuramos en el paso de login y nos realizara un deploy en nuestra cuenta de CloudFlare. Puede pedirnos que configuremos nuestro dominio si no lo tenemos pero es un paso muy simple colocar un nombre en la session workers de la consola de CloudFlare.

A continuación el ejemplo de salida de la terminal al comando publish

wrangler publish
 ⛅️ wrangler 2.1.15
--------------------
Total Upload: 0.19 KiB / gzip: 0.16 KiB
Uploaded olcb_hello_world (1.84 sec)
Published olcb_hello_world (6.70 sec)
  https://olcb_hello_world.XXXXXXX.workers.dev

Una ves terminado el proceso en nuestro deploy en la consola de administración de CloudFlare encontraremos el worker publicado

Captura de Pantalla 2022-11-07 a la(s) 21.53.53.png

Conclusiones:

La documentación

En resumen es una documentación de esas que te da gusto leer, de principio a fin la pagina del Hello World funciono en cada paso y cuando no funciono dio los mensajes de error acorde al contexto, de la manera mas clara y simple posible.

Configuración y runtime

El worker es muy configurable en su conjunto e interacción, no tanto así en lenguajes disponibles, hasta el momento solo soporta Javascript y Typescript pero este tiene una explicación. Cuando indagamos en como funcionan los workers en CloudFlare, veremos que en este caso el código se ejecuta sobre un V8 directamente (Link) y esto tiene ventajas sobre las soluciones que están soportadas sobre docker, como AWS lambda o Azure functions, por eso no me parece critico que solo ejecute Javascript y Typescript por que ese es uno de sus puntos fuertes. Una ventaja de ejecutar sobre el v8 directamente: por ejemplo no tenemos cold starts , que es uno de los puntos sobre los que se apuntan las críticas sobre las ejecuciones de código serverless.

Repositorio Github

En este repositorio (Link) esta el proyecto sobre el que se escribieron estas notas, es un scafold como viene por defecto el proyecto que nos permite crear el workers init pero puede servir de referencia.

Precios y restricciones:

Al momento de realizar este pruebas y las primeras ejecuciones no he tenido que cargar ninguna tarjeta de credito. Esto esto positivo para las pruebas pruebas y primeras aproximaciones. Sobre los limites de ejecución los iremos indagando cuando ejecutemos código con mas funcionalidad y seguramente comentaremos en post más adelante.

Referencias: