准备工作
本文介绍数据迁移之前的准备工作。
步骤一:上传列表文件
HTTP/HTTPS列表文件包括2类文件,1个manifest.json文件和1个或多个example.csv.gz文件,example.csv.gz为CSV压缩后的列表文件,单个example.csv.gz文件大小不超过25 MB,manifest.json为对CSV文件进行项配置的文件,支持上传至OSS或者AWS S3。
创建CSV列表文件
在本地创建CSV格式的列表文件。列表文件最多支持8项,项与项之间用英文逗号(,)分隔;每行一个文件,文件之间用
\n
换行。各项的含义如下表所示。重要Key和Url为必填项,其余项可以不填写。
必填项
名称
是否必填
描述
说明
Url
是
在线迁移服务使用该链接的Get请求下载文件内容,Head请求获取文件元数据。
说明Url需确保可以直接使用[curl --HEAD "$Url"]、[curl --GET "$Url"]等命令正常访问。在线迁移服务不支持重定向的$Url。
Url和Key项必须要做编码处理,不做编码处理、包含特殊字符可能会导致文件迁移失败。
Url项的编码原则:在
curl
等命令行工具(非重定向)可正常访问的基础上,再进行一次Url编码。Key项的编码原则:在您期望该文件在OSS上的ObjectName基础之上,再进行一次Url编码。
重要Url和Key项做编码处理后,请务必进行以下内容确认,否则可能会导致文件迁移失败,或迁移到目的端的文件路径与您的预期不符。
原字符串中的加号(+)已被编码成%2B。
原字符串中的百分号(%)已被编码成%25。
原字符串中的半角逗号(,)已被编码成%2C。
例如,原字符串为
a+b%c,d.file
,编码后的字符串应该是a%2Bb%25c%2Cd.file
。Key
是
迁移后的Object Name为prefix+文件名。
如下Python编码示例代码仅供您参考。
# -*- coding: utf-8 -*- import sys if sys.version_info.major == 3: from Urllib.parse import quote_plus else: from Urllib import quote_plus raw_Urls = [ # Format: ($Url, $key) # Url: These Urls can be accessed normally by using linux 'curl' or 'wget' cmd. # key: These keys are the ObjectName you expect on OSS. ("http://www.example1.com/path/ab.file?t=aef87", "ab.file"), ("http://www.example2.com/path/a+b.file", "a+b.file"), ("http://www.example3.com/path/a%b.file", "a%b.file"), ("http://www.example4.com/path/a,b.file", "a,b.file"), ("http://www.example5.com/path/a b.file", "a b.file"), ("http://www.example6.com/path/a和b.file", "a和b.file"), ("http://www.example7.com/path/a%E4%B8%8Eb.file", "a%E4%B8%8Eb.file"), ("http://www.example8.com/path/a\\b.file", "a\\b.file") ] for item in raw_Urls: Url, key = item[0], item[1] enc_Url = quote_plus(Url) enc_key = quote_plus(key) # The enc_Url and enc_key vars are encoded format, you can use them to build csv files. print("(%s, %s) -> (%s, %s)" % (Url, key, enc_Url, enc_key))
全部项
名称
是否必填
说明
Key
是
迁移后的Object Name为prefix+文件名。
Url
是
在线迁移服务使用该链接的Get请求下载文件内容,Head请求获取文件元数据。
Size
否
迁移文件的大小,单位为字节(Byte)。
StorageClass
否
源Bucket的存储类型。
LastModifiedDate
否
待迁移文件的最后修改时间。
ETag
否
待迁移文件的ETag。
HashAlg
否
待迁移文件的Hash算法。
HashValue
否
待迁移文件的Hash值。
说明以上示例中各项的顺序并非固定顺序,只需与manifest.json文件中fileSchema项顺序保持一致即可。
压缩CSV文件
需要将CSV文件压缩为csv.gz文件,压缩方法如下:
压缩单个文件
例如dir目录下有一个文件file1,需执行如下压缩命令:
gzip -r dir
说明执行以上
gzip
命令压缩文件,不会保留源文件,如需保留源文件压缩,请执行命令gzip -c 源文件 >源文件.gz
。压缩后得到
file1.gz
文件。压缩多个文件
例如dir目录下有三个文件file1、file2和 file3,需执行如下压缩命令:
gzip -r dir
说明gzip
命令不会打包目录,而是将指定目录下所有子文件分别进行压缩。压缩后得到三个文件file1.gz、file2.gz和file3.gz。
创建manifest.json文件
支持配置多个CSV文件,具体内容如下。
fileFormat:指定列表文件格式为CSV
fileSchema:对应CSV中文件项,请注意顺序。
files:
key:CSV文件在Bucket中的位置。
mD5checksum:16进制的MD5字符串,不区分大小写。例如:91A76757B25C8BE78BC321DEEBA6A5AD,如果不填写该值,则不会做校验。
size:列表文件大小。
如下示例仅供您参考。
{ "fileFormat":"CSV", "fileSchema":"Url, Key, Size, StorageClass, LastModifiedDate, ETag, HashAlg, HashValue ", "files":[{ "key":"dir/example1.csv.gz", "mD5checksum":"", "size":0 },{ "key":"dir/example2.csv.gz", "mD5checksum":"", "size":0 }] }
您可以选择将创建的2类列表文件上传到OSS或AWS S3。
将创建的2类列表文件上传到OSS的具体操作,请参见简单上传。
说明列表文件上传到OSS后,在线迁移服务会下载列表文件,并根据指定的地址迁移文件。
新建任务时,请填写文件列表所在Bucket信息,列表路径的格式为
列表所在目录/manifest.json
,例如dir/manifest.json。
将创建的2类列表文件上传到AWS S3。
说明列表文件上传到AWS S3后,在线迁移服务会下载列表文件,并根据指定的地址迁移文件。
新建任务时,请填写文件列表所在Bucket信息,列表路径的格式为
列表所在目录/manifest.json
,例如dir/manifest.json。
步骤二:创建目标存储空间
创建目标存储空间,用于存放迁移的数据。具体操作,请参见创建存储空间。
步骤三:登录控制台的RAM用户添加权限
在用户页面,单击目标RAM用户操作列的添加权限。
系统策略:管理OSS在线迁移服务的权限(AliyunOSSImportFullAccess)。
自定义权限策略:该策略必须包含
ram:CreateRole
、ram:CreatePolicy
、ram:AttachPolicyToRole
权限。用于在线迁移控制台创建OSS数据地址 > 授权角色 > 新建角色使用。
步骤四:创建用于迁移数据的RAM角色
为了保证数据安全,推荐您创建RAM角色并按照最小权限原则对该RAM角色进行授权策略后用于迁移数据。
如果需要跨账号迁移数据,请在登录控制台账号下创建相应清单存储的阿里云账号和目的阿里云账号的RAM角色,并授予相关权限策略。
登录RAM控制台。
在左侧导航栏,选择
。在角色页面,单击创建角色。
在创建角色页面的选择可信实体类型区域,选择阿里云服务,点击下一步。
在已选择可信实体类型区域,选择普通服务角色,输入角色名称和选择受信服务(在线迁移服务)。
步骤五:为RAM角色授权策略
创建RAM角色成功后,在角色页面,单击目标RAM角色操作列的授权策略。根据不同的迁移场景,授予RAM角色相应的权限策略。
同账号迁移(与登录控制台用户为同账号)
同账号迁移时,需要为RAM角色授予以下权限。
自定义策略:
授予RAM角色对存放迁移后数据的Bucket下所有资源进行列举、读取、中止和写操作的权限。
说明以下权限策略仅供您参考,其中
<mybucket>
为存放迁移后数据的Bucket名称,请根据实际值替换。关于OSS权限策略的更多信息,请参见RAM Policy常见示例。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:List*", "oss:Get*", "oss:Put*", "oss:AbortMultipartUpload" ], "Resource": [ "acs:oss:*:*:<mybucket>", "acs:oss:*:*:<mybucket>/*" ] } ] }
授予RAM角色列举并读取清单数据所在Bucket下所有资源的权限
说明以下权限策略仅供您参考,其中
<mybucket>
为待迁移列表的Bucket名称,请根据实际值替换。关于OSS权限策略的更多信息,请参见RAM Policy常见示例。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:List*", "oss:Get*" ], "Resource": [ "acs:oss:*:*:<mybucket>", "acs:oss:*:*:<mybucket>/*" ] } ] }
跨账号迁移(与登录控制台用户为不同账号)
跨账号迁移时,需要分别为RAM角色授予以下权限。