主要内容

本页采用了机器翻译。点击此处可查看英文原文。

将数据传输至 Amazon S3 存储桶,并使用 MATLAB 访问数据

要在云端处理数据,您可以将其上传至 Amazon® 简单存储服务(Amazon S3™),随后即可通过 MATLAB® 或集群中的工作节点访问 Amazon S3 中的数据。

您可以从您的 MATLAB 会话中读取或写入 Amazon S3 数据。您的 MATLAB 会话可以位于任何位置,包括本地机器、MATLAB Online™ 或 Cloud Center 中的云资源。

设置对 Amazon S3 存储桶的访问权限

您必须设置 Amazon Web Services (AWS®) 凭据,才能在 Amazon S3 中处理远程数据。您还必须确保这些 AWS 凭据具有所需的读写策略。若您正在 Cloud Center 创建资源,可在创建资源前或资源运行期间添加 AWS 访问权限。

在 Cloud Center 创建云资源前添加 AWS 访问权限

若您在 Cloud Center 创建 MATLAB 或 MATLAB Parallel Server™ 资源,可设置访问权限以读取以下数据:

  • 与您的 Cloud Center 帐户关联的 AWS 帐户中的 S3 存储桶,您正在从中创建云资源。

  • 公共 S3 存储桶。

为此,您需要在创建云资源时将 Additional IAM Policies (Optional) 设置为值 arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,从而添加所需的 AWS 身份、访问和管理 (IAM) 策略。

若需为关联至您 Cloud Center 的 AWS 帐户中的 S3 存储桶设置写入权限(该帐户用于创建云资源),请输入值 arn:aws:iam::aws:policy/AmazonS3FullAccess 代替。

在您的 MATLAB 会话中添加 AWS 访问权限

若您已在 Cloud Center 启动云资源,则必须改用 AWS 会话令牌。这同样适用于您本地机器上的 MATLAB 会话或 MATLAB Online。若需访问位于 AWS 帐户中的 S3 存储桶(该帐户与您在 Cloud Center 创建云资源时使用的帐户不同),也必须采用此方法。

如果您是该 AWS 帐户的 root 用户,请按照以下步骤操作。否则,请联系您的 AWS 帐户管理员。若您已获得长期令牌,请跳至步骤 3。若您收到的是 AWS 会话令牌,请跳至步骤 6。请确保您的令牌具备所需的 S3 读取权限(如 AmazonS3ReadOnlyAccess)或写入权限(如 AmazonS3FullAccess)。

  1. 使用包含 S3 存储桶的 AWS 帐户创建一个身份和访问管理 (IAM) 用户。有关详细信息,请参阅在 AWS 帐户中创建 IAM 用户

  2. 生成访问密钥以获取长期访问令牌,该令牌包含访问密钥 ID(AWS_ACCESS_KEY_ID)和机密访问密钥(AWS_SECRET_ACCESS_KEY)。有关详细信息,请参阅管理 IAM 用户的访问密钥。确保此访问密钥具有所需的 S3 访问策略。此访问密钥可用于生成 AWS 会话令牌。

  3. 在运行 MATLAB 实例的计算机上下载并安装 AWS 命令行接口工具。此工具支持在系统终端中执行特定于 AWS 的命令。

  4. 在系统终端中,输入此命令以设置 AWS CLI。系统将提示您输入长期访问令牌的详细信息。

    aws configure
  5. 要获取 AWS 会话令牌,请在系统终端中输入此命令。

    aws sts get-session-token --duration-seconds 3600
    此命令生成一个有效期为一小时的会话令牌。此会话令牌包含一个 AWS 访问密钥 ID、一个 AWS 秘密访问密钥以及一个 AWS 会话令牌。请注意,此会话令牌中的这组密钥与长期访问令牌中的密钥不同。

    提示

    您可使用 AWS CloudShell 替代 AWS CLI。有关 CloudShell 的详细信息,请参阅 AWS CloudShell 入门指南。有关会话令牌的更多详细信息,请参阅请求临时安全凭据

  6. 获取会话令牌后,请在 MATLAB 命令行窗口中使用setenv (MATLAB)命令,将您的 AWS 访问密钥 ID、秘密访问密钥、存储桶所在区域以及会话令牌作为系统环境变量进行设置。

    setenv("AWS_ACCESS_KEY_ID","YOUR_AWS_ACCESS_KEY_ID")
    setenv("AWS_SECRET_ACCESS_KEY","YOUR_AWS_SECRET_ACCESS_KEY")
    setenv("AWS_DEFAULT_REGION","YOUR_AWS_DEFAULT_REGION")
    setenv("AWS_SESSION_TOKEN","YOUR_AWS_SESSION_TOKEN")

    为增强代码安全性并确保代码共享更安全,您可将凭据存储在 MATLAB 保险库中作为密钥,随后在代码中调用这些密钥。有关详细信息,请参阅Keep Sensitive Information Out of Code (MATLAB)

  7. 若您在 Cloud Center 使用 MATLAB Parallel Server,请配置您的云集群以访问 S3 服务。

    创建云集群后,请使用您的 AWS 凭据配置集群配置文件。在您的 MATLAB 会话中,于 MATLAB 主页选项卡的环境部分,选择并行 > 创建和管理集群。在集群配置文件管理器中,选择您的云集群配置文件。滚动至 EnvironmentVariables 属性,并添加以下环境变量名称:AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGIONAWS_SESSION_TOKEN。有关详细信息,请参阅设置工作单元的环境变量 (Parallel Computing Toolbox)

