导出快照 - 适用于 Redis 的 Amazon MemoryDB

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

导出快照

MemoryDB for Redis 支持将 MemoryDB 快照导出到 Amazon Simple Storage Service(Amazon S3)记忆桶,这让您可以从 MemoryDB 之外访问它。导出的 MemoryDB 快照完全符合开源 Redis,并且可以使用适当的 Redis 版本或工具进行加载。您可以使用 MemoryDB 控制台 AWS CLI、或 MemoryDB API 导出快照。

如果您需要在其他 AWS 区域启动集群,则导出快照会很有帮助。您可以将数据导出到一个 AWS 区域,将.rdb 文件复制到新 AWS 区域,然后使用该.rdb 文件为新集群做种子,而不必等待新集群通过使用进行填充。有关为新集群做种的信息,请参阅 使用外部创建的快照为新集群做种。您可能希望导出集群数据的另一个原因是将 .rdb 文件用于脱机处理。

重要
  • MemoryDB 快照和您要将其复制到的 Amazon S3 存储桶必须位于同一 AWS 区域。

    尽管复制到 Amazon S3 存储桶的快照已加密,但我们强烈建议您不要将要存储快照的 Amazon S3 存储桶的访问权限授予他人。

  • 使用数据分层功能的集群不支持将快照导出到 Amazon S3。有关更多信息,请参阅 数据分层

在将快照导出到 Amazon S3 存储桶之前,您必须将 Amazon S3 存储桶与快照位于同一 AWS 区域。向 MemoryDB 授予对存储桶的访问权限。前两个步骤向您演示了如何执行此操作。

警告

以下方案会以您可能不希望的方式公开您的数据:

  • 其他人具有您将快照导出到其中的 Amazon S3 存储桶的访问权限时。

    要控制对快照的访问权限,请将对 Amazon S3 存储桶的访问权限仅授予您允许访问数据的人员。有关管理对 Amazon S3 存储桶的访问权限的信息,请参阅 Amazon S3 开发人员指南中的管理访问权限

  • 当其他人有权使用 CopySnapshot API 操作时。

    有权限使用 CopySnapshot API 操作的用户或组可以创建自己的 Amazon S3 存储桶并将快照复制到其中。要控制对快照的访问权限,请使用 AWS Identity and Access Management (IAM) 策略来控制谁有权使用 CopySnapshot API。有关使用 IAM 控制 MemoryDB API 操作使用的更多信息,请参阅 MemoryDB 用户指南中的 MemoryDB for Redis 中的身份和访问管理

步骤 1:创建 Amazon S3 存储桶

以下过程使用 Amazon S3 控制台创建您可以在其中导出和存储 MemoryDB 快照的 Amazon S3 存储桶。

创建 Amazon S3 存储桶
  1. 登录 AWS Management Console 并打开亚马逊 S3 控制台,网址为 https://console.aws.amazon.com/s3/

  2. 选择创建存储桶

  3. Create a Bucket - Select a Bucket Name and Region 中,执行以下操作:

    1. Bucket Name(存储桶名称)中键入 Amazon S3 存储桶的名称。

    2. 区域列表中,为您的 Amazon S3 存储桶选择一个 AWS 区域。此 AWS 区域必须与您要导出的 MemoryDB 快照位于同一 AWS 区域。

    3. 选择创建

有关创建 Amazon S3 存储桶的更多信息,请参阅 Amazon Simple Storage Service 用户指南中的创建存储桶

步骤 2:授予 MemoryDB 对 Amazon S3 存储桶的访问权限

AWS 2019 年 3 月 20 日之前推出的区域默认处于启用状态。您可以立即开始在这些 AWS 地区工作。2019 年 3 月 20 日之后推出的区域默认情况下处于禁用状态。您必须按照管理 AWS 区域所述,先启用或选择加入这些区域,然后才能使用它们。

授予 MemoryDB 访问某个区域内您的 S3 存储桶的权限 AWS

要在某个 AWS 区域的 Amazon S3 存储桶上创建适当的权限,请执行以下步骤。

