Cómo entregar archivos estáticos

A menudo, las aplicaciones necesitan entregar archivos estáticos, como JavaScript, imágenes y CSS, además de controlar solicitudes dinámicas. Las aplicaciones del entorno flexible pueden entregar archivos estáticos desde una opción de Google Cloud Platform (como Cloud Storage), entregarlos de forma directa o usar una red de distribución de contenidos (CDN) de terceros.

Entrega archivos desde Cloud Storage

Cloud Storage puede alojar elementos estáticos para aplicaciones web dinámicas. A continuación, se detallan algunos de los beneficios de entregarlos desde Cloud Storage en lugar de hacerlo desde tu aplicación:

  • Cloud Storage funciona básicamente como una red de distribución de contenidos. No requiere configuraciones especiales gracias a que, de forma predeterminada, cualquier objeto público de lectura se almacena en caché en la red global de Cloud Storage.
  • La carga de tu app se reducirá mediante la descarga de la entrega de elementos estáticos a Cloud Storage. Según la cantidad de elementos estáticos que tengas y la frecuencia de acceso, esto puede reducir una cantidad importante del costo por ejecutar tu app.
  • Los cargos de ancho de banda por acceder a contenido a menudo pueden ser menores con Cloud Storage.

Puedes subir tus elementos a Cloud Storage mediante el SDK de Cloud o la API de Cloud Storage.

La biblioteca cliente de Google Cloud proporciona un cliente Go idiomático a Cloud Storage para almacenar y recuperar datos con Cloud Storage en una aplicación de App Engine.

Ejemplo de entrega desde un depósito de Cloud Storage

En este ejemplo simple se muestra cómo crear un depósito de Cloud Storage y subir los elementos estáticos mediante el SDK de Cloud:

  1. Crea un depósito. Aunque es frecuente, no es obligatorio nombrar el depósito con el ID de tu proyecto. El nombre del depósito debe ser único a nivel global.

    gsutil mb gs://<your-bucket-name>
    
  2. Configura la LCA para otorgar acceso de lectura a los elementos del depósito.

    gsutil defacl set public-read gs://<your-bucket-name>
    
  3. Sube elementos al depósito. El comando rsync suele ser la forma más rápida y simple de subir y actualizar elementos. También puedes utilizar cp.

    gsutil -m rsync -r ./static gs://<your-bucket-name>/static
    

Ya puedes acceder a tus elementos estáticos a través de https://storage.googleapis.com/<your-bucket-name>/static/....

Para obtener más detalles sobre cómo entregar elementos estáticos con Cloud Storage, y sobre cómo hacerlo desde un nombre de dominio personalizado, consulta Aloja un sitio web estático.

Entrega archivos desde otros servicios de GCP

También tienes la opción de usar Cloud CDN o algún otro servicio de almacenamiento de GCP.

Entrega archivos directamente desde tu aplicación

Por lo general, la entrega de archivos desde tu aplicación resulta simple. Sin embargo, existen algunas desventajas, por lo que debes tener en cuenta las siguientes recomendaciones:

  • Para las solicitudes de archivos estáticos, se usan recursos que deberían usarse con solicitudes dinámicas.
  • En función de tu configuración, puede que la entrega de archivos desde tu aplicación ocasione una latencia de respuesta y genere problemas cuando se creen instancias nuevas de control de cargas.

Sugerencia: En entornos de producción, se recomienda entregar el contenido estático por separado de tu aplicación, ya sea en GCP o con una CDN de terceros de forma externa.

Ejemplo de cómo entregar archivos estáticos con tu aplicación

En Go, puedes usar http.FileServer o http.ServeFile estándar para entregar archivos directamente desde tu aplicación.


// Package static demonstrates a static file handler for App Engine flexible environment.
package main

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
)

func main() {
	// Serve static files from "static" directory.
	http.Handle("/static/", http.FileServer(http.Dir(".")))

	http.HandleFunc("/", homepageHandler)
	appengine.Main()
}

const homepage = `<!doctype html>
<html>
<head>
  <title>Static Files</title>
  <link rel="stylesheet" type="text/css" href="/static/main.css">
</head>
<body>
  <p>This is a static file serving example.</p>
</body>
</html>`

func homepageHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, homepage)
}

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno flexible de App Engine para Go