验证从您的 MATLAB 会话访问 AWS 凭据

下载并安装 AWS 命令行接口工具。在您的 MATLAB 会话中,请检查您是否已拥有 AWS 帐户的访问权限。

!aws sts get-caller-identity

若您在 MATLAB 会话中拥有 AWS 帐户访问权限,此命令将返回您的 AWS 帐户编号及与 AWS 帐户相关的其他详细信息。

从本地计算机将数据上传至 Amazon S3

本节将向您展示如何将数据集从本地计算机上传至您的 Amazon S3 存储桶。后续章节将向您展示如何处理远程图像和文本数据。要跟随本节中的示例操作,您可以在本地计算机上下载一些 MathWorks® 数据集。请按照以下步骤开始操作。

  • 示例食物图像数据集包含 978 张食物照片,分为九个类别。您可以在 MATLAB 中使用此命令将该数据集下载到本地计算机。

    fprintf("Downloading Example Food Image data set ... ")
    filename = matlab.internal.examples.downloadSupportFile('nnet', 'data/ExampleFoodImageDataset.zip');
    fprintf("Done.\n")
    
    unzip(filename,"MyLocalFolder/FoodImageDataset");

  • 要在本地计算机上获取交通信号工作订单数据集,请使用此命令。

    fprintf("Downloading Traffic Signal Work Orders data set ... ")
    zipFile = matlab.internal.examples.downloadSupportFile("textanalytics","data/Traffic_Signal_Work_Orders.zip");
    fprintf("Done.\n")
    
    unzip(zipFile,"MyLocalFolder/TrafficDataset");

您可以通过 AWS S3 网页界面将数据上传至 Amazon S3。要更高效地与 Amazon S3 进行文件传输,请使用 AWS 命令行接口工具

要将数据集从本地计算机上传至您的 Amazon S3 存储桶,请按以下步骤操作:

  1. 在您的 MATLAB 命令行窗口中使用以下命令创建数据存储桶:将 MyCloudData 替换为您的 Amazon S3 存储桶名称。

    !aws s3 mb s3://MyCloudData

  2. 在您的 MATLAB 命令行窗口中使用以下命令上传您的数据。

    !aws s3 cp mylocaldatapath s3://MyCloudData --recursive

    例如,要将计算机上的示例食品图像数据集上传至您的 Amazon S3 存储桶,请使用以下命令:

    !aws s3 cp MyLocalFolder/FoodImageDataset s3://MyCloudData/FoodImageDataset/ --recursive

    要将交通信号工作订单数据集从本地计算机上传至您的 Amazon S3 存储桶,请使用此命令。

    !aws s3 cp MyLocalFolder/TrafficDataset s3://MyCloudData/TrafficDataset/ --recursive

