Importante
Always refer to the official documentation of both MongoDB Atlas and AWS for the most up-to-date and accurate information. The specific steps may vary depending on the details of your project and the technologies used.
Migrate to S3
Si solo utiliza el servicio de alojamiento estático MongoDB Atlas como almacén de blobs para contenido estático y no aloja una aplicación cliente, siga los pasos a continuación para migrar del uso de Atlas Hosting al uso de su propio bucket S3.
Migrar datos existentes
Migre sus datos existentes de MongoDB Atlas Hosting a su3 bucket S. Según la cantidad de datos y sus requisitos específicos, esto podría implicar exportar datos de MongoDB con la CLI de App Services (appservices pull --include-hosting) y luego cargar los datos a S3 usando herramientas como AWS CLI o AWS SDK.
Shut Down Atlas App Services Hosting
Una vez que haya verificado que sus archivos se implementaron correctamente en su bucket S3, elimine los archivos alojados de su aplicación Atlas App Services. Como recordatorio, los dominios alojados en Atlas App Services dejarán de funcionar a partir del 30 de septiembre de 2025.
Acceder al depósito S3 desde las funciones de Atlas
Puedes acceder al contenido estático almacenado en tu bucket S3 desde Funcionalidades de Atlas. Para hacerlo, debes:
Integrar con funciones Atlas
Escribir funciones para acceder a un depósito S3
Importante
Probar y validar
Pruebe sus funciones Atlas para garantizar que puedan acceder y manipular correctamente los objetos del bucket S3. Verifique que las funciones se comporten como se espera y gestionen los errores correctamente.
Integrar con funciones Atlas
Upload to S3 using the @aws-sdk external dependency. Atlas App Services automatically transpiles dependencies and also supports most default Node.js modules.
Para importar y usar una dependencia externa, primero debe agregarla a su aplicación. Puede agregar paquetes por nombre o cargar un directorio de dependencias.
Importante
Compatibilidad con AWS SDK
App Services aún no admite la versión 3 del AWS SDK. Utiliza la versión 2 del SDK al especificar el módulo npm
Escribir funciones para acceder a un contenedor S3
Escriba funciones de MongoDB Atlas que interactúen con su bucket S3. Estas funciones pueden realizar diversas operaciones, como cargar y descargar archivos, listar y eliminar objetos del bucket S3.
En esta guía, cubriremos algunos ejemplos básicos. Quizás quieras explorar otras formas de interactuar con tu bucket S3 consultando la guía completa. lista de comandos del cliente para @aws-sdk/client-s3.
Autenticar solicitudes de AWS
Para autenticar solicitudes de AWS, almacena tu ID de clave de acceso y tu clave de acceso secreta como valores. Luego puedes acceder a ellos dentro de las funciones y pasarlos al SDK.
exports = async function() { // require calls must be in exports function const { S3Client, PutObjectCommand, GetObjectCommand } = require("@aws-sdk/client-s3"); const s3Client = new S3Client({ region: "us-east-1", // replace with your AWS region credentials: { accessKeyId: context.values.get("awsAccessKeyId"), secretAccessKey: context.values.get("awsSecretAccessKey"), }, }); const putCommand = new PutObjectCommand({ Bucket: "bucketName", Key: "keyName", Body: EJSON.stringify({ hello: "world" }), }); const putResult = await s3Client.send(putCommand); const getCommand = new GetObjectCommand({ Bucket: "bucketName", Key: "keyName", }); const getResult = await s3Client.send(getCommand); }
Fetch an Asset and Upload to S3
Obtenga activos estáticos y cárguelos en S3 ya sea descargando activos estáticos desde la URL o cargándolos como archivos locales.
Para subir el contenido descargado a S3, usa una biblioteca HTTP o módulos integrados de Node.js como http o https para descargar el recurso estático desde la URL. Después, puedes subir el contenido descargado a S3.
A continuación se muestra un ejemplo de cómo descargar un activo utilizando la biblioteca axios:
const axios = require('axios'); const stream = require('stream'); const { promisify } = require('util'); // Promisify pipeline function to pipe streams const pipeline = promisify(stream.pipeline); async function uploadAssetToS3() { try { const response = await axios.get('URL_OF_YOUR_STATIC_ASSET', { responseType: 'stream' }); const uploadParams = { Bucket: 'YOUR_BUCKET_NAME', Key: 'YOUR_OBJECT_KEY', Body: response.data }; // Upload the static asset to S3 await s3.upload(uploadParams).promise(); console.log('Static asset uploaded successfully'); } catch (error) { console.error('Error uploading static asset:', error); } } uploadAssetToS3();
Subir activo local a S3
To upload a local asset to S3, use the following code snippet:
const uploadParams = { Bucket: 'YOUR_BUCKET_NAME', // Specify the name/key for the object in the bucket (usually the file name) Key: 'YOUR_OBJECT_KEY', // Provide the local file to be uploaded Body: 'STATIC_ASSET_CONTENT', }; // Upload the static asset to S3 s3.upload(uploadParams, (err, data) => { if (err) { console.error('Error uploading static asset:', err); } else { console.log('Static asset uploaded successfully:', data.Location); } });