准备工作
本文介绍数据迁移之前的准备工作。
步骤一:上传列表文件
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 -L --HEAD "$url"]、[curl -L --GET "$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
否
迁移文件的大小。
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, Bucket, 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用户并按照最小权限原则对该RAM用户进行授权后用于迁移数据。
登录RAM控制台。
在左侧导航栏,选择
。在用户页面,单击创建用户。
在创建用户页面的用户账号信息区域,输入登录名称和显示名称。
在访问方式区域,选中控制台访问和OpenAPI调用访问。并保存生成的账号、密码、AccessKey ID和AccessKey Secret。
控制台访问:设置控制台密码、需要重置密码和MFA多因素认证。
OpenAPI调用访问:自动为RAM用户生成访问密钥(AccessKey),支持通过API或其他开发工具进行访问。
步骤四:为RAM用户添加权限
创建RAM用户成功后,在用户页面,单击目标RAM用户操作列的添加权限。
系统策略:管理OSS在线迁移服务的权限(AliyunOSSImportFullAccess)
自定义策略:
授予RAM用户对存放迁移后数据的Bucket的完全控制权限
说明以下权限策略仅供您参考,其中
mybucket
为存放迁移后数据的Bucket名称,请根据实际值替换。关于OSS权限策略的更多信息,请参见RAM Policy常见示例。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ] }
- 本页导读 (1)