迁移到您自己的3存储桶
在此页面上
重要
请始终参阅MongoDB Atlas和Amazon Web Services的官方文档以获取最新、准确的信息。 具体步骤可能会有所不同,具体取决于项目的详细信息和所使用的技术。
迁移到 S 3
如果您仅将 MongoDB Atlas 静态托管服务用作静态内容的 Blob 存储,并且未托管客户端应用程序,请按照以下步骤从使用 Atlas 托管迁移到使用您自己的 S 3存储桶。
迁移现有数据
将现有数据从MongoDB Atlas托管迁移到 S 3存储桶。 根据数据量和您的具体要求,这可能需要使用MongoDB App Services CLIappservices pull --include-hosting
() 从 导出数据,然后使用3 Amazon Web ServicesCLI或Amazon Web Services SDK。
从 Atlas Function 访问 S 3存储桶
您可以通过Atlas Function访问权限存储在 S 3存储桶中的静态内容。 为此,您需要:
与 Atlas Function 集成
写入函数以访问 S 3存储桶
重要
测试和验证
测试您的 Atlas Function,确保它们可以成功访问和操作 S 3存储桶中的对象。 验证函数是否按预期运行并妥善处理错误。
与 Atlas Function 集成
使用@aws-sdk
外部依赖项上传到 S 3 。 Atlas App Services 会自动转换依赖项,并且还支持大多数默认 Node.js 模块。
要导入和使用外部依赖,首先需要将依赖项添加到应用程序中。 您可以按名称添加包,也可以上传依赖项目录。
重要
Amazon Web Services SDK 支持
Atlas App Services尚不支持 3 版本的Amazon Web Services SDK。 指定 npm 模块时使用2版本的 SDK
编写函数以访问 S 3存储桶
编写与 S 3存储桶交互的 MongoDB Atlas Function。 这些函数可以执行各种操作,例如上传文件、下载文件、列出对象以及从 S 3存储桶中删除对象。
我们将在本指南中介绍一些基本示例。 您可能想通过查看完整的 客户端命令列表 来探索与 S3 存储桶交互的其他方法 为 @aws-sdk/client-s3 。
验证Amazon Web Services请求
要对 Amazon Web Services 请求进行身份验证,请将访问密钥 ID 和秘密访问密钥存储为值。然后,您可以在函数中访问它们并将它们传递给 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); }
获取资产并上传到 S 3
获取静态资产并将其上传到 S 3 ,方法是从 URL 下载静态资产或将其作为本地文件上传。
要将下载的内容上传到 S 3 ,请使用 HTTP 库或内置 Node.js 模块(如http
或https
从 URL 下载静态资产。 然后,您可以将下载的内容上传到 S 3 。
以下是使用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();
将本地资源上传到 S 3
要将本地资产上传到 S 3 ,请使用以下代码片段:
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); } });