使用 Amazon S3 Adapter 传输文件来进行数据迁移 - Amazon Snowball Edge 开发者指南
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon S3 Adapter 传输文件来进行数据迁移

以下是 Amazon S3 适配器的概述,您可以使用该适配器通过 Amazon S3 REST API 操作以编程方式将数据传输到设备上已有的 S3 存储桶或从Amazon Snowball Edge设备上传输数据。此处的 Amazon S3 REST API 支持仅限于一部分操作。您可以将这一部分操作与其中一个 Amazon 开发工具包结合使用,以便以编程方式传输数据。您还可以对 Amazon S3 使用这一部分受支持的 Amazon Command Line Interface (Amazon CLI) 命令来以编程方式传输数据。

如果您的解决方案使用 Amazon SDK for Java 版本 1.11.0 或更新版本,则您必须使用以下 S3ClientOptions

  • disableChunkedEncoding() – 表示接口不支持分块编码。

  • setPathStyleAccess(true) – 将接口配置为针对所有请求使用路径式访问。

有关更多信息,请参阅适用于 Java 的亚马逊 S AppStream DK 中的 S3 类 ClientOptions .Builder。

重要

建议您一次只使用一种方法读取和将数据写入 Amazon Snowball Edge 设备上的本地存储桶。同时在同一存储桶上使用文件接口和 Amazon S3 Adapter 会导致读取/写入冲突。

Amazon Snowball 边缘配额 详细说明了限制。

要使 Amazon 服务在 Snowball Edge 上正常工作,您必须允许服务的端口。有关更多信息,请参阅 在 Amazon Snowball Edge 设备上使用 Amazon 服务所需的端口

下载并安装 Amazon CLI 版本 1.16.14 以便与 Amazon S3 Adapter 结合使用

目前,Snowball Edge 设备仅支持将 Amazon CLI 的版本 1.16.14 及更低版本与 Amazon S3 Adapter 结合使用。较新版本的 Amazon CLI 与 Amazon S3 Adapter 不兼容,因为它们不支持 S3 Adapter 的所有功能。

注意

如果您在 Snow 系列设备上使用与 Amazon S3 兼容的存储,则可以使用最新版本的 Amazon CLI。要下载和使用最新版本,请参阅 Amazon Command Line Interface 用户指南

在 Linux 操作系统上安装 Amazon CLI

运行以下链式命令:

curl "https://s3.amazonaws.com/aws-cli/awscli-bundle-1.16.14.zip" -o "awscli-bundle.zip";unzip awscli-bundle.zip;sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws;/usr/local/bin/aws --version;

在 Windows 操作系统上安装 Amazon CLI

为操作系统下载并运行安装程序文件:

在 Snowball Edge 设备上使用 Amazon CLI 和 API 操作

在使用 Amazon CLI 或 API 操作在 Snowball Edge 上发出 IAM、Amazon S3 和 Amazon EC2 命令时,必须将“区域”指定为“snow”。您可以使用 Amazon configure 或在命令本身中执行此操作,如以下示例所示。

aws configure --profile abc Amazon Access Key ID [None]: AKIAIOSFODNN7EXAMPLE Amazon Secret Access Key [None]: 1234567 Default region name [None]: snow Default output format [None]: json

Or

aws s3 ls --profile snowballEdge --endpoint http://192.0.2.0:8080 --region snow

使用 Amazon Snowball 的 Amazon S3 API 接口进行的授权

在您使用 Amazon S3 Adapter 时,系统会默认使用 Amazon 签名版本 4 算法对每次交互进行签名。此授权仅用于验证从数据来源传输到接口的数据。所有加密和解密工作都在设备上完成。未加密的数据从不会存储在设备上。

在使用接口时,请记住以下几点:

  • 要获取用于为向 Amazon Snowball Edge 设备发出的请求进行签名的本地 Amazon S3 凭证,请运行 snowballEdge list-access-keyssnowballEdge get-secret-access-keys Snowball Edge 客户端命令。有关更多信息,请参阅使用 Snowball Edge 客户端。这些本地 Amazon S3 凭证包含一对密钥:一个访问密钥和一个私有密钥。这些密钥仅可用于与您的作业关联的设备。由于它们不包含对应的 Amazon Identity and Access Management (IAM) 密钥,所以无法用于 Amazon Web Services 云。

  • 加密密钥不会因您使用的 Amazon Web Services 凭证类型而有所更改。使用签名版本 4 算法的签名仅用于验证从数据来源传输到接口的数据。因此,此签名永远不会影响用于加密 Snowball 上的数据的加密密钥。