从 MATLAB 中访问 Amazon S3 数据

将数据存储到 Amazon S3 后,可通过 MATLAB 中的 数据导入和导出 (MATLAB) 函数从 MATLAB 的 Amazon S3 存储桶读取或写入数据。支持在 filename 参量中指定远程位置的 MATLAB 函数,可用于访问远程数据。要检查特定函数是否允许远程访问,请参阅该函数的说明页面。

注意

若您正在 Cloud Center 的 MATLAB 会话中操作 MATLAB Parallel Server,请将图像保存至主节点上的 /shared/persisted 文件夹,以确保集群中所有工作单元均可访问该文件夹。该位置经过优化,因为每个工作单元无需单独下载数据。

例如,您可以使用 imread (MATLAB) 从 Amazon S3 存储桶读取图像。将 s3://MyCloudData 替换为您的 Amazon S3 存储桶的 URL。

  1. 使用imread (MATLAB)函数从 Amazon S3 读取图像。

    img = imread("s3://MyCloudData/FoodImageDataset/french_fries/french_fries_90.jpg");

  2. 使用imshow (MATLAB)函数显示图像。

    imshow(img)

要将数据写入 Amazon S3 存储桶,您可以类似地使用支持远程数据写入访问的 数据导入和导出 (MATLAB) 函数。要检查特定函数是否允许远程访问,请参阅该函数的说明页面。

使用数据存储从 Amazon S3 读取数据到 MATLAB

对于 Amazon S3 中的大型数据集,您可以使用数据存储从 MATLAB 客户端或集群工作节点访问数据。数据存储库是用于存储无法完全加载到内存中的大型数据集合的存储空间。数据存储库允许您将存储在远程位置多个文件中的数据作为单一实体进行读取和处理。例如,使用 imageDatastore (MATLAB) 从 Amazon S3 存储桶读取图像。将 s3://MyCloudData 替换为您的 Amazon S3 存储桶的 URL。

  1. 创建一个指向 Amazon S3 存储桶 URL 的 imageDatastore 对象。

    imds = imageDatastore("s3://MyCloudData/FoodImageDataset/", ...
     IncludeSubfolders=true, ...
     LabelSource="foldernames");
  2. 使用 readimage (MATLAB) 函数读取来自 Amazon S3 的第一张图像。

    img = readimage(imds,1);

  3. 使用imshow (MATLAB)函数显示图像。

    imshow(img)

要使用数据存储读取其他格式的文件或数据,请参阅 数据存储快速入门 (MATLAB)

要查看逐步示例,了解如何使用存储在 Amazon S3 中的数据训练卷积神经网络,请参阅 使用自动并行支持功能在云中训练网络 (Deep Learning Toolbox)

使用数据存储将数据写入 Amazon S3(源为 MATLAB)

您可以使用数据存储将数据从 MATLAB 或集群工作单元写入到 Amazon S3。例如,请按照以下步骤使用 tabularTextDatastore (MATLAB) 对象从 Amazon S3 读取表格数据到高维数组,预处理后再写回 Amazon S3。

  1. 创建一个指向 Amazon S3 存储桶 URL 的数据存储对象。

    ds = tabularTextDatastore("s3://MyCloudData/TrafficDataset/Traffic_Signal_Work_Orders.csv");
    
  2. 将表格数据读取到纵向数组中,并通过移除缺失项和排序数据进行预处理。

    tt = tall(ds);
    tt = sortrows(rmmissing(tt));

  3. 使用write (MATLAB)函数将数据写回 Amazon S3。

    write("s3://MyCloudData/TrafficDataset/preprocessedData/",tt);
    

  4. 要读取您的长数据,请使用datastore (MATLAB)函数。

    ds = datastore("s3://MyCloudData/TrafficDataset/preprocessedData/");
    tt = tall(ds);
    

要使用数据存储写入文件或其他格式的数据,请参阅 数据存储快速入门 (MATLAB)

另请参阅

主题