通过 S3 存储桶从 ElastiCache 迁移到 Redis Cloud
最后更新日期:2025 年 3 月 26 日
目标
本文介绍如何通过使用 S3 存储桶从 ElastiCache 迁移到 Redis Cloud。
解决方案
步骤 1. 创建 S3 存储桶并授予 ElastiCache 访问权限
- 遵循 AWS 的导出备份教程,特别注意启用 ACL 并为 ElastiCache 受赠者添加规范 ID
- 选择权限选项卡,在权限下,选择访问控制列表 (ACL),然后选择编辑。
- 添加受赠者规范 ID
540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353
,并配置以下选项- 对象:列出、写入
- 存储桶 ACL:读取、写入
这将确保 ElastiCache 有权将备份导出到您的存储桶。生成的备份对象将使用唯一的外部 AWS 账户所有者创建:aws-scs-s3-readonly
步骤 2. 将所有 ElastiCache 备份导出到 S3
我发现最简单的方法是按照导出 ElastiCache 备份中“导出 ElastiCache 备份 (控制台)”下拉菜单中的指示使用 AWS 控制台进行操作
您可以使用具有足够权限的 IAM 调用者通过 AWS 控制台或 CLI 进行操作
AWS 提供的所需 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:::*"
}]
}
您可能会注意到,对于 ElastiCache 备份对象,对象所有者始终是
aws-scs-s3-readonly
,ElastiCache 受赠者的Canonical ID
指的是外部账户
步骤 3. 添加Redis Cloud 存储桶策略,以授予 Redis Cloud 对您存储桶的访问权限
- 使用服务菜单找到并选择存储 > S3。这将带您进入 Amazon S3 管理面板。
- 使用存储桶列表找到并选择您的存储桶。出现设置时,选择权限选项卡,找到存储桶策略部分,然后点击编辑。
- 如果尚无存储桶策略,请添加以下 JSON 存储桶策略。将
<UNIQUE-BUCKET-NAME>
替换为您存储桶的名称。
{
"Version": "2012-10-17",
"Id": "MyBucketPolicy",
"Statement": [
{
"Sid": "RedisCloudBackupsAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::168085023892:root"
},
"Action": [
"s3:PutObject",
"s3:getObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::UNIQUE-BUCKET-NAME/*"
}
]
}
如果存储桶策略已存在,请将以下 JSON 策略语句添加到语句列表中。将
UNIQUE-BUCKET-NAME
替换为您存储桶的名称。
{
"Sid": "RedisCloudBackupsAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::168085023892:root"
},
"Action": [
"s3:PutObject",
"s3:getObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::UNIQUE-BUCKET-NAME/*"
}
如果存储桶使用SSE-KMS 加密,请务必同时考虑密钥策略要求
如果存储桶使用SSE-KMS 加密,请将以下语句添加到您的密钥策略中。如果您没有密钥策略,请参阅创建密钥策略。将
<UNIQUE-BUCKET-NAME>
替换为您存储桶的名称,将<KMS-KEY-ARN>
替换为您的密钥的 Amazon 资源名称 (ARN)。
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::168085023892:root"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": [
"arn:aws:s3:::<UNIQUE-BUCKET-NAME>/*",
"<KMS-KEY-ARN"
]
}
步骤 4. 移除 ElastiCache 受赠者并禁用存储桶上的 ACL
只要启用了 ACL 并且对象由 aws-scs-s3-readonly
拥有,我们的存储桶策略就不会应用于 ElastiCache 备份对象
以 JSON 格式编写的存储桶策略提供对存储在存储桶中对象的访问权限。存储桶策略不适用于由其他账户拥有的对象。
通过禁用 ACL,所有对象的所有权将恢复到存储桶所有者,并确保我们的存储桶策略生效
步骤 5. 像往常一样将对象导入到 Redis Cloud DB
- 在Redis Cloud 控制台中,从数据库列表中选择目标数据库。
- 在危险区域中,选择导入。
- 输入 RDB 文件的详细信息
- 源类型 - 选择AWS S3。
- 源路径 - 输入 RDB 文件的 URL:
s3://bucketname/[path/]filename.rdb[.gz]
bucketname
- S3 存储桶的名称path
- 文件路径(如有需要)filename
- RDB 文件的文件名,如果文件已压缩,则包括 .gz 后缀
- 选择添加源,为包含多个 RDB 文件的分片数据库添加另一个 RDB 文件。
- 选择导入。