获取并使用本地 Amazon S3 凭证

与 Snowball Edge 的每一次交互都会通过 Amazon 签名版本 4 算法进行签名。有关算法的更多信息,请参阅《Amazon Web Services 一般参考》中的签名版本 4 签名流程

通过运行和 snowballEdge list-access-keyssnowballEdge get-secret-access-key Snowball Edge 客户端信息,您可以获取本地 Amazon S3 凭证,以便签署您对 Snowball Edge 客户端 Edge 设备的请求,请参阅获取凭证。这些本地 Amazon S3 凭证包含一对密钥:一个访问密钥 ID 和一个私有密钥。这些凭证仅可用于与您的作业关联的设备。由于它们不包含对应的 IAM 密钥,所以无法用于 Amazon Web Services 云。

您可以将这些凭证添加到服务器上的 Amazon Web Services 凭证文件。默认的凭证配置文件通常位于 ~/.aws/credentials,但该位置可能因平台而异。此文件由多个 Amazon 开发工具包以及 Amazon CLI 共享。您可以使用配置文件名称保存本地凭证,如以下示例所示。

[snowballEdge] aws_access_key_id = AKIAIOSFODNN7EXAMPLE aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

将 S3 Adapter 指定为 Amazon CLI 端点

当您使用 Amazon CLI 向 Amazon Snowball Edge 设备发出命令时,请指定端点为 Amazon S3 Adapter。您可以选择使用 HTTPS 端点,或不安全的 HTTP 端点,如下所示。

HTTPS 安全端点

aws s3 ls --profile snowballEdge --endpoint https://192.0.2.0:8443 --ca-bundle path/to/certificate

HTTP 不安全端点

aws s3 ls --profile snowballEdge --endpoint http://192.0.2.0:8080

如果您使用 HTTPS 端点 8443,则您的数据将从服务器安全地传输到 Snowball Edge。使用 Snowball Edge 在获取新 IP 地址时所生成的证书来确保此加密。在您具有证书后,可以将其保存到本地 ca-bundle.pem 文件。然后,可以将 Amazon CLI 配置文件配置为包含您的证书的路径,如下所述。

将您的证书与接口端点相关联
  1. 为 Snowball Edge 接通电源并将其连接到网络,然后启动它。

  2. 在设备启动完成后,记下其在本地网络上的 IP 地址。

  3. 从您的网络上的终端,确保您可以对 Snowball Edge 执行 ping 操作。

  4. 在您的终端中运行 snowballEdge get-certificate 命令。有关此命令的更多信息,请参阅 管理公有密钥证书

  5. snowballEdge get-certificate 命令的输出保存到文件,例如 ca-bundle.pem

  6. 从您的终端运行以下命令。

    aws configure set profile.snowballEdge.ca_bundle /path/to/ca-bundle.pem

在您完成此过程之后,可以使用这些本地凭证、您的证书和您指定的端点运行 CLI 命令,如以下示例所示。

aws s3 ls --profile snowballEdge --endpoint https://192.0.2.0:8443

Amazon S3 Adapter 不支持的 Amazon S3 特征

使用 Amazon S3 Adapter,您可以以编程方式通过 Amazon S3 API 操作在 Snowball Edge 中传输数据。但是,并非所有 Amazon S3 传输特征和 API 操作支持在使用 Amazon S3 Adapter 时用于 Snowball Edge 设备。例如,以下特征和操作不支持用于 Snowball Edge:

  • TransferManager— 此实用程序使用适用于 Java 的 SDK 将文件从本地环境传输到 Amazon S3。考虑改为将支持的 API 操作或 Amazon CLI 命令与接口结合使用。

  • GET 存储桶(列出对象)版本 2 – 此 GET 操作的实施返回存储库中的部分或全部(最多 1,000 个)对象。考虑使用 GET 存储桶(列出对象)版本 1 操作或 ls Amazon CLI 命令。

  • ListBuckets— 不支持 ListBuckets 带有对象端点的。以下命令不适用于 Snow 系列设备上与 Amazon S3 兼容的存储:

    aws s3 ls --endpoint https://192.0.2.0 --profile profile