Amazon S3
Es un sistema de almacenamiento de archivos para internet. Traduce Amazon Simple Storage Service. Tiene una interfaz web para administrar cualquier dato. S3 es robusto, pero más que robusto, es lo sencillo que son sus características y cómo usarlas.
En esta entrada les muestro cómo conectar e insertar datos en S3. El código final se encuentra en mi repositorio público: https://github.com/arturoverbel/aws_s3_connect
Buckets
Es un contenedor para objetos almacenados. Cada objeto está almacenado en un bucket . Por ejemplo si un objeto llamado file.json está almacenado en el bucket arturoverbel La dirección del objeto sería:
https://s3.amazonaws.com/arturobucket/file.json
Los buckets se pueden configurar para que estén en una región física específica, además se puede configurar versionamiento sobre sus objetos.
Servicio REST
Amazon S3 es un servicio REST. Se puede enviar solicitudes por medio del API de REST o por las bibliotecas de SDK de amazon. que incluyen la API de REST de aws S3.
Para acceder a las API se necesita poseer una clave de acceso a la cuenta de AWS. Que puede ser generada desde la configuraciones de la cuenta. Pero este método no es recomendable en la documentación de Amazon. Se recomienda utilizar IAM.
AWS Identity and Access Management
AWS IAM puede utlizarse para crear usuarios con sus propias claves de acceso y políticas adminstradas por el usuario que las creó. Incluso puede crear grupos, ajustar políticas de acceso y definir usuarios a este grupo, para agilizar las configuraciones.
Entonces comenzemos creando un usuario. Accedemos al enlace de IAM de la consola web de amazon:
https://console.aws.amazon.com/iam/home
Nos dirigimos a Users y podemos ver una tabla con los usuarios creados. Si es la primera vez te debe aparecer algo parecido a la imagen de abajo

Figura 1. Página principal de Usuarios de AWS IAM
Le damos en Add user y hacemos check en Programmatic access para que este usuario al API, SDK, CLI y otras herramientas de desarrollo para S3.

Figura 2. Agregar usuario y establecer llaves de acceso
Para establecer permisos nos indicará que necesita estar en un grupo. Procedemos a crear un grupo con los permisos full de S3, los seleccionamos como lo indica la Figura 3.

Figura 3. Estableciendo permisos para S3
Ahora establecemos el grupo para el nuevo usuario:

Figura 4. Asignar el grupo para el nuevo usuario
Nos desplegará un review o resumen del nuevo usuario y hacemos clic en “Crear usuario”. Al final nos saldrá las credenciales que corresponden a la llave de acceso yla llave secreta. Puede ser descargado también.
NodeJS
Corremos el comando para iniciar:
express tutorial_sdk_aws cd tutorial_sdk_aws && npm install
Ahora instalamos el SDK de aws por npm:
npm install aws-sdk
Al terminar escribimos configuramos la credencial, para esto escribimos en la terminal:
mkdir ~/.aws sudo nano ~/.aws/credentials
Nos abrirá nuestro editor de texto predeterminado.
[default] aws_access_key_id = xxxxxxxxxxxxx aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Ahora editamos el archivo routes/index.js para escribir un archivo en nuestro bucket:
const express = require('express'); const router = express.Router(); const AWS = require('aws-sdk'); const s3 = new AWS.S3(); const myBucket = 'arturobucket'; var myKey = 'file.json'; /* GET home page. */ router.get('/', function (req, res) { res.render('index', { title: 'Express' }); }); /* Create file. */ router.get('/createFile', function (req, res) { s3.createBucket({ Bucket: myBucket }, function (err, data) { if (err) { console.log(err); res.render('index', { title: 'Error' }); return 0; } let params = { Bucket: myBucket, Key: myKey, ACL: 'public-read', ContentType: 'application/json', Body: '{data: "Hello", process: 300}', }; s3.putObject(params, function (err, data) { if (err) { console.log(err); res.render('index', { title: 'Error' }); return 0; } const textResponse = 'Successfully uploaded data to ' + myBucket + '/' + myKey; console.log(textResponse); res.render('index', { title: textResponse }); }); }); }); module.exports = router;
Del archivo anterior podemos decir:
- Importamos el SDK en la linea 3
- Definimos el nombre de nuestro bucket e instaciamos un SDK
- En la linea 16 llamamos a la función para crear un archivo en S3
- De la linea 23 y 29 establecemos los parámetros, por ejemplo, que esté público para lectura, el cuerpo del archivo y el tipo de contenido.
- En la linea 31 llamamos a la función para insertar el objeto.
Al correr la ruta: http://127.0.0.1:3000/createFile, vemos el resultado en el navegador:

Figura 5. Resultado de servicio, crear objeto en S3
Podemos ver el archivo en nuestro bucket de S3:

Figura 6. Archivo en nuestro bucket
Como establecimos el objeto público, podemos verlo en linea accediedo al url: https://s3.amazonaws.com/arturobucket/file.json.
Pueden encontrar este código en mi repositorio público: https://github.com/arturoverbel/aws_s3_connect
Fuentes
- AWS SDK para NodeJS – https://aws.amazon.com/sdk-for-node-js/
- Documentación de S3 para NodeJS – https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html
Comentarios