向 MemoryDB 授予对 S3 存储桶的访问权限
  1. 登录 AWS Management Console 并打开亚马逊 S3 控制台,网址为 https://console.aws.amazon.com/s3/

  2. 选择要将快照复制到其中的 Amazon S3 存储桶的名称。这应该是您在步骤 1:创建 Amazon S3 存储桶中创建的 S3 存储桶。

  3. 选择权限选项卡,在权限下面,选择存储桶策略

  4. 更新策略以授予 MemoryDB 执行操作所需的权限:

    • [ "Service" : "region-full-name.memorydb-snapshot.amazonaws.com" ] 添加到 Principal

    • 添加将快照导出到 Amazon S3 存储桶所需的以下权限。

      • "s3:PutObject"

      • "s3:GetObject"

      • "s3:ListBucket"

      • "s3:GetBucketAcl"

      • "s3:ListMultipartUploadParts"

      • "s3:ListBucketMultipartUploads"

    以下是更新策略具体形式的示例。

    { "Version": "2012-10-17", "Id": "Policy15397346", "Statement": [ { "Sid": "Stmt15399483", "Effect": "Allow", "Principal": { "Service": "aws-region.memorydb-snapshot.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:GetBucketAcl", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::example-bucket", "arn:aws:s3:::example-bucket/*" ] } ] }

步骤 3:导出 MemoryDB 快照

现在您已经创建了 S3 存储桶并向 MemoryDB 授予了访问它的权限。将 S3 对象所有权更改为启用 ACL - 首选存储桶拥有者。接下来,你可以使用 MemoryDB 控制台、CL AWS I 或 MemoryDB API 将快照导出到控制台。下面假设您拥有以下附加的 S3 特定 IAM 权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListAllMyBuckets", "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::*" }] }

以下步骤使用 MemoryDB 控制台将备份导出到 Amazon S3 存储桶,以便从 MemoryDB 外部访问它。Amazon S3 存储桶必须与 MemoryDB 快照位于同一 AWS 区域。

将 MemoryDB 快照导出到 Amazon S3 桶
  1. 登录 AWS Management Console 并打开 Redis 版 MemoryDB 控制台,网址为 https://console.aws.amazon.com/memorydb/。

  2. 要查看您的快照列表,请从左侧导航窗格中,选择快照

  3. 在快照列表中,选择要导出的快照名称左侧的单选按钮。

  4. 选择复制

  5. Create a Copy of the Backup?(创建备份副本?)中,执行以下操作:

    1. 新快照名称框中,输入新快照的名称。

      名称必须在 1 到 1000 个字符之间,并能够以 UTF-8 编码。

      MemoryDB 对您在此处输入的值添加分片标识符和 .rdb。例如,如果您输入 my-exported-snapshot,则 MemoryDB 创建 my-exported-snapshot-0001.rdb

    2. 目标 S3 位置列表中,选择要将快照复制到其中的 Amazon S3 存储桶(您在 步骤 1:创建 Amazon S3 存储桶 中创建的存储桶)的名称。

      目标 S3 位置必须是快照 AWS 区域中具有以下权限的 Amazon S3 存储桶,导出过程才能成功。

      • 对象访问 – Read(读取)Write(写入)

      • 权限访问 – Read(读取)

      有关更多信息,请参阅 步骤 2:授予 MemoryDB 对 Amazon S3 存储桶的访问权限

    3. 选择复制

注意

如果您的 S3 存储桶没有供 MemoryDB 将快照导出到其中所需的权限,则您将收到以下某个错误消息。返回到 步骤 2:授予 MemoryDB 对 Amazon S3 存储桶的访问权限,添加指定权限并重试导出快照的操作。

  • 未授予 MemoryDB 在 S3 存储桶上的 READ 权限 %s。

    解决方案:在存储桶上添加 Read 权限。

  • 未授予 MemoryDB 在 S3 存储桶上的 WRITE 权限 %s。

    解决方案:在存储桶上添加 Write 权限。

  • 未授予 MemoryDB 在 S3 存储桶上的 READ_ACP 权限 %s。

    解决方案:为存储桶的权限访问添加 Read

如果您想将快照复制到其他 AWS 区域,请使用 Amazon S3 将其复制。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的复制对象

使用带有以下参数的 copy-snapshot CLI 操作将快照导出到 Amazon S3 存储桶:

参数
  • --source-snapshot-name – 要复制的快照的名称。

  • --target-snapshot-name – 快照副本的名称。

    名称必须在 1 到 1000 个字符之间,并能够以 UTF-8 编码。

    MemoryDB 对您在此处输入的值添加分片标识符和 .rdb。例如,如果您输入 my-exported-snapshot,则 MemoryDB 创建 my-exported-snapshot-0001.rdb

  • --target-bucket – 您要将快照导出到其中的 Amazon S3 存储桶的名称。在指定存储桶中生成快照的副本。

    --target-bucket必须是快照 AWS 所在区域中具有以下权限的 Amazon S3 存储桶,导出过程才能成功。

    • 对象访问 – Read(读取)Write(写入)

    • 权限访问 – Read(读取)

    有关更多信息,请参阅 步骤 2:授予 MemoryDB 对 Amazon S3 存储桶的访问权限

以下操作将快照复制到 my-s3-bucket。

对于 Linux、macOS 或 Unix:

aws memorydb copy-snapshot \ --source-snapshot-name automatic.my-primary-2021-06-27-03-15 \ --target-snapshot-name my-exported-snapshot \ --target-bucket my-s3-bucket

对于 Windows:

aws memorydb copy-snapshot ^ --source-snapshot-name automatic.my-primary-2021-06-27-03-15 ^ --target-snapshot-name my-exported-snapshot ^ --target-bucket my-s3-bucket
注意

如果您的 S3 存储桶没有供 MemoryDB 将快照导出到其中所需的权限,则您将收到以下某个错误消息。返回到 步骤 2:授予 MemoryDB 对 Amazon S3 存储桶的访问权限,添加指定权限并重试导出快照的操作。

  • 未授予 MemoryDB 在 S3 存储桶上的 READ 权限 %s。

    解决方案:在存储桶上添加 Read 权限。

  • 未授予 MemoryDB 在 S3 存储桶上的 WRITE 权限 %s。

    解决方案:在存储桶上添加 Write 权限。

  • 未授予 MemoryDB 在 S3 存储桶上的 READ_ACP 权限 %s。

    解决方案:为存储桶的权限访问添加 Read

有关更多信息,请参阅 AWS CLI 命令参考 中的 copy-snapshot

如果您想将快照复制到其他 AWS 区域,请使用 Amazon S3 副本。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的复制对象

使用带有以下参数的 CopySnapshot API 操作将快照导出到 Amazon S3 存储桶。

参数
  • SourceSnapshotName – 要复制的快照的名称。

  • TargetSnapshotName – 快照副本的名称。

    名称必须在 1 到 1000 个字符之间,并能够以 UTF-8 编码。

    MemoryDB 对您在此处输入的值添加分片标识符和 .rdb。例如,如果您输入 my-exported-snapshot,则将获得 my-exported-snapshot-0001.rdb

  • TargetBucket – 您要将快照导出到其中的 Amazon S3 存储桶的名称。在指定存储桶中生成快照的副本。

    TargetBucket必须是快照 AWS 所在区域中具有以下权限的 Amazon S3 存储桶,导出过程才能成功。

    • 对象访问 – Read(读取)Write(写入)

    • 权限访问 – Read(读取)

    有关更多信息,请参阅 步骤 2:授予 MemoryDB 对 Amazon S3 存储桶的访问权限

以下示例演示将自动快照复制到 Amazon S3 存储桶 my-s3-bucket

https://memory-db.us-east-1.amazonaws.com/ ?Action=CopySnapshot &SourceSnapshotName=automatic.my-primary-2021-06-27-03-15 &TargetBucket=my-s3-bucket &TargetSnapshotName=my-snapshot-copy &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20210801T220302Z &Version=2021-01-01 &X-Amz-Algorithm=Amazon4-HMAC-SHA256 &X-Amz-Date=20210801T220302Z &X-Amz-SignedHeaders=Host &X-Amz-Expires=20210801T220302Z &X-Amz-Credential=<credential> &X-Amz-Signature=<signature>
注意

如果您的 S3 存储桶没有供 MemoryDB 将快照导出到其中所需的权限,则您将收到以下某个错误消息。返回到 步骤 2:授予 MemoryDB 对 Amazon S3 存储桶的访问权限,添加指定权限并重试导出快照的操作。

  • 未授予 MemoryDB 在 S3 存储桶上的 READ 权限 %s。

    解决方案:在存储桶上添加 Read 权限。

  • 未授予 MemoryDB 在 S3 存储桶上的 WRITE 权限 %s。

    解决方案:在存储桶上添加 Write 权限。

  • 未授予 MemoryDB 在 S3 存储桶上的 READ_ACP 权限 %s。

    解决方案:为存储桶的权限访问添加 Read

有关更多信息,请参阅CopySnapshot

如果您想将快照复制到其他 AWS 区域,请使用 Amazon S3 副本将导出的快照复制到另一个 AWS 区域的 Amazon S3 存储桶。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的复制对象