/ AWS

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.

Carlos Azaustre

Carlos Azaustre

CTO y Cofundador de Chefly. Formador en tecnologías web: JavaScript, Node, Firebase, React y Vue.

Leer más