Subir archivos estáticos en AWS S3 con Node.js y Grunt.js

S3 (Amazon Simple Storage Service) es un Disco Duro en la nube que forma parte los Amazon Web Services. Suele ser útil para almacenar los ficheros estáticos de nuestras aplicaciones web si queremos repartir la carga entre los servidores.

En una aplicacion Node.js, típicamente, tenemos los ficheros estáticos en un directorio /public o /static y podemos subirlo a una plataforma como Heroku con todo el repositorio. Pero si queremos servirlos desde S3 podemos realizarlo facilmente con el automatizador de tareas Grunt.js. Veamos como hacerlo.

Grunt.js

Primero necesitamos tener una cuenta en Amazon Web Services y activar un bucket de S3. Necesitaremos un Access Key ID y un Secret Access Key para poder identificarnos con el API y acceder a los servicios. En la parte de código necesitamos tener Grunt.js instalado como conté en un anterior post e instalar esta nueva librería de desarrollo en nuestro proyecto.

npm install grunt-aws --save-dev

Con el flag --save-dev salvamos la librería dentro del archivo package.json de nuestro proyecto.

Una vez hecho esto, creamos una nueva tarea en nuestro fichero Gruntfile.js donde automatizamos las tareas, que llamaremos s3 y tendrá esta pinta:

s3: {
    options: {
        accessKeyId: "TU_AWS_ACCESS_KEY_ID",
        secretAccessKey: "TU_AWS_SECRET_ACCESS_KEY",
        bucket: "NOMBRE_DE_TU_BUCKET_S3"
    },
    build: {
        cwd: "public/",
        src: "**"
    }
}

Con esto le decimos a Grunt que tenemos una tarea llamada s3 y que cuando se ejecute, se conecte a nuestro servicio S3, recoja todos los ficheros, sin importar la extensión, dentro de la carpeta /public de nuestra aplicación y los suba a nuestro bucket en S3.

Para que se ejecute esta tarea simplemente tenemos que llamar desde consola con este comando:

grunt s3

O agregar la tarea dentro de otra como puede ser deployment para agilizar nuestro desarrollo y releases.


¿Quieres contactar conmigo personalmente? Puedes hacerlo por email a través de Earn.com. Tiene asociado un coste de $20, qué sólo se te cobrará cuando responda.

Desarrollador web Frontend y apasionado de JavaScript. Aquí te enseño todo lo que aprendo y conozco sobre JavaScript y la programación web en general.

¿Te gusta lo que lees?
Apúntate a mi boletín, newsletter, lista de correo o como quieras llamarlo. Sólamente envío 1 email al mes con lo más relevante. ¿Te apuntas?