导出快照 - Amazon MemoryDB

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

导出快照

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

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

重要
  • MemoryDB 快照以及您希望将该快照复制到其中的 Amazon S3 存储桶必须位于同一个 AWS 区域中。

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

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

您必须具有与快照位于同一个 AWS 区域的 Amazon S3 存储桶,才能将快照导出到 Amazon S3 存储桶。向 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 中的身份和访问管理

步骤 1:创建 Amazon S3 存储桶

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

创建 Amazon S3 存储桶
  1. 登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择 Create Bucket(创建存储桶)。

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

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

    2. Region(区域)列表中,选择 Amazon S3 存储桶的 AWS 区域。此 AWS 区域必须与要将 MemoryDB 快照导出到的 AWS 区域相同。

    3. 选择创建

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

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

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

授予 MemoryDB 对 AWS 区域中的 S3 存储桶的访问权限

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

向 MemoryDB 授予对 S3 存储桶的访问权限
  1. 登录到AWS Management Console,然后通过以下网址打开 Amazon 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 控制台、AWS CLI 或 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 并打开 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 用户指南中的复制对象