Docs 菜单
Docs 主页
/ /
Atlas App Services
/ /

迁移到您自己的3存储桶

在此页面上

  • 迁移到 S 3
  • 创建 S 3存储桶
  • 迁移现有数据
  • 更新应用程序代码
  • 关闭 Atlas App Services 托管
  • 从 Atlas Function 访问 S 3存储桶
  • 与 Atlas Function 集成
  • 编写函数以访问 S 3存储桶

重要

请始终参阅MongoDB Atlas和Amazon Web Services的官方文档以获取最新、准确的信息。 具体步骤可能会有所不同,具体取决于项目的详细信息和所使用的技术。

如果您仅将 MongoDB Atlas 静态托管服务用作静态内容的 Blob 存储,并且未托管客户端应用程序,请按照以下步骤从使用 Atlas 托管迁移到使用您自己的 S 3存储桶。

1

如果您还没有这样做,请在您的Amazon Web Services帐户中设置自己的 S3 存储桶。 根据您的要求配置存储桶设置,包括访问权限和加密选项。

2

将现有数据从MongoDB Atlas托管迁移到 S 3存储桶。 根据数据量和您的具体要求,这可能需要使用MongoDB App Services CLIappservices pull --include-hosting() 从 导出数据,然后使用3 Amazon Web ServicesCLI或Amazon Web Services SDK。

3

修改应用程序代码以与 S 3存储桶而不是 MongoDB Atlas 托管进行交互。 这包括更新处理文件上传或下载的代码(如果您使用 App Services CLI 命令执行此操作)。

4

验证文件已成功部署到 S 3存储桶后,请从 Atlas App Services 应用程序中删除托管文件。 谨此提醒,从 3 月12 2025开始,Atlas App Services 上的托管域将不再运行。

您可以通过Atlas Function访问权限存储在 S 3存储桶中的静态内容。 为此,您需要:

  1. 与 Atlas Function 集成

  2. 写入函数以访问 S 3存储桶

重要

测试和验证

测试您的 Atlas Function,确保它们可以成功访问和操作 S 3存储桶中的对象。 验证函数是否按预期运行并妥善处理错误。

使用@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存储桶交互的 MongoDB Atlas Function。 这些函数可以执行各种操作,例如上传文件、下载文件、列出对象以及从 S 3存储桶中删除对象。

我们将在本指南中介绍一些基本示例。 您可能想通过查看完整的 客户端命令列表 来探索与 S3 存储桶交互的其他方法 为 @aws-sdk/client-s3 。

要对 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 ,方法是从 URL 下载静态资产或将其作为本地文件上传。

要将下载的内容上传到 S 3 ,请使用 HTTP 库或内置 Node.js 模块(如httphttps从 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 ,请使用以下代码片段:

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);
}
});

后退

迁移到渲染